Você está na página 1de 17

Manual da Formação

UFCD 5083

Designação da UFCD
Formação

Duração (horas)

Forma de Organização Presencial e-Learning b-Learning

Formador/a Paulo Sérgio M. Afonso


responsável

Direitos Reservados
Este manual é da autoria do Formador referido, o qual assume
todos os direitos de autor relativos aos conteúdos aqui
desenvolvidos.
Foi entregue à Sigway para sua utilização como Recurso
Técnico-Pedagógico no âmbito desta formação.

Dezembro de 2023

PO.01-MN.02.00
ÍNDICE

1 Objetivos ...................................................................................................................................... 3
2. Introdução ................................................................................................................................... 4
3. Criação, alteração e eliminação de tabelas e índices em SQL ................................................. 5
Criação de tabelas (comando CREATE TABLE) ............................................................................ 5
Criação de índices (comando CREATE INDEX) ............................................................................. 6
Eliminação de tabelas e índices (comandos DROP TABLE e DROP INDEX); ............................ 11
Atualização de dados ................................................................................................................... 12
Inserção de linhas (comando INSERT INTO) ............................................................................12
Alteração de valores nas linhas (comando UPDATE) .............................................................. 13
Eliminação de linhas (comando DELETE FROM) ..................................................................... 14
Conceito de transação (comandos COMMIT e ROLLBACK) ...................................................... 14
Privilégios e controlo de acessos (comandos GRANT e REVOKE) .............................................15
4. Bibliografia ................................................................................................................................ 17

Página 2 de 17
PO.01-MN.01.00
1 Objetivos

Criar, alterar e eliminar tabelas e índices em SQL.

Conhecer e aplicar o conceito de transação.


Conhecer e aplicar os privilégios e fazer o controlo de acessos.

Página 3 de 17
PO.01-MN.01.00
2. Introdução

Criação, alteração e eliminação de tabelas e índices em SQL

Criação de tabelas (comando CREATE TABLE)


Alteração de tabelas (comando ALTER TABLE)

Criação de índices (comando CREATE INDEX)

Eliminação de tabelas e índices (comandos DROP TABLE e DROP INDEX);


Atualização de dados

Inserção de linhas (comando INSERT INTO)

Alteração de valores nas linhas (comando UPDATE)

Eliminação de linhas (comando DELETE FROM)


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

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

Página 4 de 17
PO.01-MN.01.00
3. Criação, alteração e eliminação de tabelas e índices em SQL

Pode criar e modificar tabelas, constrangimentos, índices e relações no Access escrevendo


consultas de definição de dados na vista SQL. Este artigo explica consultas de definição de
dados e como usá-las para criar tabelas, constrangimentos, índices e relacionamentos. Este
artigo também pode ajudá-lo a decidir quando usar uma consulta de definição de dados.
Para criar uma mesa, utilize um comando CREATE TABLE. Um comando CREATE TABLE tem
a seguinte sintaxe:

CREATE TABLE table_name

