Banco de dados Revisão • Vimos na aula passada como criar diagramas e modelos utilizando a ferramenta BrModelo. (1,1) Cliente CPF Nome deposita Data (1,1) Conta Saldo Valor Código SQL • SQL é a linguagem padrão para se lidar com bancos de dados relacionais, e é aceita por quase todos os produtos existentes no mercado. SQL - Domínio • char(n): Cadeia de caracteres de tamanho fixo. • varchar(n): Cadeia de caracteres de tamanho variável com comprimento máximo especificado. • int: Inteiro • smallint: Inteiro pequeno (ocupa metade do espaço do int). • numeric(p, d): Número de ponto fixo, com definição da precisão e número de casas decimais. SQL - Domínio • Real: Números de ponto flutuante. • float(n): Número de ponto flutuante com precisão de no mínimo n dígitos. • Date: Datas, contendo ano, mês e dia. • Time: Hora do dia, em horas, minutos e segundos. SQL – Criar BD • Comando utilizado para criar um determinado banco de dados no SGBD: • Sintaxe: create database nome_do_db; • Exemplo: create database teste; Criem um banco de dados com seu nome! SQL – Remover o BD • Comando utilizado para remover determinado BD existente no SGBD: • Sintaxe: drop database nome_do_banco; Remova o BD com seu nome! Liste os bancos existentes! SQL – Remover o BD • Crie novamente o banco de dados com seu nome! • Liste os bancos existentes! SQL – Utilizar BD • Como em determinado SGBD podem existir diversos bancos, de diferentes características, com diferentes relações, etc. • É necessário selecionar o banco de dados que se deseja trabalhar, ou seja, é necessário se “conectar” ao banco desejado. SQL – Utilizar BD • Comando utilizado para se “conectar” a um determinado banco de dados existente no SGBD: • Sintaxe: use nome_do_db; • Exemplo: use teste; Se conecte ao banco criado com seu nome! SQL – Listar as tabelas do BD • Comando utilizado para listar as tabelas existentes em um determinado banco de dados do SGBD: • Sintaxe quando está conectado a um BD: show tables; • Sintaxe quando não está conectado a um BD: show tables from nome_do_BD; SQL – Criação de tabela • Uma relação é definida usando comando CREATE TABLE. • Sintaxe: CREATE TABLE <relação> (<atributo> <domínio><regra do atributo>,..., <atributo> <domínio><regra do atributo>, <regras da tabela>); CREATE TABLE CLIENTE ( Crie esta tabela no nome varchar(255), banco de dados rg int, com seu nome! uf char(2), nascimento date, tefefone char(8), sex varchar(255) ); SQL – Descrição de tabela • Sintaxe: describe nome_tabela; • Exemplo: describe cliente; SQL – Alteração de tabela • Sintaxe: ALTER TABLE <relação> ADD <atributo> <definição>; ALTER TABLE <relação> CHANGE <atributo_antigo> <novo_atributo> <definição> ALTER TABLE <relação> DROP <atributo>; Realize as modificações abaixo e veja como a tabela ficou! • Exemplo: ALTER TABLE cliente ADD codigo int FIRST; ALTER TABLE cliente ADD cpf int; ALTER TABLE cliente DROP rg; ALTER TABLE cliente DROP uf; ALTER TABLE cliente CHANGE sex sexo char(1); SQL – Remoção de tabela • Uma relação é apagada através do comando DROP TABLE • Sintaxe: DROP TABLE <relação>; • Exemplo: DROP TABLE CLIENTE; SQL – Regras para criação de tabelas • Podemos colocar restrições de integridade nas relações criadas: • Assegurar que alterações feitas no banco de dados não resultem em perda da consistência dos dados. • Utilizaremos as seguintes regras de integridade: • • • • Restrição de nulo; Restrição de integridade de entidade; Restrições de chave; Restrição de integridade referencial. SQL - Regras • Restrição de nulo • Pode ser especificado se valor nulo pode ou não ser permitido. • No SQL, devemos colocar NOT NULL após o tipo do atributo. • Exemplo: CREATE TABLE CLIENTE ( codigo int NOT NULL, .... ); SQL - Regras • Restrição de integridade de entidade • Nenhum valor de chave primária pode ser nulo. • Restrições de chave • Por definição, todos os elementos de um conjunto são distintos; • Conseqüentemente, todas as tuplas em uma relação devem também serem distintas; • Isto significa que não deve existir duas tuplas com a mesma combinação de valores para todos os atributos. SQL - Regras • Quando definimos uma chave primária já garantimos que só haverá tuplas distintas na relação: • Logo garantimos a restrição de chave ao definirmos uma chave primária. • No SQL, definimos chave primária da seguinte forma: codigo int NOT NULL PRIMARY KEY É definido desta forma apenas na criação da tabela! SQL - Regras CREATE TABLE CLIENTE ( codigo int NOT NULL PRIMARY KEY, nome varchar(255), cpf int, nascimento date, tefefone char(8), sexo char(1) ); SQL - Regras • Para chave primária normalmente utilizamos um parâmetro de auto incremento. CREATE TABLE alunos ( id_alu INT NOT NULL AUTO_INCREMENT, nome_alu VARCHAR( 100 ) NOT NULL, idade_alu INT NOT NULL, data_alu DATE NOT NULL, sexo CHAR(1) NOT NULL, PRIMARY KEY ( id_alu ) ) SQL - Regras • Para colocar um atributo como chave primária de uma tabela já existente utiliza-se o comando Alter table. • Sintaxe: ALTER TABLE tabela ADD PRIMARY KEY(atributo); Insira uma chave primária na tabela cliente SQL - Regras • Para remover a chave primária de uma relação utiliza-se o comando Alter table. • Sintaxe: ALTER TABLE tabela DROP PRIMARY KEY; Remova a chave primária na tabela cliente Insira novamente a chave primária na tabela cliente SQL - Regras • Chave candidata • UNIQUE cpf int NOT NULL UNIQUE ou UNIQUE (cpf) • Os atributos podem ser nulos. É definido desta forma apenas na criação da tabela! SQL - Regras CREATE TABLE CLIENTE ( codigo int NOT NULL PRIMARY KEY, nome varchar(255), cpf int NOT NULL UNIQUE, nascimento date, tefefone char(8), sexo char(1) ); SQL - Regras CREATE TABLE CLIENTE ( codigo int NOT NULL PRIMARY KEY, nome varchar(255), cpf int NOT NULL, nascimento date, tefefone char(8), sexo char(1), UNIQUE (cpf) ); SQL - Exemplo CREATE TABLE CLIENTE ( codigo int NOT NULL PRIMARY KEY, nome varchar(30) NOT NULL, cpf int UNIQUE, nascimento date default ’0000-00-00’, tefefone char(8) default null, sexo char(1) ); SQL - Regras • Restrição de integridade referencial: • é especificada entre duas relações e é usada para manter a consistência entre tuplas das duas relações; • Informalmente, a restrição de integridade referencial diz que uma tupla da relação (R1), que refere-se a outra relação (R2), deve referir-se a uma tupla existente em R2 (chave estrangeira). SQL - Regras • Restrição de integridade referencial • No SQL, definimos chave estrangeira da seguinte forma: • Sintaxe: FOREIGN KEY (atributo) REFERENCES tabela(atributo) É definido desta forma apenas na criação da tabela! SQL - Regras CREATE TABLE COMPRA( codigo int NOT NULL PRIMARY KEY, cod_cliente int, data date, FOREIGN KEY (cod_cliente) REFERENCES cliente(codigo) ); Crie esta relação! Visualize a descrição desta relação! SQL - Regras • ON DELETE • RESTRICT: • Exclusão de T1 falha se existem linhas em T2 combinando (padrão do SQL). • CASCADE: • Exclusão de T1 exclusão de todas as linhas de T2 que combinam. • SET NULL: • Exclusão de T1 colocar nulo nos atributos da chave estrangeira de cada tupla de T2 que combina. • SET DEFAULT: • Exclusão de T1 colocar valores default nos atributos da chave estrangeira de cada tupla de T2 que combina. SQL - Regras • ON UPDATE • RESTRICT: • Alteração de T1 falha se existem linhas em T2 combinando (padrão do SQL). • CASCADE: • Alteração de T1 linhas que combinam em T2 também serão atualizadas. • SET NULL: • Alteração de T1 colocar nulo nos atributos da chave estrangeira de cada tupla de T2 que combina. • SET DEFAULT: • Alteração de T1 colocar valores default nos atributos da chave estrangeira de cada tupla de T2 que combina. SQL - Regras Remover a tabela compra! Criar a tabela pedido! CREATE TABLE PEDIDO( cod_pedido int NOT NULL PRIMARY KEY, cod_cliente int, FOREIGN KEY (cod_cliente) REFERENCES cliente (codigo) ON DELETE SET NULL ON UPDATE CASCADE ); SQL - Regras • Para alterar as restrições impostas a uma tabela devemos fazer o seguinte comando: • Sintaxe: ALTER TABLE <tabela> ADD (<regra>); • Exemplo: ALTER TABLE cliente ADD PRIMARY KEY(cpf); SQL - Regras • Caso já sido definido o mesmo tipo de restrições que queremos inserir na tabela, então devemos remover primeiro essas restrições • Sintaxe: ALTER TABLE <tabela> DROP <regra>; • Exemplo: ALTER TABLE cliente DROP PRIMARY KEY; SQL - Regras • Para alterar as restrições impostas a uma coluna devemos fazer o seguinte comando: • Sintaxe: Alter table <tabela> MODIFY <nome_da_coluna> <tipo> <regra> • Exemplo: ALTER TABLE cliente MODIFY cpf int NOT NULL UNIQUE;