SQL/Criando tabelas
Podemos criar uma tabela qualquer dentro de um banco de dados. A sintaxe básica para criarmos é:
CREATE TABLE nome_tabela
(
nome_campo_1 tipo_1,
nome_campo_2 tipo_2,
...
nome_campo_n tipo_n,
PRIMARY KEY ( campo_x,...));
CREATE TABLE é o comando para criação da tabela e deve ser seguida pelo nome que daremos à tabela. Dentro do comando, devemos definir os nomes dos campos de acordo com a conveniência do banco de dados, e determinar o tipo de dado que poderá ser incluído neste campo. Na seção abaixo tipo de dados estão especificados os tipos mais comuns encontrados nos SGBDs. PRIMARY KEY define a chave primária da tabela, isto é, o campo que serve como chave da tabela e que não pode ser repetido.
Se desejamos que um campo seja de preenchimento obrigatório, devemos inserir NOT NULL na frente do campo determinado.
CREATE TABLE nome_tabela
(
nome_campo_1 tipo_1 NOT NULL,
nome_campo_2 tipo_2,
...
nome_campo_n tipo_n,
PRIMARY KEY(campo_x,...));
Se desejamos que um campo seja de auto-incremento, devemos inserir AUTO_INCREMENT na frente do campo determinado. Isto pode ser utilizado por exemplo, para automatizar um código que sirva de chave primária de uma tabela:
CREATE TABLE nome_tabela
(
nome_campo_1 tipo_1 NOT NULL AUTO_INCREMENT,
nome_campo_2 tipo_2,
...
nome_campo_n tipo_n,
PRIMARY KEY (campo_x,...));
Tipos de Dados
[editar | editar código-fonte]Tipos de dados definem os tipos de informação que podem ser inseridos em um campo. Somente dados do mesmo tipo do campo poderão ser inseridos. Os tipos suportados por um banco de dados podem variar de SGBD para SGBD, mas descrevemos a seguir os principais tipos encontrados na maior parte dos gerenciadores:
! Tipo | Explicação | Valores permitidos | Exemplo |
---|---|---|---|
BOOLEAN | Armazena um bit de informação, utilizado para verdadeiro ou falso. | Verdadeiro/falso | true/false |
VARCHAR(n) | Uma string com tamanho máximo n | [0-9a-zA-Z]+{n} |
"foo" |
CHAR(n) | Uma string com tamanho fixo n | [0-9a-zA-Z]{n} |
"foo" |
SMALLINT | Número inteiro com 16 bits de precisão | \-?[0-9]+ |
584 |
INTEGER | Número inteiro com 32 bits de precisão | \-?[0-9]+ |
-8748 |
FLOAT | Número decimal | \-?[0-9]+[\.[0-9]+]? |
48.96 |
NUMBER(n,[d]) | Um número com n dígitos (e d dígitos decimais se mencionado) | \-?[0-9]+[\.[0-9]+]? |
484.65 |
DATE | Uma data (Padrão americano) | [0-9][0-9][0-9][0-9]\-[0-1][0-9]\-[0-3][0-9] |
2009-03-24 |
TIME | Um período de sessenta minutos; 1/24 de um dia | [0-2][0-9]\:[0-5][0-9]\:[0-5][0-9] |
11:24:56 |
TIMESTAMP | Data e hora | [0-9]+ |
18648689595962 |
BLOB | Qualquer dado | Qualquer |
Exemplo
[editar | editar código-fonte]Como exemplo do uso do comando CREATE TABLE, imaginemos a necessidade de uma tabela que deva possuir os dados dos clientes de uma loja.
CREATE TABLE Cliente
(
Codigo INT NOT NULL AUTO_INCREMENT,
Nome VARCHAR (60) NOT NULL,
Data_Nascimento DATE,
Telefone CHAR (8),
PRIMARY KEY (Codigo) );
Neste comando, criaremos uma tabela chamada Cliente. Esta tabela contém quatro campos: o primeiro campo é o Código do cliente. Este campo será utilizado como chave primária de forma que não poderá se repetir nunca. Desta forma o campo deve ser sempre preenchido (NOT NULL), é numérico do tipo inteiro (INT) e deve auto-incrementar de acordo com o número de clientes que for incluído. O campo Nome é do tipo VARCHAR (60), ou seja aceita dados alfa-numéricos com até 60 caracteres. No entanto se um nome for inserido com menos de 60 caracteres, o número de bytes consumidos pelo campo será de acordo com o nome inserido. O campo de Data_Nascimento é do tipo DATE, ou seja, uma data, que no entanto não de preenchimento obrigatório (por isto não foi declarado o NOT NULL). O campo Telefone foi determinado como sendo alfa-numérico com oito caracteres definidos, e mesmo que sejam utilizados menos caracteres, o número de bytes consumidos serão sempre os mesmos independente dos dados. Isto é útil para dados alfanuméricos que não variam de tamanho, como o caso de UF no Brasil, cuja abreviação sempre são de dois caracteres. A instrução PRIMARY KEY define qual dos campos será a chave primária e não pode ser repetido, sendo o diferenciador entre os diversos clientes que sejam inseridos nesta tabela.
Describe
[editar | editar código-fonte]Após criarmos uma tabela, elas podem ser manipuladas de diversas formas, inserindo, alterando ou excluindo dados. Podemos visualizar a estrutura e campos de uma tabela criada utilizando o comando DESCRIBE ou DESC:
DESCRIBE Nome_Tabela;
Ou:
DESC Nome_Tabela;
Regras de Integridade
[editar | editar código-fonte]Estudamos acima como criar uma tabela simples. No entanto, ao criarmos uma tabela dentro de um banco de dados devemos ter em mente as Regras de Integridade, que garantam a consistência, integridade e não redundância dos dados. Entre estas regras podemos englobar as chaves primárias, checagem e chave estrangeira.
Chave primária
[editar | editar código-fonte]No exemplo acima vimos a seguinte declaração na criação da tabela:
PRIMARY KEY ( campo_x,...);
Podemos utilizar a primary key dese jeito:
Codigo INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
Esta declaração diz que os campos inseridos entre os parênteses formam a chave primária da tabela. A chave primária funciona como os campos que diferenciam os dados uns dos outros, e que não podem ser repetidos de nenhuma forma. Por exemplo, em nossa tabela Cliente, o código do Cliente funciona como a chave-primária, ou seja, os clientes podem até ter o mesmo nome, endereço ou telefone, mas terão códigos diferentes uns dos outros. Se dois códigos iguais forem inseridos o SGBD retornará erro.
nota:
[editar | editar código-fonte]a clausura AUTO_INCREMENT é utilizada no Mysql, para outro SGBD irão utilizar outras clausuras. Por exemplo no sql sever utilizamos a clausura IDENTITY.
Checagem
[editar | editar código-fonte]Podemos inserir em uma tabela depois do campo chave primária e antes do último parêntese a cláusula:
CHECK Nome _Campo IN (valor1 , valor2, valor n); --para o SQL Sever
ou
enum (valor1 , valor2, valor n); --para o Mysql
Estas cláusulas forçam a um campo a aceitar apenas os valores especificados entre os parênteses. Isto pode ser útil para definir, por exemplo, campos como sexo. Desta forma forçamos as opções através de:
CHECK Sexo IN ('M','F');--SQL Sever
ou
sexo enum ('M','F');--Mysql
Onde o campo Sexo só podem assumir a forma M (Masculino) ou F (Feminino).
Chave estrangeira
[editar | editar código-fonte]A chave estrangeira é uma cláusula que deve ser incluída quando possuímos mais de duas tabelas em um banco de dados. Através da chave estrangeira estabelecemos as relações entre duas ou mais tabelas. A chave estrangeira desta forma referencia o campo que é chave primária de outra tabela. Tabela.
FOREIGN KEY (Campo1, Campo2, Campo3 ..) REFERENCES Nome_Tabela2 (Nome_Chave);