(field1 type [(size)] [NOT NULL] [index1]


[, field2 type [(size)] [NOT NULL] [index2]

[, ...][, CONSTRAINT constraint1 [, ...]])

Os únicos elementos necessários de um comando CREATE TABLE são o próprio comando


CREATE TABLE e o nome da tabela, mas normalmente irá querer definir alguns campos ou
outros aspetos da tabela. Considere este exemplo simples.

Criação de tabelas (comando CREATE TABLE)

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.

-- Criação da tabela Livros


CREATE TABLE Livros (

ID INT PRIMARY KEY,


Titulo VARCHAR(100),

Autor VARCHAR(100),

AnoPublicacao INT,

Genero VARCHAR(50)
);

Página 5 de 17
PO.01-MN.01.00
Criação de índices (comando CREATE INDEX)
Para criar um índice numa tabela existente, utilize um comando CREATE INDEX. Um comando
CREATE INDEX tem a seguinte sintaxe:

CREATE [UNIQUE] INDEX index_name


ON table (field1 [DESC][, field2 [DESC], ...])

[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

Os únicos elementos necessários são o comando CREATE INDEX, o nome do índice, o


argumento ON, o nome da tabela que contém os campos que pretende indexar, e a lista de
campos a incluir no índice.

O argumento DESC faz com que o índice seja criado em ordem descendente, o que pode ser
útil se executar frequentemente consultas que procuram valores de topo para o campo
indexado, ou que classificam o campo indexado em ordem descendente. Por padrão, um
índice é criado por ordem ascendente.

O argumento DOM ESTABELECE o campo ou campos indexados como o chave primária da


tabela.

O argumento NUR SEM FAVOR FAZ COM QUE O Índice exija a entrada de um valor para o
campo indexado — ou seja, não são permitidos valores nulos.

Suponha que tem uma mesa chamada Cars com campos que armazenam o nome, ano, preço
e condição de carros usados que está a considerar para compra. Suponha também que a
mesa se tornou grande e que frequentemente inclui o campo do ano em consultas. Pode criar
um índice no campo Ano para ajudar as suas consultas a devolver os resultados mais
rapidamente, utilizando o seguinte procedimento:

No separador Criar, no grupo Macros & Code, clique em Design de Consulta.

No separador Design, no grupo Tipo de Consulta, clique na Definição de Dados.

A grelha de design está escondida e o separador de objeto de vista SQL é apresentado.

Digite a seguinte declaração SQL:

Página 6 de 17
PO.01-MN.01.00
CRIAR ÍNDICE AnoIndex ON Cars (Ano)

No separador Estrutura, no grupo Resultados, clique em Executar.

Criar uma restrição ou uma relação


Uma restrição estabelece uma condição lógica que um campo ou combinação de campos
deve satisfazer quando os valores são inseridos. Por exemplo, uma restrição UNIQUE impede
o campo constrangido de aceitar um valor que duplicaria um valor existente para o campo.

Uma relação é um tipo de restrição que se refere aos valores de um campo ou combinação de
campos em outra tabela para determinar se um valor pode ser inserido no campo
constrangido ou na combinação de campos. Não se usa uma palavra-chave especial para
indicar que um constrangimento é uma relação.

Para criar uma restrição, utilize uma cláusula RESTRIÇÃO num comando CREATE TABLE ou
ALTER TABLE. Existem dois tipos de cláusulas RESTRIÇÃO: uma para criar uma restrição
num único campo, e outra para criar uma restrição em vários campos.

Restrições de campo único

Uma cláusula restrição de um único campo segue imediatamente a definição do campo que
limita, e tem a seguinte sintaxe:

CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |


REFERENCES foreign_table [(foreign_field)]

[ON UPDATE {CASCADE | SET NULL}]

[ON DELETE {CASCADE | SET NULL}]}


Suponha que tem uma mesa chamada Cars com campos que armazenam o nome, ano, preço
e condição de carros usados que está a considerar para compra. Suponha também que
muitas vezes se esqueça de inserir um valor para o estado do carro, e que sempre queira
gravar esta informação. Pode criar uma restrição no campo Condição que o impede de deixar
o campo vazio, utilizando o seguinte procedimento:

No separador Criar, no grupo Macros & Code, clique em Design de Consulta.

Página 7 de 17
PO.01-MN.01.00
No separador Design, no grupo Tipo de Consulta, clique na Definição de Dados.

A grelha de design está escondida e o separador de objeto de vista SQL é apresentado.

Digite a seguinte declaração SQL:

ALTER TABLE CARROS ALTERAR CONDIÇÃO DE ESTADO DE TEXTO CONDICIONADA NÃO


É Nula

No separador Estrutura, no grupo Resultados, clique em Executar.

Agora suponha que, passado algum tempo, note que há muitos valores semelhantes no
campo condição que devem ser os mesmos. Por exemplo, alguns dos carros têm um valor de
condição de pobre e outros têm um valor de mau.

Nota: Se quiser seguir os procedimentos restantes, adicione alguns dados falsos à tabela
Carros que criou nos passos anteriores.

Depois de limpar os valores para que sejam mais consistentes, pode criar uma tabela,
denominada CarCondition, com um campo, denominado Condição, que contém todos os
valores que pretende utilizar para o estado dos carros:

No separador Criar, no grupo Macros & Code, clique em Design de Consulta.

No separador Design, no grupo Tipo de Consulta, clique na Definição de Dados.

A grelha de design está escondida e o separador de objeto de vista SQL é apresentado.

Digite a seguinte declaração SQL:

CRIAR Condições de Carro de Mesa (Texto de Condição(10))

Página 8 de 17
PO.01-MN.01.00
No separador Estrutura, no grupo Resultados, clique em Executar.

Crie uma chave primária para a tabela utilizando uma declaração ALTER TABLE:

ALTER TABELA CarroCondição ALTER COLUNA CONDICIONAR RESTRIÇÃO DE TEXTO


Chave PRIMÁRIA

Para inserir os valores do campo Condição da tabela Carros na nova tabela CarCondition,
digite o seguinte SQL no separador de objeto de vista SQL:

INSERIR na Condição do Carro Selecione Condição DISTINTA DOS Automóveis;

Nota: A declaração do SQL neste passo é uma consulta Acrescentar. Ao contrário de uma
consulta de definição de dados, uma consulta de apêndice termina com um ponto e vírgula.

No separador Estrutura, no grupo Resultados, clique em Executar.

Criar uma relação usando uma restrição

Para exigir que qualquer novo valor inserido no campo condição da tabela Carros corresponda
a um valor do campo Condição na tabela CarCondition, pode então criar uma relação entre
CarCondition e Cars no campo denominado Condição, utilizando o seguinte procedimento:

No separador Criar, no grupo Macros & Code, clique em Design de Consulta.

No separador Design, no grupo Tipo de Consulta, clique na Definição de Dados.

A grelha de design está escondida e o separador de objeto de vista SQL é apresentado.

Digite a seguinte declaração SQL:

ALTER TABLE Cars ALTER COLUMN Condicionar O TEXTO RESTRIÇÃO FKeyCondição


REFERÊNCIAS CarCondition (Condição)

Página 9 de 17
PO.01-MN.01.00
No separador Estrutura, no grupo Resultados, clique em Executar.

Restrições de vários campos

Uma cláusula de restrição de vários campos só pode ser utilizada fora de uma cláusula de
definição de campo, e tem a seguinte sintaxe:

CONSTRAINT constraint_name

{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) |


UNIQUE (unique1[, unique2[, ...]]) |

NOT NULL (notnull1[, notnull2[, ...]]) |

FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]])


