psi linguagem de manipulação de dados · linguagem de definição de dados ... id_autor da tabela...

Post on 13-Dec-2018

220 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

PSILinguagem de Definição

de dadosMódulo 15

Objetivos de aprendizagemNo final deste módulo os alunos devem ter adquirido conhecimentos, procedimentos e atitudes que lhe permitam:▪Criação, alteração e eliminação de tabelas e índices em SQL;▪Criação e eliminação de tabelas;▪Alteração de tabelas;▪Criação e eliminação de índices;▪Conceito de transação;▪Privilégios e controlo de acessos.

Conteúdos1. Criação, alteração e eliminação de tabelas e índices em SQL1.1. Criação de tabelas (comando CREATE TABLE)1.2. Alteração de tabelas (comando ALTER TABLE)1.3. Criação de índices (comando CREATE INDEX)1.4. Eliminação de tabelas e índices (comandos DROP TABLE e DROP INDEX)

2. Atualização de dados2.1. Inserção de linhas (comando INSERT INTO)2.2. Alteração de valores nas linhas (comando UPDATE)2.3. Eliminação de linhas (comando DELETE FROM)

3. Conceito de transação (comandos COMMIT e ROLLBACK)

4. Privilégios e controlo de acessos (comandos GRANT e REVOKE

CREATE TABLEO comando SQL CREATE TABLE permite criar uma tabela.

Exemplo simples:

CREATE TABLE exemplo (id INT,nome VARCHAR(100));

Esta tabela com o nome ‘exemplo’ tem 2 campos: id e nome:▪id é um campo numérico;▪Nome é uma String.

TIPOS DE DADOS

VER FOTOCÓPIA ENTREGUE NO MÓDULO 14

CREATE TABLECONSTRAINT DEFAULT

Nas tabelas no Mysql, cada coluna tem que conter um valor (incluindo o NULL). Podemos definir aquando a criação da tabela, que caso não seja inserido um valor para determinado campo, então irá ser atribuído um valor pré-definido.

CREATE TABLE exemplo (id INT,morada VARCHAR(50),Localidade VARCHAR(20) DEFAULT ‘Lisboa’);

ALTER TABLECONSTRAINT DEFAULT

Se a tabela já estiver criada, podemos definir posteriormente o DEFAULT para um determinado campo:

ALTER TABLE PessoaALTER Cidade SET DEFAULT ‘Lisboa‘

Da mesma forma, podemos eliminar o DEFAULT:

ALTER TABLE PessoaALTER Cidade DROP DEFAULT

CREATE TABLECONSTRAINT AUTO_INCREMENT

Utiliza-se o auto_increment numa chave primária para criar uma coluna que incrementa automaticamente um valor em cada nova inserção na tabela.

CREATE TABLECONSTRAINT AUTO_INCREMENT

CREATE TABLE animais (id INT NOT NULL AUTO_INCREMENT, nome CHAR(30) NOT NULL, PRIMARY KEY (id) );

INSERT INTO animais (nome) VALUES (‘cão'),(‘gato'),('pinguim'), (‘baleia‘);

SELECT * FROM animais;

+----+---------+ | id | name+----+---------+ | 1 | cão | 2 | gato | 3 | pinguim | 4 | baleia +----+---------+

CREATE TABLECONSTRAINT UNIQUE

Tem o objetivo de identificar univocamente cada registo da tabela, evitando assim que dois registos tenham valores iguais numa determinada coluna.

A Chave Única fornece a garantia de exclusividade para uma coluna.

Podemos aplicar a chave única a um conjunto de colunas.

CREATE TABLECONSTRAINT UNIQUE

Exemplo:CREATE TABLE Trabalhador(

Id int NOT NULL,Apelido varchar(255) NOT NULL,Nome varchar(255),Morada varchar(255),Cidade varchar(255),BI varchar (13),UNIQUE(BI)

)Neste exemplo, queremos que não seja possível 2 trabalhadores terem o mesmo BI.

CREATE TABLECONSTRAINT UNIQUE

Exemplo:CREATE TABLE Trabalhador(

Id int NOT NULL,Apelido varchar(255) NOT NULL,Nome varchar(255),Morada varchar(255),Cidade varchar(255),BI varchar (13),CONSTRAINT unqTrab UNIQUE(nome,apelido)

)Neste exemplo, queremos que não seja possível 2 trabalhadores terem o mesmo nome e apelido.

ALTER TABLECONSTRAINT UNIQUE

Podemos ainda acrescentar a restrição UNIQUE após a criação da tabela.

Exemplos:ALTER TABLE TrabalhadorADD UNIQUE (BI)

ALTER TABLE TrabalhadorADD CONSTRAINT unqTrab UNIQUE (nome, apelido)

Para retirar uma restrição UNIQUE:ALTER TABLE Trabalhador DROP INDEX unqTrab;(O MySQL considera a restrinção UNIQUE como sendo um index)

CREATE TABLECONSTRAINT PRIMARY KEY

A chave primária de uma tabela identifica univocamente cada registonessa tabela.A chave primária tem de conter valores únicos e não pode conter valoresNULL.Cada tabela apenas pode conter uma chave primária, no entanto esta pode ser composta por vários campos.

CREATE TABLECONSTRAINT PRIMARY KEY

Exemplo:

CREATE TABLE Trabalhador(Id int NOT NULL,Apelido varchar(255) NOT NULL,Nome varchar(255),Morada varchar(255),Cidade varchar(255),BI varchar (13),PRIMARY KEY (id)

)

CREATE TABLECONSTRAINT PRIMARY KEY

Exemplo: Chave composta

CREATE TABLE Requisicao(IdSocio int NOT NULL,IdLivro int NOT NULL,data date NOT NULL,CONSTRAINT pkReq PRIMARY KEY (IdSocio, IdLivro, data)

)

CREATE TABLECONSTRAINT PRIMARY KEY

Exemplo:

No exemplo acima iremos ter um erro pois a chave primária não poderá ter 2 campos duplicados.

CREATE TABLECONSTRAINT PRIMARY KEY

Exemplo:

Aqui não iremos ter erro pois, como a chave primária é composta pelos campos nome e estado, a cidade é igual mas o estado não.Haveria problema sim, se ambos os valores cidade e estado fossem iguais em 2 registos!

ALTER TABLECONSTRAINT PRIMARY KEY

Para definir a chave primária após a criação da tabela:

ALTER TABLE TrabalhadorADD PRIMARY KEY (Id)

ALTER TABLE RequisicaoADD CONSTRAINT pkReq PRIMARY KEY (IdSocio, IdLivro, data)

CREATE TABLECONSTRAINT FOREIGN KEY

O papel da chave estrangeira é manter uma referência a um registo presente noutra tabela.

A chave estrangeira de uma tabela está relacionada com a chave primária de outra tabela.

CREATE TABLECONSTRAINT FOREIGN KEY

Exemplo:Temos uma tabela livros e uma tabela autores.

Um autor pode escrever vários livros e um livro pode ser escrito somente por um determinado autor.

O relacionamento entre estas 2 tabelas vai ser feito com base num campo em comum id_autor.

Todas as vezes que o valor do campo id_autor na tabela livros for igual ao valor do campo id_autor na tabela autores nós estaremos a criar uma relação autor-livro.

CREATE TABLECONSTRAINT FOREIGN KEY

CREATE TABLE autores(id_autor INT UNSIGNED NOT NULL auto_increment,nome varchar(45) NOT NULL,email varchar(45) NOT NULL,PRIMARY KEY(id_autor)

)CREATE TABLE livros(id_livro INT UNSIGNED NOT NULL AUTO_INCREMENT,titulo VARCHAR(45) NOT NULL,id_autor INT UNSIGNED NOT NULL,PRIMARY KEY(id_livro)

)

CREATE TABLECONSTRAINT FOREIGN KEY

Supõe-se que excluímos um registo na tabela autores e, que o campo id_autor da tabela livros guardava uma referência para o autor excluído.

Teremos uma violação da integridade referencial!

A chave estrangeira é usada para evitar situações que possam destruir as ligações entre as tabelas.

A chave estrangeira também evita que sejam inseridos dados inválidos na coluna da chave estrangeira (os dados têm de existir na tabela relacionada)

CREATE TABLECONSTRAINT FOREIGN KEY

CREATE TABLE livros(id_livro INT UNSIGNED NOT NULL AUTO_INCREMENT,titulo VARCHAR(45) NOT NULL,id_autor INT UNSIGNED NOT NULL,PRIMARY KEY(id_livro),FOREIGN KEY(id_autor)

REFERENCES autores(id_autor)ON DELETE CASCADE

)Ou se se pretender dar um nome à restrição:CONSTRAINT fkLivro FOREIGN KEY(id_autor)

REFERENCES autores(id_autor) ON DELETE CASCADE

CREATE TABLECONSTRAINT FOREIGN KEY

FOREIGN KEY(id_autor) REFERENCES autores(id_autor)ON DELETE CASCADE

ON DELETE CASCADE significa que, se se apagar ou alterar uma linha (registo) na tabela pai, irá automaticamente apagar ou alterar as linhas correspondentes na tabela filha, isto com base nos campos em que se estabelece o relacionamento.

CREATE TABLECONSTRAINT FOREIGN KEY

FOREIGN KEY(id_autor) REFERENCES autores(id_autor)ON DELETE SET NULL

ON DELETE SET NULL significa que, se se apagar ou alterar uma linha (registo) na tabela pai, irá ser colocado automaticamente o valor NULL no campo chave estrangeira nas linhas correspondentes na tabela filha, atenção que a chave estrangeira na tabela filha não pode ser NOT NULL!

ALTER TABLECONSTRAINT FOREIGN KEY

Se se pretender adicionar a foreign key à posteriori:

ALTER TABLE LivrosADD FOREIGN KEY (Id_autor) REFERENCES Autores(Id_autor)

Para dar um nome à restrição e/ou definir a chave composta por várioscampos:

ALTER TABLE LivrosADD CONSTRAINT fkLivroFOREIGN KEY (Id_autor) REFERENCES Autores(id_autor)

ALTER TABLECONSTRAINT FOREIGN KEY

Para eliminar a chave estrangeira:

ALTER TABLE LivrosDROP FOREIGN KEY fkLivro

Quando se cria uma chave estrangeira sem dar explicitamente um nome à restrição, internamente é criada uma designação. Para saber qual é a restrição, de forma a poder eliminar a chave estrangeira, usar o comandoSHOW CREATE TABLE nomeatabela.

INSERT INTOA função INSERT INTO serve para inserir dados na tabela já existente.

Exemplo: INSERT INTO Clientes (NomeClientes, NomeContacto, Endereço, Cidade, CodPostal, Pais)

VALUES ('Carmo',‘Luis Santos',‘Av Liberdade n100',’Lisboa',‘1234-123',‘Portugal');

O que significa que se fizermos uma consulta à tabela Clientes iremos ter uma linha com os dados agora inseridos:

NomeClientes| NomeContacto| Endereço | Cidade| CodPostal |Pais…Carmo Luis Santos Av Liberdade n100 Lisboa 1234-123 Portugal

UPDATEA sintaxe do UPDATE é bastante parecida à sintaxe do INSERT mas o comando UPDATE é usado para alterar informações na base de dados em vez de as inserir.

UPDATE nome_da_tabela SET campo1 = valor1, campo2 = valor2, …;

Exemplo:Considera a tabela clientes, que entre outros campos tem o campo nome.

A seguinte instrução irá alterar todos os registos da tabela:

UPDATE clientes SET nome = 'Rafael’;

UPDATEExemplo:UPDATE clientes SET nome = 'Rafael', email = 'contato@rlsystem.com.br' WHERE id = 1;

Nesta situação apenas irá alterar os registos que tenham o campo id=1.

UPDATE – Comando para atualizar os dadosSET – o que será alteradoWHERE – condição para especificar os registos a alterar

UPDATEConclusõesPodemos alterar um, vários ou todos os registos da tabela.

É importante ter em mente que se não se usar a cláusula WHERE, o comando vai alterar todos os registos da tabela.

Na cláusula WHERE, podemos usar várias combinações de condições (AND/OR) para definir os registos a serem alterados. Exemplo: Podemos alterar todos registos com a data inferior a hoje e (AND) que a hora seja maior que 10 horas.

Podemos alterar um ou mais campos da tabela, para isto, basta depois do 'valor novo do campo', adicionar uma vírgula.

DELETEDelete é instrução em SQL, que remove um ou mais registos de uma tabela. Pode ser definido um subconjunto de registos para a exclusão usando uma condição, caso contrário, todos os registos serão removidos.

DELETEExemplo:Considera a tabela CLIENTES com os seguintes registos: +----+----------+-----+-----------+----------+

| ID | NAME | AGE | ADDRESS | SALARY |

+----+----------+-----+-----------+----------+

| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |

| 2 | Khilan | 25 | Delhi | 1500.00 |

| 3 | kaushik | 23 | Kota | 2000.00 |

DELETE FROM Clientes WHERE ID = 2;

Irá apagar um cliente, cuja identificação é 2:+----+----------+-----+-----------+----------+

| ID | NAME | AGE | ADDRESS | SALARY |

+----+----------+-----+-----------+----------+

| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |

| 3 | kaushik | 23 | Kota | 2000.00 |

INDEXESOs indices são usados para encontrar rapidamente linhas quetenham um valor especifico numa coluna.

Sem a existência de um index, o MySQL começa pela 1.ª linha e vai ler a tabela completa à procura das linhas(registos) que pretende.

Alguns indexes :PRIMARY KEY, UNIQUE, INDEX, e FULLTEXT

INDEXESDeclaração que cria um indice, com base nos 10 primeiroscaracteres do nome da coluna.

CREATE INDEX part_of_name ON customer (name(10));

TRANSACTIONPor defeito, MySQL é executado num modo em que ao se executar as declarações que modifiquem uma tabela, o MySQL armazena essa alteração diretamente no disco tornando-as permanente.(modo autocommit ativo)

Declarações a usar:START TRANSACTION: começa uma nova transação;COMMIT: realiza a transação em curso, tornando as alteraçõespermanentes;ROLLBACK: desfaz a transação atual, cancelando as suas alterações;SET autocommit: ativa ou desativa o modo de autocommit para a sessão em curso.

TRANSACTIONVerificar autocommit

Executar a seguinte consulta:select @@autocommit

Se estiver a 1, significa que o autocommit está ativado.

Alterar autocommitSet autocommit=0

Pode ser necessário reiniciar o serviço para ter efeito.

TRANSACTIONSelect * from clientes;

START TRANSACTION;

INSERT INTO clientes(nome,sobrenome) VALUES

('Teste‘,'Teste');

Select * from clientes; //vê-se a tabela com o novo elemento

ROLLBACK; //volta trás, desfazendo as ações

Select * from clientes; //vê-se a tabela

TRANSACTIONSelect * from clientes;

START TRANSACTION;

INSERT INTO clientes(nome,sobrenome) VALUES

('Teste‘,'Teste');

Select * from clientes; //vê-se a tabela com o novo elemento

COMMIT; //Realiza as ações

Select * from clientes; //vê-se a tabela

PRIVILEGIOS E CONTROLO DE ACESSOS

1.ª etapa: estabelecer uma ligação ao servidor

Se se conseguir conectar ao servidor , mas se os nossos privilegios nãoforem o que se está à espera, podemos verificar qual a conta que o servidor está a usar para nos autenticar.

Usar a seguinte função:mysql> SELECT CURRENT_USER();

Depois de estabelecer a conexão com o servidor entramos na 2.ª etapa de controlo de acessos.

Para cada pedido que quiser realizar através esta conexão, o servidor vaiverificar se temos ou não privilégios suficientes para o conseguir.

PRIVILEGIOS E CONTROLO DE ACESSOSPrivilege System Grant Tables(sistema para conceder privilégios a tabelas)

O MySQL inclui várias tabelas onde são guardadas informações acercadas contas dos utilizadores e dos privilégios que cada um tem.

Para manipular o conteúdo destas tabelas, vamos fazê-lo indiretamenteatravés das declarações de gestão de contas (permitem definir contas e controlar os privilegios disponíveis para cada uma):

CREATE USER, GRANT, REVOKE

PRIVILEGIOS E CONTROLO DE ACESSOS

Quando se modifica uma conta, deve-se verificar que as nossasalterações vão ter o efeito esperado. Para verificar os privilégios de umaconta usar a declaração SHOW GRANTS :

SHOW GRANTS FOR 'bob'@'pc84.example.com';

SHOW GRANTS FOR ‘userName’ @ ‘hostName’;

Se quisermos saber os privilégios da nossa conta usar:‘NossoUserName'@'%'.

OuCurrent_user() @'%‘

PRIVILEGIOS E CONTROLO DE ACESSOSCREATE USER

O hostName pode ser o nome do servidor ou um endereço IPO nome 'localhost' indica o servidor local com IP '127.0.0.1‘

Criar um user sem password:

CREATE USER ‘aluno'@‘localhost’

Criar um user com password:CREATE USER ‘aluno2'@'localhost' IDENTIFIED BY 'minhaPW';

Atenção que temos de ter privilégio para poder criar contas!

PRIVILEGIOS E CONTROLO DE ACESSOSGRANT

Atenção que temos de ter privilégio para poder definir privilégios nascontas!

O administrador da BD usa 1.º o CREATE USER para criar uma conta e depois o GRANT para definir os seus privilégios e caracteristicas.

Exemplo:CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; GRANT ALL ON db1.* TO 'jeffrey'@'localhost'; GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';

Acede ao site indicado e verifica e testa mais alguns privilégios.https://dev.mysql.com/doc/refman/5.1/en/grant.html#grant-privileges

top related