Structured Query Language (SQL) SQL-Breve Histórico : # CREATE, ALTER e DROP; # BEGIN TRANSACTION, ROLLBACK e COMMIT; # GRANT, REVOKE e DENY; 1 Structured Query Language (SQL) Desenvolvida pelo departamento de pesquisa da IBM na década de 1970 (System R); Embora o SQL tenha sido originalmente criado pela IBM, rapidamente surgiram vários "dialetos" desenvolvidos por outros fabricantes; Essa expansão levou à necessidade de ser criado e adaptado um padrão para a linguagem; 2
Structured Query Language (SQL) Em 1986 o American National Standard Institute (ANSI) publicou o SQL e estabeleceu como linguagem padrão de Banco de Dados Relacional; Esta tarefa também pelo International Standards Organization (ISO) em 1987; O SQL foi revisto em 1992 e a esta versão foi dado o nome de SQL-92; 3 Structured Query Language (SQL) Foi revisto novamente em 1999 e 2003 para se tornar SQL:1999 (SQL3) e SQL:2003, respectivamente; Exemplo de modificação no SQL:1999 : # Gatilhos (triggers). Exemplo de modificação no SQL:2003 : # Introdução de características relacionadas ao XML. 4
Structured Query Language (SQL) Embora padronizado pela ANSI e ISO, possui muitas variações e extensões produzidos pelos diferentes fabricantes de sistemas gerenciadores de bases de dados; Tipicamente a linguagem pode ser migrada de plataforma para plataforma sem mudanças estruturais principais. 5 Structured Query Language (SQL) Tipicamente, pode ser dividida em duas sublinguagens : # DDL Data Definition Language Modificações estruturais ; # DML Data Manipulation Language Manipulação de dados: Consultas, inserções, etc. 6
Comandos básicos usados para estruturar o banco de dados: # CREATE Criação de elementos ; # ALTER Alteração de elementos ; # DROP Exclusão de elementos. 7 Os comandos abaixo serão estudados posteriormente: # Controle de transações: BEGIN TRANSACTION, ROLLBACK e COMMIT; # Estabelecimento de direitos de acesso: GRANT, REVOKE e DENY. 8
CREATE DATABASE # Criação de um banco de dados. # Exemplo: CREATE DATABASE BancoExemplo; Retorno do SGDB (MSSQL 2000): The CREATE DATABASE process is allocating 0.75 MB on disk 'BancoExemplo'. The CREATE DATABASE process is allocating 0.49 MB on disk 'BancoExemplo_log'. 9 CREATE DATABASE # A criação de um banco de dados corresponde à fase de implementação (modelo físico); # Para que seja possível criar tabelas deve ser criado o banco de dados primeiro; # São criados arquivos para armazenamento dos dados. 10
CREATE DATABASE # Como especificar localização, tamanho, etc.? # No exemplo anterior, foram criados dois arquivos: BancoExemplo (0.75 MB) BancoExemplo_log (0.49 MB). 11 CREATE DATABASE 12
CREATE DATABASE # Cada SGBD gerencia os dados de maneira própria; # Extensões para os comandos SQL padrão incluem parâmetros que permitem a especificação de características dos bancos de dados; # Conceitos de arquivos de log varia de gerenciador para gerenciador, por exemplo. 13 CREATE DATABASE MS SQL Server 2000: CREATE DATABASE database_name [ ON [ < filespec > [,...n [, < filegroup > [,...n [ LOG ON { < filespec > [,...n } [ COLLATE collation_name [ FOR LOAD FOR ATTACH < filespec > ::= [ PRIMARY ( [ NAME = logical_file_name, FILENAME = 'os_file_name' [, SIZE = size [, MAXSIZE = { max_size UNLIMITED } [, FILEGROWTH = growth_increment ) [,...n < filegroup > ::= FILEGROUP filegroup_name < filespec > [,...n 14
ALTER DATABASE # Permite alterar configurações de um banco de dados previamente criado; # De forma semelhante ao comando de criação, os parâmetros disponíveis para alteração variam de acordo com o fabricante do SGBD; # Por exemplo, um banco pode ter um atributo de leitura e escrita alterado somente para leitura. 15 ALTER DATABASE MS SQL Server 2000: ALTER DATABASE database { ADD FILE < filespec > [,...n [ TO FILEGROUP filegroup_name ADD LOG FILE < filespec > [,...n REMOVE FILE logical_file_name ADD FILEGROUP filegroup_name REMOVE FILEGROUP filegroup_name MODIFY FILE < filespec > MODIFY NAME = new_dbname MODIFY FILEGROUP filegroup_name {filegroup_property NAME = new_filegroup_name } SET < optionspec > [,...n [ WITH < termination > COLLATE < collation_name > } 16
DROP DATABASE # Eliminação de um banco de dados. # Exemplo: DROP DATABASE BancoExemplo; # Dependendo da versão do SGBD, os arquivos de dados não são destruídos automaticamente; # O SGBD não deve permitir a eliminação do banco se houver usuários conectados, por exemplo. 17 DROP DATABASE MS SQL Server 2000: DROP DATABASE database_name [,...n # Exemplo: 18
CREATE TABLE # Criação de uma tabela no banco de dados ao qual o usuário está conectado; # Exemplo de sintaxe: CREATE TABLE IdentificadorTab ( Atrib01 TipoDado [NOT NULL, Atrib02 TipoDado [NOT NULL, PRIMARY KEY (ChavePrimaria) ); 19 CREATE TABLE # Na sintaxe anterior: IdentificadorTab: Identificador da tabela (nome); Atrib01, Atrib02: Atributos (campos ou colunas da tabela); [NOT NULL: Nulabilidade do campo. O fato de aparecer entre colchetes indica que sua especificação é opcional; PRIMARY KEY: Atributos que constituem a chave primária. 20
CREATE TABLE # Exemplos: CREATE TABLE Cliente ( idcli INTEGER NOT NULL, Nome CHAR(50) NOT NULL, cpf CHAR(11) NOT NULL, PRIMARY KEY (idcli) ); CREATE TABLE AgenciaCliente ( idag INTEGER NOT NULL, NomeAg CHAR(50) NOT NULL, PRIMARY KEY (idag) ); 21 CREATE TABLE MS SQL Server 2000 (01/04) CREATE TABLE [ database_name.[ owner. owner. table_name ( { < column_definition > column_name AS computed_column_expression < table_constraint > ::= [ CONSTRAINT constraint_name } [ { PRIMARY KEY UNIQUE } [,...n ) [ ON { filegroup DEFAULT } [ TEXTIMAGE_ON { filegroup DEFAULT } continua 22
CREATE TABLE MS SQL Server 2000 (02/04) < column_definition > ::= { column_name data_type } [ COLLATE < collation_name > [ [ DEFAULT constant_expression [ IDENTITY [ ( seed, increment ) [ NOT FOR REPLICATION [ ROWGUIDCOL [ < column_constraint > [...n continua 23 CREATE TABLE MS SQL Server 2000 (03/04) < column_constraint > ::= [ CONSTRAINT constraint_name { [ NULL NOT NULL [ { PRIMARY KEY UNIQUE } [ CLUSTERED NONCLUSTERED [ WITH FILLFACTOR = fillfactor [ON {filegroup DEFAULT} [ [ FOREIGN KEY REFERENCES ref_table [ ( ref_column ) [ ON DELETE { CASCADE NO ACTION } [ ON UPDATE { CASCADE NO ACTION } [ NOT FOR REPLICATION CHECK [ NOT FOR REPLICATION ( logical_expression ) continua 24
CREATE TABLE MS SQL Server 2000 (04/04) < table_constraint > ::= [ CONSTRAINT constraint_name { [ { PRIMARY KEY UNIQUE } [ CLUSTERED NONCLUSTERED { ( column [ ASC DESC [,...n ) } [ WITH FILLFACTOR = fillfactor [ ON { filegroup DEFAULT } FOREIGN KEY [ ( column [,...n ) REFERENCES ref_table [ ( ref_column [,...n ) [ ON DELETE { CASCADE NO ACTION } [ ON UPDATE { CASCADE NO ACTION } [ NOT FOR REPLICATION CHECK [ NOT FOR REPLICATION ( search_conditions ) } 25 ALTER TABLE # Modifica a definição de uma tabela: Alteração, inclusão e remoção de colunas; Alteração, inclusão e remoção de restrições (constraints); Habilitar / desabilitar restrições e gatilhos (triggers). 26
ALTER TABLE # Exemplo de sintaxe: ALTER TABLE AgenciaCliente ADD idcri INTEGER NOT NULL CONSTRAINT FKAgenciaCliente FOREIGN KEY (idcri) REFERENCES Cliente(idCli) DEFAULT(-1); # Note que os nomes das colunas envolvidas na referência podem ser diferentes; # A coluna que vai ser adicionada deve permitir nulos ou possuir a propriedade DEFAULT definida. 27 ALTER TABLE MS SQL Server 2000 (01/04) ALTER TABLE table { [ ALTER COLUMN column_name { new_data_type [ ( precision [, scale ) [ COLLATE < collation_name > [ NULL NOT NULL {ADD DROP } ROWGUIDCOL } ADD { [ < column_definition > column_name AS computed_column_expression } [,...n [ WITH CHECK WITH NOCHECK ADD { < table_constraint > } [,...n DROP { [ CONSTRAINT constraint_name COLUMN column } [,...n { CHECK NOCHECK } CONSTRAINT { ALL constraint_name [,...n } { ENABLE DISABLE } TRIGGER { ALL trigger_name [,...n } } continua... 28
ALTER TABLE MS SQL Server 2000 (02/04) < column_definition > ::= { column_name data_type } [ [ DEFAULT constant_expression [ WITH VALUES [ IDENTITY [ (seed, increment ) [ NOT FOR REPLICATION [ ROWGUIDCOL [ COLLATE < collation_name > [ < column_constraint > [...n continua... 29 ALTER TABLE MS SQL Server 2000 (03/04) < column_constraint > ::= [ CONSTRAINT constraint_name { [ NULL NOT NULL [ { PRIMARY KEY UNIQUE } [ CLUSTERED NONCLUSTERED [ WITH FILLFACTOR = fillfactor [ ON { filegroup DEFAULT } [ [ FOREIGN KEY REFERENCES ref_table [ ( ref_column ) [ ON DELETE { CASCADE NO ACTION } [ ON UPDATE { CASCADE NO ACTION } [ NOT FOR REPLICATION CHECK [ NOT FOR REPLICATION ( logical_expression ) } continua... 30
ALTER TABLE MS SQL Server 2000 (04/04) < table_constraint > ::= [ CONSTRAINT constraint_name { [ { PRIMARY KEY UNIQUE } [ CLUSTERED NONCLUSTERED { ( column [,...n ) } [ WITH FILLFACTOR = fillfactor [ ON {filegroup DEFAULT } FOREIGN KEY [ ( column [,...n ) REFERENCES ref_table [ ( ref_column [,...n ) [ ON DELETE { CASCADE NO ACTION } [ ON UPDATE { CASCADE NO ACTION } [ NOT FOR REPLICATION DEFAULT constant_expression [ FOR column [ WITH VALUES CHECK [ NOT FOR REPLICATION ( search_conditions ) } 31 Structured Query Language (SQL) Referências Bibliográficas # SILBERCHATZ A., KORTH H. F., SUDARSHAN S.; Sistema de Banco de Dados, São Paulo, Pearson Makron Books, 2006. # Integration Definition for Information Modeling (IDEF1X); Federal Information Standards Publication (FIPS) 184, 1993. 32