REFERENCES foreign_table

[(fk_field1[, fk_field2[, ...]])] |

[ON UPDATE {CASCADE | SET NULL}]

[ON DELETE {CASCADE | SET NULL}]}


Considere outro exemplo que usa a mesa dos Carros. Suponha que quer ter certeza de que
nenhum dois discos na tabela Cars têm o mesmo conjunto de valores para Nome, Ano,
Condição e Preço. Pode criar uma restrição ÚNICA que se aplica a estes campos, utilizando o
seguinte procedimento:

No separador Criar, no grupo Macros & Code, clique em Design de Consulta.

No separador Design, no grupo Tipo de Consulta, clique na Definição de Dados.

A grelha de design está escondida e o separador de objeto de vista SQL é apresentado.

Digite a seguinte declaração SQL:

ALTER TABLE Cars ADD RESTRIÇÕES NoDupes EXCLUSIVO (nome, ano, condição, preço)

No separador Estrutura, no grupo Resultados, clique em Executar.

Página 10 de 17
PO.01-MN.01.00
Eliminação de tabelas e índices (comandos DROP TABLE e
DROP INDEX);
Remove um ou mais índices relacionais, espaciais, filtrados ou XML do banco de dados atual.
É possível descartar um índice clusterizado e mover a tabela resultante para outro grupo de
arquivos ou esquema de partição em uma única transação especificando a opção MOVE TO.

A instrução DROP INDEX não se aplica a índices criados definindo as restrições PRIMARY
KEY ou UNIQUE. Para remover a restrição e o índice correspondente, use ALTER TABLE com
a cláusula DROP CONSTRAINT.

-- Syntax for SQL Server (All options except filegroup and filestream apply to Azure SQL
Database.)

DROP INDEX [ IF EXISTS ]


