MySQL 1

Propaganda
MySQL
Criando bancos de dados
O sistema de banco de dados do MySQL pode suportar muitos bancos de dados
diferentes. Geralmente apenas um banco de dados é utilizado por aplicação.
Sintaxe:
CREATE DATABASE nomedabasededados
No prompt de comando do MySQL, digite:
mysql> create database loja;
Obs: Utilize sempre o caractér ; (ponto-e-vírgula) para finalizar o comando.
Criando tabelas
Para criar tabelas utlizamos o comando de SQL CREATE TABLE.
Sintaxe:
CREATE TABLE nomedatabela(colunas)
Exemplo:
CREATE TABLE clientes (
codigo int not null auto_increment primary key;
nome varchar(100) not null,
endereco varchar(100) not null,
tel_celular varchar(30) not null,
data_aniversario date null
);
O que são estas outras palavras?



NOT NULL: Significa que neste campo não pode ficar em branco, se não
for especificado o campo pode ficar nulo.
AUTO_INCREMENT: Este recurso especial só pode ser usado em campos
do tipo inteiro. Siginifica que se deixarmos aquele campo em branco ao
inserir um registro, O MySQL gerará automaticamente um valor
identificador único. Esse valor será um maior que o valor máximo já
existente. Só pode haver um campo deste tipo em cada tabela.
PRIMARY_KEY: Indica o campo que é a chave primária da tabela.
Conhecendo os tipos de campo
1 Tipos numéricos:
Existem tipos de dados numéricos, que se podem dividir em dois grandes grupos,
os que estão em vírgula flutuante (com decimais) e os que não.
TinyInt: é um número inteiro com ou sem signo. Com signo a margem de valores
válidos é desde -128 até 127. Sem signo, a margem de valores é de 0 até 255
Bit ou Bool: um número inteiro que pode ser 0 ou 1.
SmallInt: número inteiro com ou sem signo. Com signo a margem de valores
válidos é desde -32768 até 32767. Sem signo, a margem de valores é de 0 até
65535.
MediumInt: número inteiro com ou sem signo. Com signo a margem de valores
válidos é desde -8.388.608 até 8.388.607. Sem signo, a margem de valores é de 0
até 16777215.
Integer, Int: número inteiro com ou sem signo. Com signo a margem de valores
válidos é desde -2147483648 até 2147483647. Sem signo, a margem de valores é
de 0 até 429.496.295
BigInt: número inteiro com ou sem signo. Com signo a margem de valores válidos
é desde -9.223.372.036.854.775.808 até 9.223.372.036.854.775.807. Sem signo,
a margem de valores é de 0 até 18.446.744.073.709.551.615.
Float: número pequeno em vírgula flutuante de precisão simples. Os valores
válidos vão desde -3.402823466E+38 até -1.175494351E-38,0 eté desde
175494351E-38 até 3.402823466E+38.
xReal, Double: número em vírgula flutuante de dupla precisão. Os valores
permitidos vão desde -1.7976931348623157E+308 até -2.2250738585072014E308, 0 e desde 2.2250738585072014E-308 até 1.7976931348623157E+308
Decimal, Dec, Numeric: Número em vírgula flutuante desempacotado. O número
armazena-se como uma cadeia.
Tipo de Campo
Tamanho de Armazenamento
TINYINT
1 byte
SMALLINT
2 bytes
MEDIUMINT
3 bytes
INT
4 bytes
INTEGER
4 bytes
BIGINT
8 bytes
FLOAT(X)
4 ou 8 bytes
FLOAT
4 bytes
DOUBLE
8 bytes
DOUBLE PRECISION
8 bytes
REAL
8 bytes
DECIMAL(M,D)
M+2 bytes se D > 0, M+1 bytes se D = 0
NUMERIC(M,D)
M+2 bytes se D > 0, M+1 bytes se D = 0
2 Tipos data:
Na hora de armazenar datas, há que ter em conta que MySQL não verifica de uma
maneira estricta se uma data é válida ou não. Simplesmente comprova que o mês
está compreendido entre 0 e 12 e que o dia está compreendido entre 0 e 31.
Date: tipo data, armazena uma data. A margem de valores vai desde o 1 de
Janeiro de 1001 ao 31 de dezembro de 9999. O formato de armazenamento é de
ano-mes-dia.
DateTime: Combinação de data e hora. A margem de valores vai desde o 1 ed
Janeiro de 1001 às 0 horas, 0 minutos e 0 segundos ao 31 de Dezembro de 9999
às 23 horas, 59 minutos e 59 segundos. O formato de armazenamento é de anomes-dia horas:minutos:segundos
TimeStamp: Combinação de data e hora. A margem vai desde o 1 de Janeiro de
1970 ao ano 2037. O formato de armazenamento depende do tamanho do campo:
Tamanho
Formato
14
AnoMesDiaHoraMinutoSegundo aaaammddhhmmss
12
AnoMesDiaHoraMinutoSegundo aammddhhmmss
8
AnoMesDia aaaammdd
6
AnoMesDia aammdd
4
AnoMes aamm
2
Ano aa
Time: armazena uma hora. A margem de horas vai desde -838 horas, 59 minutos
e 59 segundos. O formato de armazenamento é 'HH:MM:SS'.
Year: armazena um ano. A margem de valores permitidos vai desde o ano 1901 ao
ano 2155. O campo pode ter tamanho dois ou tamanho 4 dependendo de se
queremos armazenar o ano com dois ou quatro algarismos.
Tipo de Campo Tamanho de Armazenamento
DATE
3 bytes
DATETIME
8 bytes
TIMESTAMP
4 bytes
TIME
3 bytes
YEAR
1 byte
3 Tipos de cadeia:
Char(n): armazena uma cadeia de longitude fixa. A cadeia poderá conter desde 0
até 255 caracteres.
VarChar(n): armazena uma cadeia de longitude variável. A cadeia poderá conter
desde 0 até 255 caracteres. Dentro dos tipos de cadeia pode-se distinguir dois
subtipos, os tipo Test e os tipo Blob (Binary Large Object) A diferença entre um tipo
e outro é o tratamento que recebem na hora de ordená-los e compará-los. No tipo
test ordena-se sem ter importância as maiúsculas e as minúsculas e no tipo blob
ordena-se tendo em conta as maiúsculas e minúsculas.
Os tipos blob utilizam-se para armazenar dados binários como podem ser ficheiros.
TinyText e TinyBlob: Coluna com uma longitude máxima de 255 caracteres.
Blob e Text: um texto com um máximo de 65535 caracteres.
MediumBlob e MediumText: um texto com um máximo de 16.777.215
caracteres.
LongBlob e LongText: um texto com um máximo de caracteres 4.294.967.295.
Há que ter em conta que devido aos protocolos de comunicação os pacotes podem
ter um máximo de 16 Mb.
Enum: campo que pode ter um único valor de uma lista que se especifica. O tipo
Enum aceita até 65535 valores diferentes.
Set: um campo que pode conter nenhum, um ou vários valores de uma lista. A lista
pode ter um máximo de 64 valores.
Tipo de campo
Tamanho de Armazenamento
CHAR(n)
n bytes
VARCHAR(n)
n +1 bytes
TINYBLOB, TINYTEXT
Longitude+1 bytes
BLOB, TEXT
Longitude +2 bytes
MEDIUMBLOB,
MEDIUMTEXT
Longitude +3 bytes
LONGBLOB, LONGTEXT
Longitude +4 bytes
ENUM('value1','value2',...)
1 ó dos bytes dependendo do número de valores
SET('value1','value2',...)
1, 2, 3, 4 ó 8 bytes, dependendo do número de
valores
Diferença de armazenamento entre os tipos Char e VarChar
Valor
''
CHAR(4) Armazenamento VARCHAR(4) Armazenamento
''
4 bytes
"
1 byte
3 bytes
'ab'
'ab '
4 bytes
'ab'
'abcd'
'abcd'
4 bytes
'abcd'
'abcdefgh'
'abcd'
4 bytes
'abcd'
5 bytes
Observando o banco de dados
Para visualisar as bases de dados do seu banco utilize:
mysql> show databases;
O MySQL exibirá uma lista com todas as bases de dados do seu banco.
Para visualizar as tabelas do banco digite no promp de comando do My SQL:
Se a base não estiver selecionada, selecione por meio do comando:
mysql> use clientes;
Para exibir as tabelas da base selecionada:
mysql> show tables;
O MySQL exibirá uma lista com todas as tabelas da sua base de dados.
Para ver o esquema de uma tabela em particular:
mysql> describe nomedatabela;
Este comando é útil para lembrar do tipo de uma coluna ou conhecer uma tabela
que você não criou.
Alterando uma tabela criada
Primeiro vamos criar uma tabela:
CREATE TABLE teste (
id INT(10) NULL,
nome VARCHAR(20) NULL,
endereco VARCHAR(50) NULL
);
Renomeando a tabela "teste" para "ievolution":
ALTER TABLE teste RENAME TO ievolution;
Vamos adicionar uma coluna do tipo varchar nessa tabela:
ALTER TABLE ievolution ADD COLUMN cpf VARCHAR(50);
Também pode-se adicionar uma coluna em uma determinada antes ou depois de
outra coluna em especial:
#cria a nova coluna depois da coluna id
ALTER TABLE ievolution ADD COLUMN cpf VARCHAR(50) AFTER id;
#cria a nova coluna antes da coluna nome
ALTER TABLE ievolution ADD COLUMN cpf VARCHAR(50) FIRST;
Vamos renomear essa coluna "cpf " para "doc":
ALTER TABLE ievolution CHANGE cpf doc VARCHAR(50);
Podemos mudar o tipo do dado de uma coluna de 2 formas: utilizando CHANGE e
MODIFY:
ALTER TABLE ievolution CHANGE doc doc INTEGER(3);
ALTER TABLE ievolution MODIFY doc INTEGER(3);
Podemos adicionar uma chave primária nessa tabela:
ALTER TABLE ievolution ADD PRIMARY KEY (id);
Podemos adicionar também chave estrageiras nessa tabela:
ALTER TABLE ievolution ADD FOREIGN KEY (endereco) REFERENCES
tabela_enderecos (endereco);
Obs: Não irá funcionar porque não criamos tabela_enderecos
Para eliminar uma coluna da tabela basta digitar:
ALTER TABLE ievolution DROP COLUMN doc;
Para eliminar a chave primária da tabela:
ALTER TABLE ievolution DROP PRIMARY KEY;
OBS: A coluna não será excluída só a chave
Inserindo dados em uma tabela
Para inserção de dados usamos a instrução INSERT.A forma normal de uma
instrução INSERT é:
INSERT INTO tabela[(coluna 1, coluna 2, coluna 3,...)] VALUES [(valor 1, valor 2,
valor 3,...)]
Por exemplo, para inserir um registro em nossa tabela teste:
ALTER TABLE ievolution RENAME TO teste;
INSERT INTO teste VALUES(1,‘Felizberto’,’Rua da alegria, 1000’)
Os valores devem ser passados dentro de aspas simples ( ‘ ), a exceção são os
números. Como não discriminamos as colunas que queremos prencher o mysql irá
colocar os valores nas colunas pela ordem de criação delas. Obrigatóriamente,
todas as colunas deverão possuir um valor, que pode ser até mesmo um vazio ‘’.
Se quisermos inserir valores em uma ordem diferente da ordem das colunas, ou,
não colocar valor para todas elas devemos explicita ao mysql o que estamos
querendo.
INSERT INTO teste (nome,id) VALUES (‘Felicia’,2)
Para apagar todos os registros da tabela usamos a instrução DELETE:
DELETE FROM teste;
Além de inserir e deletar queremos poder também atualizar os dados de uma
tabela. Para isso usando a instrução UPDATE. Como nossa tabela está vazia, vamos
inserir novos registros e depois editá-los.
INSERT INTO teste VALUES(3,‘Demerval’,’Rua do Vento, 100’);
INSERT INTO teste VALUES(4,‘Paulete’,’Avenida Moema, 294’);
UPDATE teste set endereco = ‘Rua da Felicidade, 77’;
Podemos querer alterar apenas uma linha ao invés de alterar todas da
tabela. Para isso utlizamos a cláusula WHERE (também se aplica a
instrução SELECT).
UPDATE teste set nome = ‘Paulete da Silva’ where id = 3;
Para recuperarmos os dados de uma tabela precisamos da instrução SELECT:
Sintaxe
SELECT [colunas] FROM tabela;
SELECT id, nome, endereco FROM teste;
Se quisermos todas as colunas da tabela podemos utilizar o caracter * no lugar da
lista das colunas.
SELECT * FROM teste;
Recuperando dados com critérios específicos
Para filtrar apenas as linhas desejadas precisamos especificar quais as condições de
seleção devem ser satisfeitas.
SELECT * FROM teste where id = 4;
SELECT * FROM teste where nome = ‘Demerval’;
Utilizando condições
Para fazermos o uso de condições, devemos usar o comando WHERE juntamente
com os operadores.
Os operadores de comparação lógica estão divididos em duas classes:
Operadores de linha única:
=
<>
>
>=
<
<=
IS NOT NULL
igual a
diferente de
maior que
maior ou igual a
menor que
menor ou igual a
verifica se o campo realmente contém um valor.
SELECT * FROM teste where nome IS NOT NULL;
IS NULL
verifica se o campo não contém um valor.
SELECT * FROM teste where nome IS NULL;
BETWEEN
Verifica se um valor esta dentro de uma faixa de valores.
SELECT * FROM teste WHERE id BETWEEN 1 and 3;
IN
particulares.
Verifica se um valor está dentro de um lista de valores
Há também o NOT IN que é inverso ao IN.
SELECT * FROM teste WHERE id IN (1,2,4);
Operadores de várias linhas
AND - e
OR - ou
NOT - não
Exemplos:
mysql> SELECT nome FROM aluno WHERE cidade='Rio de Janeiro' AND
matricula='444';
mysql> SELECT nome FROM aluno WHERE cidade='Rio de Janeiro' OR
matricula='444';
Precedência de operadores:
1. Uma cláusula WHERE pode combinar vários operadores AND e OR.
2. O operador AND tem maior precedência que o operador OR.
3. Os operadores de comparação de linha única tem maior precedência que os
operadores AND e OR.
4. Todos os operadores de comparação de linha única têm a mesma precedência.
5. Operadores de igual precedência são calculados da esquerda para a direita.
6. A precedência de operadores pode ser cancelada através de parênteses:
Exemplo: mysql> SELECT nome FROM alunos WHERE matricula > '100' AND
(cidade = 'Nova Friburgo' OR codcurso='01');
Operador LIKE
Busca valores alfanuméricos incompletos a partir de um ou mais caracteres:
% - corresponde a uma seqüência qualquer de 0 ou mais caracteres.
"_" - corresponde a qualquer caracter.
Exemplo: mysql> SELECT nome FROM alunos WHERE nome LIKE 'J%';
Esta cláusula lista todos os nomes que comecem com J.
Exemplo: mysql> SELECT nome FROM alunos where nome LIKE '_________';
Já esta, lista todos os nomes que possuem exatamente 9 caracteres.
Utilizando ALIAS
Podemos apelidar os campos.
SELECT nome AS n FROM teste;
Exibindo constantes
Podemos exibir um valor constante da seguinte forma:
SELECT ‘Ola ’;
E até junto em tabelas, juntamente com campos:
SELECT ‘Ola ’, nome from teste;
Concatenação
Podemos exibir o valor de duas, ou mais, colunas em apenas uma por meio do
CONCAT:
SELECT CONCAT(nome,idade) FROM teste;
E até concatenar uma constante:
SELECT CONCAT(‘Ola ’,nome) as ola_nome, idade from teste;
Podemos concatenar os itens separando na coluna usando o CONCAT_WS
escolhendo o separador. O primeiro argumento é o separador e o restante podem
ser campos ou constantes.
SELECT CONCAT(‘ - ’,nome, idade,cidade,estado) as dados from teste;
Ordenando os registros
Se quisermos fazer com que os registros seja exibidos seguindo uma ordem
utilizamos a clásula order by.
SELECT <campos> FROM <tabela> ORDER BY <campo1> [direção].
<campo2>[direção]
Para ordenar a lista de clientes pelo nome de forma ascendente.
SELECT * FROM clientes order by nome asc;
Para ordenar a lista de clientes pelo nome de forma descendente.
SELECT * FROM clientes order by nome desc;
Podemos colocar mais de um campo e com direções diferentes.
SELECT * FROM clientes order by estado desc, nome asc;
E para sortear a posição dos registros ao invés de aponta um campos usamos a
função rand();
SELECT * FROM clientes order by rand();
Se não apotarmos a direção do ordenamento do campo será atribuído asc por
padrão.
Limitando o número de registros exibidos
Se quisermos mostrar apenas alguins registros da tabela usamos a cláusula limit.
Sintaxe:
SELECT <campos> FROM <tabela> LIMIT [início,][término]
SELECT * FROM clientes LIMIT 0,3;
SELECT * FROM clientes LIMIT 2,2;
Se nenhum valor de início for atribuído o padrão o MySQL começará a contar a
partir da linha 0.
Inserindo registros de forma avançada:
Podemos inserir vários registro de uma única vez usando os parênteses e
separando os grupos por vírgula.
INSERT INTO <tabela> (<campo1>,<campo2>,<campo3>)
VALUES(<valor1.1>,<valor2.1>,<valor3.1>),(<valor1.2>,<valor2.2>,<valor3.2>)
,(<valor1.3>,<valor2.3>,<valor3.3>);
INSERT INTO clientes (nome,idade,cidade,estado)
VALUES(‘Plinio’,25,’Adamantina’,’SP’),(‘Olivio’,74,’Pacaembu’,’SP’),(‘Valter
’,54,’Uberaba’,’MG’);
Insert com SELECT
Podemos inserir dados de uma tabela em outra usados as cláusulas INSERT e
SELECT.
INSERT INTO <tabela-destino> (<campo1>, <campo2>,<campo3>[,...])
SELECT <campo1>,<campo2>,<campo3>[,...] FROM <tabela-origem>;
Distinct
Utilizamos o DISTINCT quando queremos eliminar as repetições de valores em uma
determinda coluna.
SELECT DISTINCT(nome) FROM CLIENTES;
Dados Agupados
Frequentemente queremos saber quantos registros caem dentro de um conjunto
particular ou o vbalor médio de uma coluna. O MySQL possui várias funções
agregadas que podem ser úteis.
AVG(coluna)
Média de valores de uma coluna.
COUNT(itens)
Se você especificar uma coluna, essa função fornecerá o número de valores não
nulos nessa coluna. Se você adicionar o distinct na frente do nome do coluna, você
obterá uma contagem dos valores distintos somente nessa coluna. Se especificar
COUNT(*), você obterá uma contagem de registros independente dos valores
nulos.
MIN(coluna)
Retorna o valor mínimo na coluna especificada.
MAX(coluna)
Retorna o valor máximo na coluna especificada.
SUM(coluna)
Soma de valores na coluna especificada.
GROUP BY
Se quisermos obter informações mais detalhadas, podemos utilizar a cláusula
GROUP BY. Isso permite visualizar, por exemplo, o total médio por cliente.
Trabalhando com palavras
LOWER
É utilizado quando queremos deixar todas as letras de uma palavras em letras
minúsculas.
SELECT LOWER(‘Clayton Ultrago’);
O resultado exibido será clayton ultrago .
Podemos fazer com um campo de uma determinada tabela, e todos os valores do
campo apontado serão exibidos em letras minúsculas.
SELECT LOWER(campo) FROM nome_da_tabela;
UPPER
Também podemos fazer com que as palvras sejam exibidas em letras maiúsculas.
SELECT UPPER(‘Clayton Ultrago’);
O resultado exibido será CLAYTON ULTRAGO .
Da mesma forma se quisermos fazer o mesmo com um campo.
SELECT UPPER(campo) FROM nome_da_tabela;
REVERSE
A função REVERSE lê o texto de trás pra frente, exatamente como ele foi escrito.
SELECT REVERSE(‘clayton’);
O resultado será: notyalc;
SELECT REVERSE(campo) FROM nome_da_tabela;
RIGHT
SELECT RIGHT('CLAYTON',3);
A função RIGHT começa a ler o resultado da direita para esquerda, e o valor 3
indica quantos caracteres serão capturados da direita para esquerda, no exemplo
acima, TON. Que corresponde aos 3 últimos caraceteres da direita para esquerda.
SELECT RIGHT(campo,quantidade_caracteres) FROM nome_da_tabela;
SUBSTRING
Retorna um trecho da palavra.
Exemplos:
mysql> SELECT SUBSTRING('Quadratically',5);
-> 'ratically'
mysql> SELECT SUBSTRING('foobarbar' FROM 4);
-> 'barbar'
mysql> SELECT SUBSTRING('Quadratically',5,6);
-> 'ratica'
mysql> SELECT SUBSTRING('Sakila', -3);
-> 'ila'
mysql> SELECT SUBSTRING('Sakila', -5, 3);
-> 'aki'
mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
-> 'ki'
LEFT
SELECT LEFT('CLAYTON',3);
A função LEFT funciona de forma inversa a função RIGHT. Começa a ler o
resultado da esquerda para direita, e o valor 3 indica quantos caracteres serão
capturados da esquerda para direita, no exemplo acima, CLA. Que corresponde aos
3 últimos caraceteres da esquerda para direita.
SELECT LEFT(campo,quantidade_caracteres) FROM nome_da_tabela;
LTRIM
Retorna a palavra removendo espaços em brancos à esquerda.
SELECT LTRIM(' barbearia');
Resultado: 'barbearia'
SELECT LTRIM(campo) from nome_da_tabela;
RTRIM
Retorna a palavra removendo espaços em brancos à direita.
SELECT RTRIM('Alo ');
Resultado: 'Alo'
SELECT RTRIM(campo) from nome_da_tabela;
Download