{ <drop_relational_or_xml_or_spatial_index> [ ,...n ]

| <drop_backward_compatible_index> [ ,...n ]

<drop_relational_or_xml_or_spatial_index> ::=
index_name ON <object>

[ WITH ( <drop_clustered_index_option> [ ,...n ] ) ]

<drop_backward_compatible_index> ::=
[ owner_name. ] table_or_view_name.index_name

<object> ::=
{ database_name.schema_name.table_or_view_name | schema_name.table_or_view_name |
table_or_view_name }

<drop_clustered_index_option> ::=
{

MAXDOP = max_degree_of_parallelism

| ONLINE = { ON | OFF }

| MOVE TO { partition_scheme_name ( column_name )

Página 11 de 17
PO.01-MN.01.00
| filegroup_name
| "default"

[ FILESTREAM_ON { partition_scheme_name
| filestream_filegroup_name

| "default" } ]

Atualização de dados
Inserção de linhas (comando INSERT INTO)

O que é o comando SQL INSERT?

O comando SQL INSERT é utilizado para inserirmos dados em uma tabela. Entretanto, existem
diferentes formas de utilizar esse recurso. Confira quais são elas nos próximos tópicos.

SQL INSERT INTO

O comando SQL INSERT INTO é utilizado para inserir dados em uma tabela. Para isso,
devemos indicar quais campos serão inseridos e seus valores correspondentes.

Qual a sintaxe do comando SQL INSERT INTO?

A sintaxe do comando SQL INSERT INTO é:

INSERT INTO <nome_tabela> (coluna1, coluna2, ...., colunaN)


VALUES

(valor_coluna1, valor_coluna2, ..., valor_colunaN)


Em que:

nome_tabela: indica a tabela do banco de dados em que os dados serão inseridos;


coluna1, coluna2, …, colunaN: representam os nomes das colunas da tabela que terá os
dados inseridos;

valor_coluna1, valor_coluna2, …, valor_colunaN: indicam os dados correspondentes aos


campos declarados na cláusula INSERT.

Página 12 de 17
PO.01-MN.01.00
Quando declaramos os campos da tabela na cláusula INSERT, podemos inserir apenas os
dados desejados e os que sejam obrigatórios. Além disso, não precisamos seguir a mesma
ordem em que os campos estão definidos no banco de dados. O importante é seguir a mesma
ordem apenas na disposição dos campos e valores na instrução SQL.

Quando utilizamos a sintaxe dessa forma, não precisamos informar o valor do ID, caso ele
tenha sido declarado para ser incrementado automaticamente. Falaremos mais sobre isso no
tópico com os exemplos práticos.

Confira outra sintaxe do SQL INSERT:

INSERT INTO <nome_tabela>


VALUES

(valor_coluna1, valor_coluna2, ...., valor_colunaN)

Perceba que, nessa sintaxe, não definimos os nomes de campos que serão inseridos. Isso
significa que precisamos inserir todos os registros que fazem parte da tabela e na ordem
existente no banco de dados.

Exemplos de uso do comando SQL INSERT INTO

Nada melhor que conferirmos exemplos práticos para observarmos o comportamento da


instrução SQL INSERT. Para isso, vamos criar uma pequena base de dados chamada “Escola”,
que contém duas tabelas necessárias para realizarmos os nossos testes, são elas:

Pessoa: utilizada para armazenar as informações de qualquer tipo de pessoa que tenha
alguma relação com a escola (professor, aluno, funcionário, por exemplo);

Aluno: para armazenar apenas as informações sobre as pessoas estudantes.

Alteração de valores nas linhas (comando UPDATE)


O comando UPDATE é o comando SQL responsável por atualizar os dados já armazenados
em uma tabela do banco. Ele pode ser usado tanto para atualizar um único registro quanto
para alterar múltiplas informações de uma vez.

Além disso, ele faz parte do subconjunto SQL denominado como DML (Data Manipulation
Language), que agrupa os comandos utilizados para manipular as informações registradas na
base de dados.

Página 13 de 17
PO.01-MN.01.00
Qual a sintaxe do comando SQL UPDATE?
A sintaxe do comando UPDATE é bastante simples, observe:

UPDATE nome_da_tabela
SET nome_da_coluna1 = valor_da_coluna1, nome_da_coluna2 = valor_da_coluna2

WHERE condição;

A princípio, pode parecer um pouco confuso, mas vamos explicar detalhadamente para quê
servem cada uma dessas instruções presentes no comando.

Eliminação de linhas (comando DELETE FROM)

Para remover linhas de uma tabela, use o comando DELETE. É possível usar o comando
DELETE para remover linhas específicas ou todas as linhas de uma tabela. Para excluir linhas,
especifique a tabela e uma condição de procura opcional (WHERE) que especifica quais linhas
excluir.

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


Na verdade transação é o processo todo de consulta ou manipulação do banco de dados. É
uma forma de estabelecer que algo deva ser feito atomicamente, ou seja, ou faz tudo ou faz
nada, não pode fazer pela metade. É tudo feito em uma viagem da aplicação para o banco de
dados. Em condições normais enquanto a transação não termina outras transações não
podem ver o que esta está fazendo. Entenda o que é o ACID.

Esses 3 comandos SQL são para controlar isso.

O BEGIN TRANSACTION indica onde ela deve começar, então os comando SQL a seguir
estarão dentro desta transação.

O COMMIT TRANSACTION indica o fim normal da transação, o que tiver de comando depois
já não fará parte desta transação. Neste momento tudo o que foi manipulado passa fazer parte
do banco de dados normalmente e operações diversas passam enxergar o que foi feito.

O ROLLBACK TRANSACTION também fecha o bloco da transação e é a indicação que a


transação deve ser terminada, mas tudo que tentou ser feito deve ser descartado porque
alguma coisa errada aconteceu e ela não pode terminar normalmente. Nada realizado dentro
dela será perdurado no banco de dados.

Página 14 de 17
PO.01-MN.01.00
Ao contrário do que muita gente acredita rollback no contexto de banco de dados não
significa reverter e sim voltar ao estado original. Um processo de reversão seria de
complicadíssimo à impossível. Um processo de descarte é simples e pode ser atômico.

A maioria dos comandos SQL são transacionais implicitamente, ou seja, ele por si só já é uma
transação. Você só precisa usar esses comandos citados quando precisa usar múltiplos
comandos e todos esses devam rodar atomicamente. Ou seja, eles funcionam como as
chaves de um código, eles criam um bloco. Na verdade está mais para o using do C# já que
há uma consequência garantida no final da execução.

CREATE TABLE ValueTable (id int);


BEGIN TRANSACTION; -- aqui começa a transação

INSERT INTO ValueTable VALUES(1);

INSERT INTO ValueTable VALUES(2);


COMMIT; -- aqui termina e "grava" tudo

Coloquei no GitHub para referência futura.

Enquanto não dá o COMMIT essas inserções não constam de fato no banco de dados. Um
ROLLBACK descartaria tudo feito antes.

Privilégios e controlo de acessos (comandos GRANT e REVOKE)


Revoga privilégios previamente

concedidos sobre uma relação a


determinados usuários

• Sintaxe

REVOKE {lista_privilégios | ALL PRIVILEGES}


ON {relação│visão}

FROM {lista_usuários│PUBLIC}

Concede privilégios sobre uma relação a

determinados usuários

• Sintaxe

GRANT {lista_privilégios | ALL PRIVILEGES}


ON {relação│visão}

Página 15 de 17
PO.01-MN.01.00
TO {lista_usuários│PUBLIC}
[WITH GRANT OPTION]

Página 16 de 17
PO.01-MN.01.00
4. Bibliografia

https://support.microsoft.com/pt-pt/office/criar-ou-modificar-tabelas-ou-%C3%ADndices-
utilizando-uma-consulta-defini%C3%A7%C3%A3o-de-dados-d935e129-229b-48d8-9f2d-
1d4ee87f418e

https://www.w3bai.com/pt/sql/sql_drop.html#gsc.tab=0

https://learn.microsoft.com/pt-br/sql/t-sql/statements/drop-index-transact-sql?view=sql-
server-ver16

https://blog.betrybe.com/sql-insert/

https://blog.betrybe.com/sql-update/

https://www.ibm.com/docs/pt-br/psfa/7.1.0?topic=tables-delete-rows-from
https://pt.stackoverflow.com/questions/203669/o-que-s%C3%A3o-as-
transa%C3%A7%C3%B5es-begin-commit-e-rollback

http://wiki.icmc.usp.br/images/5/5f/SCC024120142_GrantRevoke.pdf

Página 17 de 17
PO.01-MN.01.00

Você também pode gostar