Módulo 15
Linguagem de Definição de Dados
Índice
SQL .........................................................................................................................................................2
Comandos sql: ...................................................................................................................................2
DDL - Data Definition Language:......................................................................................................2
DML - Data Manipulation Language: ...............................................................................................2
DCL - Data Control Language: ..........................................................................................................2
DQL - Data Query Language:............................................................................................................2
Desenvolver Base de dados ...................................................................................................................3
Sintaxe ...............................................................................................................................................3
Tipos de dados ...................................................................................................................................4
Criar Base de dados ...........................................................................................................................7
Eliminar Base de dados ......................................................................................................................7
Criar tabelas .......................................................................................................................................7
Restrições (Constraints) SQL..............................................................................................................8
Foreign Key - Propagação de Update e Delete de registos .............................................................10
Excluir registos na tabela mãe .....................................................................................................10
Atualizar registos na tabela mãe ................................................................................................11
Criar tabela usando outra tabela .....................................................................................................11
Eliminar Tabela ................................................................................................................................11
Adicionar colunas a uma tabela ......................................................................................................12
Remover uma coluna de uma tabela ..............................................................................................12
Alterar uma coluna de uma tabela ..................................................................................................12
Inserir dados na tabela ....................................................................................................................13
Inserir dados a partir de outra tabela .........................................................................................13
Atualizar dados da tabela ................................................................................................................13
Apagar dados de uma tabela ...........................................................................................................14
Índices ..............................................................................................................................................19
Transações ...........................................................................................................................................20
O comando ROLLBACK.................................................................................................................21
Privilégios e controlo de acessos .........................................................................................................22
Revoke .............................................................................................................................................22
Criar logins .......................................................................................................................................23
Criar utilizadores ..............................................................................................................................25
Resumo Sintaxe: ..............................................................................................................................26
SQL
SQL significa Structured Query Language, e é uma linguagem que permite armazenar,
manipular e retirar dados guardados em base de dados relacionais.
SQL é a linguagem standard para sistemas de base de dados relacionais.
Todos os sistemas de gestão de base de dados como MySQL, MS Access, Oracle,
Sybase, Informix, postgres e SQL Server utilizam o SQL como linguagem.
No entanto, cada um utiliza um dialeto diferente : o MS SQL Server usa o T-SQL, o Oracle
usa PL/SQL, o MS Access é chamado de JET SQL (native format) etc.
Comandos sql:
DDL - Data Definition Language:
Comando Descrição
CREATE Cria uma nova tabela, uma vista de uma tabela ou outro objeto na base de dados
ALTER Modifica um objeto da base de dados existente, como uma tabela.
DROP Elimina uma tabela inteira, uma vista de uma tabela ou outro objeto na base de
dados
DML - Data Manipulation Language:
Comando Descrição
INSERT Criar registos
UPDATE Modifica registos
DELETE Eliminar registos
DCL - Data Control Language:
Comando Descrição
GRANT Atribui privilégios ao utilizador
REVOKE Retira privilégios ao utilizador
DQL - Data Query Language:
Comando Descrição
SELECT Retorna determinados registos de uma ou mais tabelas
Desenvolver Base de dados
Tabelas
As bases de dados são constituídas por objetos chamados de tabelas. As tabelas são
coleções de dados organizadas em linhas e colunas.
Campo
Cada tabelas é dividida em entidades ou campos. Cada coluna de uma tabela representa
um campo.
Registo
Cada linha de uma tabela composta de dados é chamada de registo.
NULL Value
Um valor NULL numa tabela é um valor num campo que parece estar em branco, o que
significa que um campo com um valor NULL é um campo sem valor.
É muito importante entender que um valor NULL é diferente de um valor zero ou um
campo que contém espaços.
Um campo com um valor NULL é um campo que foi deixado em branco quando se gravou
a base de dados
Sintaxe
O SQL é regido de um conjunto exclusivo de regras e diretrizes denominadas Sintaxe.
Todas as instruções SQL começam com qualquer uma das palavras-chave como
SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, CREATE, USE, SHOW e todas as
instruções terminam com um ponto-e-vírgula (;).
O ponto importante a ser observado é que o SQL é insensível a maiúsculas e minúsculas,
o que significa que SELECT e select tem o mesmo significado em instruções SQL, mas o
MySQL faz diferença nos nomes das tabelas.
Tipos de dados
O SQL Server oferece 6 categorias de dados:
● Inteiro : bigint, int, smallint, tinyint
● Numérico exato : numeric, decimal
● Numérico aproximado : float, real
● Data e Hora : datetime, smalldatetime
● Caracter
○ string : char, varchar, text
○ Unicode : nchar, nvarchar, ntext
● Binário : binary, varbinary
● Outros.
Exact Numeric Data Types:
Variable Numeric Data Types:
Date and Time Data Types:
Character Strings Data Types:
Binary Data Types:
Misc Data Types:
O Mysql tem como categorias de dados:
Criar Base de dados
CREATE DATABASE DatabaseName;
As bases de dados devem ser únicas, sem nome repetido no seu SGBD.
Eliminar Base de dados
DROP DATABASE DatabaseName;
Irá eliminar todo o conteúdo da base de dados.
Criar tabelas
Para trabalharmos com BD, precisamos das tabelas que armazenam os dados. Para isso,
precisamos criá-las, de acordo com a estrutura abaixo:
CREATE TABLE tabela (
coluna1 tipo_dado opções,
... ... ...,
coluna x tipo_dado opções
PRIMARY KEY(uma ou mais colunas )
);
Exemplo:
create table Cliente(
nome varchar(30) Not Null,
morada varchar(50)
);
As colunas de uma Tabela podem ser campos calculados:
CREATE TABLE Tb_Stock (
cd_produto int,
qt_produto int,
vl_unitario numeric(15,2),
vl_estoque AS (qt_produto * vl_unitario)
);
As colunas de uma Tabela podem possuir a propriedade auto incremento.
Só é permitido nos tipos de dados: bigint, int, smallint, tinyint, e os tipos decimal e numeric
com escala 0. Para isso devemos colocar:
IDENTITY(valor inicial, incremento) no SQL SERVER e AUTO_INCREMENT no
MYSQL
Exemplo SQL SERVER:
Create Table Tb_Categoria (
cd_categoria int identity(1,1) NOT NULL );
Exemplo MYSQL:
Create Table Tb_Categoria (
cd_categoria int AUTO_INCREMENT,
PRIMARY KEY (cd_categoria));
Restrições (Constraints) SQL
As restrições são as regras aplicadas nas colunas de dados na tabela. Estas são usados
para limitar o tipo de dados que uma tabela pode conter, garantindo a precisão e a
confiabilidade dos dados na base de dados.
As restrições podem ser a nível da coluna ou a nível da tabela. As restrições a nível de
coluna são aplicadas apenas a uma coluna, enquanto que as restrições de nível de tabela
são aplicadas a toda a tabela.
Seguem-se as restrições mais utilizadas no SQL:
● NOT NULL: garante que uma coluna não pode ter valor NULL.
● DEFAULT : fornece um valor padrão para uma coluna quando nenhum é
especificado.
● UNIQUE: garante que todos os valores numa coluna sejam diferentes.
● PRIMARY Key: identifica exclusivamente cada linha / registro em uma tabela da
base de dados.
● FOREIGN Key: Campo que é chave noutra tabela da base de dados. Necessária
para ligar duas tabelas.
● CHECK: a restrição CHECK garante que todos os valores em uma coluna
satisfaçam certas condições. ex: AGE INT NOT NULL CHECK (AGE >= 18)
● INDEX: Usado para criar e recuperar dados da base de dados muito rapidamente.
Exemplo de NULL
CREATE TABLE FUNCIONARIOS(
ID INT NOT NULL,
NOME VARCHAR (20) NOT NULL,
IDADE INT NOT NULL,
MORADA CHAR (25) ,
SALARIO DECIMAL (18, 2),
);
Exemplo de DEFAULT:
create table produtos (
produto_no integer,
descricao text,
preco numeric default 9.99
);
Exemplo de Check:
CREATE TABLE produtos3 (
produto_no integer,
descricao text, preco
numeric CONSTRAINT preco_positivo CHECK (preco > 0)
);
exemplo de check 2:
CREATE TABLE pessoa(
codigo int PRIMARY KEY,
modelo varchar(255) NOT NULL,
check (modelo IN (‘A1’, ‘A2’, ‘A3’))
);
Exemplo de UNIQUE
SQL SERVER
CREATE TABLE produtos6 (
cod_prod integer UNIQUE,
nome text,
preco numeric
);
MYSQL
CREATE TABLE produtos7(
cod_prod integer,
nome text,
preco numeric,
UNIQUE (cod_prod)
);
Exemplo de primary key:
SQL SERVER
CREATE TABLE FUNCIONARIOS(
ID INT NOT NULL PRIMARY KEY,
NOME VARCHAR (20) NOT NULL,
IDADE INT NOT NULL,
MORADA CHAR (25) ,
SALARIO DECIMAL (18, 2)
);
MYSQL
CREATE TABLE FUNCIONARIOS(
ID INT NOT NULL,
NOME VARCHAR (20) NOT NULL,
IDADE INT NOT NULL,
MORADA CHAR (25) ,
SALARIO DECIMAL (18, 2),
PRIMARY KEY (ID)
);
Chaves compostas:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
)
Exemplo de foreignkey:
SQL SERVER
CREATE TABLE pedidos (
cod_pedido integer PRIMARY KEY,
cod_prod integer, quantidade integer,
CONSTRAINT pedidos_fk FOREIGN KEY (cod_prod) REFERENCES produtos
(cod_prod)
);
MYSQL:
CREATE TABLE pedidos (
cod_pedido integer PRIMARY KEY,
cod_prod integer, quantidade integer,
PRIMARY KEY (cod_pedido),
FOREIGN KEY (cod_prod) REFERENCES Produtos(cod_prod)
Foreign Key - Propagação de Update e Delete de registos
ON UPDATE e ON DELETE especificam qual ação será executada quando uma linha na
tabela mãe for atualizada e excluída. As seguintes ações são permitidas: NO ACTION,
CASCADE, SET NULL e SET DEFAULT
Excluir registos na tabela mãe
Se excluir uma ou mais linhas da tabela mãe, poderá definir uma das seguintes ações:
ON DELETE NO ACTION: O SQL Server gera um erro e reverte a ação de exclusão na
linha da tabela mãe.
ON DELETE CASCADE: O SQL Server exclui as linhas da tabela filho que correspondem
à linha excluída da tabela mãe.
ON DELETE SET NULL: o SQL Server define as linhas da tabela filho como NULL se as
linhas correspondentes na tabela mãe forem excluídas. Para executar esta ação, as
colunas de chave estrangeira devem ser anuláveis.
ON DELETE SET DEFAULT O SQL Server definirá as linhas da tabela filho com seus
valores padrão se as linhas correspondentes na tabela pai forem excluídas. Para executar
esta ação, as colunas de chave estrangeira devem ter definições padrão. Observe que
uma coluna anulável terá um valor padrão NULL se nenhum valor padrão for especificado.
Por padrão, o SQL Server aplica o ON DELETE NO ACTION.
Atualizar registos na tabela mãe
Poderá definir uma das seguintes ações:
ON UPDATE NO ACTION: O SQL Server gera um erro e reverte a ação de atualização na
linha da tabela mãe.
ON UPDATE CASCADE: O SQL Server atualiza as linhas correspondentes na tabela filho
quando as linhas na tabela pai são atualizadas.
ON UPDATE SET NULL: o SQL Server define as linhas da tabela filho como NULL quando
a linha correspondente na tabela mãe é atualizada. Observe que as colunas de chave
estrangeira devem ser anuláveis para que esta ação seja executada.
ON UPDATE SET DEFAULT: o SQL Server define os valores padrão para as linhas na
tabela filho que têm as linhas correspondentes na tabela mãe atualizadas.
Criar tabela usando outra tabela
É possível realizar uma cópia de uma tabela. A nova tabela tem a mesma definição de
colunas. Todas as colunas ou determinadas colunas podem ser selecionadas. Quando se
cria uma nova tabela com base noutra, a nova tabela fica com os dados da antiga tabela.
Syntax:
select * into tabela_nova from tabela_velha;
Exemplo:
select * into copia_produtos from produtos;
Podemos ainda herdar os campos de outra tabela:
Exemplo:
CREATE TABLE capitais ( capital char(2) ) INHERITS (paises);
Eliminar Tabela
O comando drop permite eliminar a tabelas, as definições, os índices e todos os dados
existentes na tabela.
sintaxe:
DROP TABLE table_name;
Adicionar colunas a uma tabela
Podemos adicionar uma coluna com o Alter Table.
Exemplo para uma coluna:
ALTER TABLE TB_STOCK ADD NM_PRODUTO VARCHAR(40) NULL;
Exemplo para duas colunas:
ALTER TABLE TB_STOCK ADD NM_PRODUTO VARCHAR(40) NULL,
QT_MINIMA_TB_STOCK NUMERIC(5) NOT NULL;
Remover uma coluna de uma tabela
Podemos remover uma coluna conjugando o alter table com drop column.
ALTER TABLE TB_STOCK DROP COLUMN NM_PRODUTO;
Alterar uma coluna de uma tabela
Depois de criar uma tabela é possível alterar os campos da tabela.
Alterar o tipo de dados de uma coluna:
SQL SERVER
ALTER TABLE table_name ALTER COLUMN column_name datatype;
MYSQL:
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
Alterar se uma coluna pode conter ou não valores nulos:
ALTER TABLE table_name ALTER/MODIFY column_name datatype NOT NULL;
Alterar a constraint Unique:
ALTER TABLE table_name ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1,
column2...);
Alterar a constraint Default:
ALTER TABLE table_name ADD CONSTRAINT df_Constr DEFAULT 'value' FOR
column1;
Alterar a constraint CHECK:
ALTER TABLE table_name ADD CONSTRAINT MyUniqueConstraint CHECK
(CONDITION);
Alterar a tabela para adicionar uma chave primária
ALTER TABLE table_name ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1,
column2...);
Alterar a tabela para eliminar uma restrição:
ALTER TABLE table_name DROP CONSTRAINT MyUniqueConstraint;
Alterar a tabela para eliminar uma chave primária:
ALTER TABLE table_name DROP CONSTRAINT MyPrimaryKey;
Alterar a tabela - renomear coluna
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Inserir dados na tabela
Permite inserir linhas com dados na tabela.
Sintaxe:
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)] VALUES (value1,
value2, value3,...valueN)
Se formos inserir valores em todas as colunas não precisamos especificar as colunas, mas
devemos colocar os valores pela ordem dos campos da tabela.
Sintaxe:
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
Exemplo:
INSERT INTO FUNCIONARIOS (ID,NOME,IDADE,MORADA,SALARIO) VALUES (6,
'Ana', 22, 'MP', 1500.00 );
Inserir dados a partir de outra tabela
Podemos inserir dados de outra tabela através do código:
INSERT INTO first_table_name [(column1, column2, ... columnN)] SELECT column1,
column2, ...columnN FROM second_table_name [WHERE condition];
Atualizar dados da tabela
SQL UPDATE Query é usado para modificar os registos existentes na tabela.
Pode usar a cláusula WHERE com consulta UPDATE para atualizar as linhas
selecionadas, caso contrário, todas as linhas serão afetadas.
Sintaxe:
UPDATE table_name SET
column1 = value1,
column2 = value2....,
columnN = valueN
WHERE [condition];
Exemplo:
UPDATE FUNCIONARIOS SET IDADE = 25 WHERE ID = 6;
Para modificar todas as moradas e todos os salários faríamos:
UPDATE FUNCIONARIOS SET MORADA= 'Torres Vedras', SALARIO = 1000.00;
Apagar dados de uma tabela
Para eliminar registos de uma tabela usamos a sintaxe:
DELETE FROM table_name WHERE [condition];
Se não utilizar a cláusula where para identificar a linha, todos os dados serão removidos.
Exemplo:
DELETE FROM FUNCIONARIO WHERE ID = 6;
Se quiser eliminar todos os registos da tabela funcionário então o código seria:
DELETE FROM FUNCIONARIO;
ou
DELETE FUNCIONARIO;
No entanto o comando mais utilizado para limpar a tabela seria:
TRUNCATE TABLE FUNCIONARIO;
Funcões
SQL Server String Functions
Function Description
ASCII Returns the ASCII value for the specific character
CHAR Returns the character based on the ASCII code
CHARINDEX Returns the position of a substring in a string
CONCAT Adds two or more strings together
Concat with Adds two or more strings together
+
CONCAT_WS Adds two or more strings together with a separator
DATALENGTH Returns the number of bytes used to represent an
expression
DIFFERENCE Compares two SOUNDEX values, and returns an integer
value
FORMAT Formats a value with the specified format
LEFT Extracts a number of characters from a string (starting from
left)
LEN Returns the length of a string
LOWER Converts a string to lower-case
LTRIM Removes leading spaces from a string
NCHAR Returns the Unicode character based on the number code
PATINDEX Returns the position of a pattern in a string
QUOTENAME Returns a Unicode string with delimiters added to make the
string a valid SQL Server delimited identifier
REPLACE Replaces all occurrences of a substring within a string, with
a new substring
REPLICATE Repeats a string a specified number of times
REVERSE Reverses a string and returns the result
RIGHT Extracts a number of characters from a string (starting from
right)
RTRIM Removes trailing spaces from a string
SOUNDEX Returns a four-character code to evaluate the similarity of
two strings
SPACE Returns a string of the specified number of space characters
STR Returns a number as string
STUFF Deletes a part of a string and then inserts another part into
the string, starting at a specified position
SUBSTRING Extracts some characters from a string
TRANSLATE Returns the string from the first argument after the
characters specified in the second argument are translated
into the characters specified in the third argument.
TRIM Removes leading and trailing spaces (or other specified
characters) from a string
UNICODE Returns the Unicode value for the first character of the input
expression
UPPER Converts a string to upper-case
SQL Server Math/Numeric Functions
Function Description
ABS Returns the absolute value of a number
ACOS Returns the arc cosine of a number
ASIN Returns the arc sine of a number
ATAN Returns the arc tangent of a number
ATN2 Returns the arc tangent of two numbers
AVG Returns the average value of an expression
CEILING Returns the smallest integer value that is >= a number
COUNT Returns the number of records returned by a select query
COS Returns the cosine of a number
COT Returns the cotangent of a number
DEGREES Converts a value in radians to degrees
EXP Returns e raised to the power of a specified number
FLOOR Returns the largest integer value that is <= to a number
LOG Returns the natural logarithm of a number, or the logarithm
of a number to a specified base
LOG10 Returns the natural logarithm of a number to base 10
MAX Returns the maximum value in a set of values
MIN Returns the minimum value in a set of values
PI Returns the value of PI
POWER Returns the value of a number raised to the power of
another number
RADIANS Converts a degree value into radians
RAND Returns a random number
ROUND Rounds a number to a specified number of decimal places
SIGN Returns the sign of a number
SIN Returns the sine of a number
SQRT Returns the square root of a number
SQUARE Returns the square of a number
SUM Calculates the sum of a set of values
TAN Returns the tangent of a number
SQL Server Date Functions
Function Description
CURRENT_TI Returns the current date and time
MESTAMP
DATEADD Adds a time/date interval to a date and then returns the
date
DATEDIFF Returns the difference between two dates
DATEFROMP Returns a date from the specified parts (year, month, and
ARTS day values)
DATENAME Returns a specified part of a date (as string)
DATEPART Returns a specified part of a date (as integer)
DAY Returns the day of the month for a specified date
GETDATE Returns the current database system date and time
GETUTCDATE Returns the current database system UTC date and time
ISDATE Checks an expression and returns 1 if it is a valid date,
otherwise 0
MONTH Returns the month part for a specified date (a number from
1 to 12)
SYSDATETIM Returns the date and time of the SQL Server
E
YEAR Returns the year part for a specified date
SQL Server Advanced Functions
Function Description
CAST Converts a value (of any type) into a specified
datatype
COALESCE Returns the first non-null value in a list
CONVERT Converts a value (of any type) into a specified
datatype
CURRENT_USER Returns the name of the current user in the SQL
Server database
IIF Returns a value if a condition is TRUE, or another value
if a condition is FALSE
ISNULL Return a specified value if the expression is NULL,
otherwise return the expression
ISNUMERIC Tests whether an expression is numeric
NULLIF Returns NULL if two expressions are equal
SESSION_USER Returns the name of the current user in the SQL
Server database
SESSIONPROPERT Returns the session settings for a specified option
Y
SYSTEM_USER Returns the login name for the current user
USER_NAME Returns the database user name based on the
specified id
Índices
O índice ou INDEX é usado para criar tabelas específicas para que os database search
engines retirem a informação de forma muito mais rápida, criando um apontador para os
dados da tabela.
O índice pode ser criado de forma única ou através de um grupo de colunas de uma
tabela. Quando o índice é criado, é atribuído um ROWID para cada linha antes de
manipular os dados.
São especialmente utilizados para manipular base de dados de grandes dimensões.
Por exemplo, se deseja fazer referência a todas as páginas de um livro que falam de um
determinado assunto, cria um índice que lista todos os tópicos por ordem alfabética e
posteriormente é encaminhado para um ou mais números de página específicos.
Um índice ajuda a acelerar consultas SELECT e WHERE, mas retarda a entrada de
dados, como UPDATE e declarações INSERT.
Os índices podem ser criados ou eliminados sem efeito nos dados.
A criação de um índice envolve a declaração CREATE INDEX, que permite que nomeie o
índice, para especificar a tabela e qual a coluna ou colunas para indexar, e para indicar se
o índice está por ordem ascendente ou descendente.
Os índices também podem ser únicos, semelhante à restrição UNIQUE, na medida em que
o índice impede entradas duplicadas na coluna ou combinação de colunas em que há um
índice.
Sintaxe básica:
CREATE INDEX index_name
ON table_name ( column1, column2.....);
Exemplo:
Imaginando que temos a seguinte tabela:
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR (20) NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2),
PRIMARY KEY (ID)
);
E queremos criar um índice das idades para otimizar uma pesquisa sobre uma
determinada idade faríamos:
CREATE INDEX idx_age
ON CUSTOMERS ( AGE );
Para eliminar um índice:
DROP INDEX index_name ON tab_name;
Transações
Uma transação é uma única unidade de trabalho. Se uma transação tiver êxito,
todas as modificações de dados feitas durante a transação estarão confirmadas e
se tornarão parte permanente do banco de dados. Se uma transação encontrar
erros e precisar ser cancelada ou revertida, todas as modificações de dados serão
apagadas ou seja ou faz tudo ou não faz nada.
É importante controlar as transações para garantir a integridade dos dados e lidar com
erros da base de dados.
Propriedades das Transações:
As transações possuem as seguintes quatro propriedades padrão, geralmente referidas
pelo acrônimo ACID:
● Atomicidade: garante que todas as operações dentro da unidade de trabalho sejam
concluídas com sucesso; caso contrário, a transação é interrompida no ponto de
falha e as operações anteriores são revertidas para o estado anterior.
● Consistência: garante que a base de dados altere adequadamente os estados após
uma transação comprometida com sucesso.
● Isolamento: permite que as transações funcionem independentemente e
transparentes entre si.
● Durabilidade: garante que o resultado ou o efeito de uma transação comprometida
persista em caso de falha do sistema.
O COMMIT TRANSACTION
O Comando COMMIT é o comando usado para salvar as alterações invocadas por uma
transação para a base de dados.
O comando COMMIT salva todas as transações na base de dados desde o último
comando COMMIT ou ROLLBACK.
Estes comandos são usados apenas com os comandos DML INSERT, UPDATE e
DELETE.
Não podem ser usados ao criar ou eliminar tabelas porque essas operações são
automaticamente realizadas na base de dados.
O comando ROLLBACK
O comando ROLLBACK é o comando transacional usado para desfazer transações que
ainda não foram guardadas na base de dados.
O comando ROLLBACK só pode ser usado para desfazer transações desde o último
COMMIT ou ROLLBACK
Exemplo @@ERROR:
BEGIN TRANSACTION
UPDATE FROM TbContas
SET NuSaldo= 10.000
WHERE NuSaldo < 50
IF @@ERROR = 0
COMMIT
ELSE
ROLLBACK
END
As vezes as mensagens de erro não são muito claras para os utilizadores e pensando
nisso, procurando ajudar os desenvolvedores e administradores de sistema foi introduzido
no SQL a função ‘RAISERROR’, que permite personalizar as mensagens de erro
facilitando algum suporte.
Exemplo RAISERROR
BEGIN TRANSACTION
UPDATE FROM TbContas
SET NuSaldo= 10.000
WHERE NuSaldo < 50
IF @@ERROR = 0
COMMIT
ELSE
ROLLBACK
RAISERROR(5001,16,1,’ERRO NA ALTERACAO DO SALDO DA TABELA TBCONTA’) END
Privilégios e controlo de acessos
Os comandos T-sql GRANT e REVOKE são utilizados para atribuir e retirar permissões,
respectivamente, na utilização de recursos de tabelas.
GRANT = utilizado para atribuir permissão ao utilizador, para realizar uma operação;
REVOKE = remove a permissão GRANT.
Sintaxe:
GRANT privilege_name
ON object_name
TO {user_name |PUBLIC |role_name}
[WITH GRANT OPTION];
ou
GRANT { SELECT | EXECUTE } ON system_object TO principal
Exemplos:
USE base_dados_xpto;
GRANT SELECT ON sql_logins TO Ana1;
GRANT VIEW SERVER STATE to Ana1;
GRANT ALL ON empregados TO joao;
GRANT SELECT ON empregrados TO public;
Revoke
Remove uma permissão concedida ou negada anteriormente.
Sintaxe
REVOKE privilege_name
ON object_name
FROM {user_name |PUBLIC |role_name}
Exemplos:
REVOKE DELETE ON empregados FROM anderson;
REVOKE SELECT ON empregados FROM public;
Criar logins
A instrução CREATE LOGIN cria uma identidade usada para se conectar a uma
instância do SQL Server. O Login é então mapeado para um utilizador da base de
dados (antes de criar um utilizador no SQL Server, deve primeiro criar um Login).
Existem quatro tipos de logins que podemos criar no SQL Server:
● usando autenticação do Windows.
● usando a Autenticação do SQL Server.
● um Login de um certificado.
● um Login a partir de uma chave assimétrica.
Sintaxe
A sintaxe da instrução CREATE LOGIN usando a Autenticação do Windows é:
CREATE LOGIN [domain_name\login_name]
FROM WINDOWS
[ WITH DEFAULT_DATABASE = database_name
| DEFAULT_LANGUAGE = language_name ];
A sintaxe da instrução CREATE LOGIN usando SQL Server Authentication é:
CREATE LOGIN login_name
WITH PASSWORD = { 'password' | hashed_password HASHED } [ MUST_CHANGE ]
[ , SID = sid_value
| DEFAULT_DATABASE = database_name
| DEFAULT_LANGUAGE = language_name
| CHECK_EXPIRATION = { ON | OFF }
| CHECK_POLICY = { ON | OFF }
| CREDENTIAL = credential_name ];
A sintaxe da instrução CREATE LOGIN usando um certificado:
CREATE LOGIN login_name
FROM CERTIFICATE certificate_name;
A sintaxe da instrução CREATE LOGIN usando uma asymmetric key é:
CREATE LOGIN login_name
FROM ASYMMETRIC KEY asym_key_name;
Exemplos:
CREATE LOGIN joana
WITH PASSWORD = 'pwd123';
CREATE LOGIN joana
WITH PASSWORD = 'pwd123' MUST_CHANGE,
CHECK_EXPIRATION = ON;
CREATE LOGIN joana
FROM CERTIFICATE certificate1;
CREATE LOGIN joana
FROM ASYMMETRIC KEY asym_key1;
Disable Login
ALTER LOGIN joana DISABLE;
Enable Login
ALTER LOGIN joana ENABLE;
Unlock Login
ALTER LOGIN joana
WITH PASSWORD = 'tictac'
UNLOCK;
Rename Login
ALTER LOGIN joana
WITH NAME = checkyourmath;
Delete Login
DROP LOGIN login_name;
Criar utilizadores
A instrução CREATE USER cria um utilizador da base de dados para fazer login no
SQL Server. Um utilizador é mapeado para um Login, que é uma identidade usada
para se conectar a uma instância do SQL Server.
Sintaxe
A sintaxe da instrução CREATE USER no SQL Server (Transact-SQL) é:
CREATE USER user_name FOR LOGIN login_name;
Exemplo:
CREATE USER joana FOR LOGIN joana;
Change Password
ALTER LOGIN joana
WITH PASSWORD = 'tictac';
Change Password and Force Change
ALTER LOGIN joana
WITH PASSWORD = 'tictac' MUST_CHANGE,
CHECK_EXPIRATION = ON;
Delete User
DROP USER user_name;
Resumo Sintaxe:
SQL SELECT Statement:
SELECT column1, column2....columnN
FROM table_name;
SQL DISTINCT Clause:
SELECT DISTINCT column1, column2....columnN
FROM table_name;
SQL WHERE Clause:
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITION;
SQL AND/OR Clause:
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITION-1 {AND|OR} CONDITION-2;
SQL IN Clause:
SELECT column1, column2....columnN
FROM table_name
WHERE column_name IN (val-1, val-2,...val-N);
SQL BETWEEN Clause:
SELECT column1, column2....columnN
FROM table_name
WHERE column_name BETWEEN val-1 AND val-2;
SQL LIKE Clause:
SELECT column1, column2....columnN
FROM table_name
WHERE column_name LIKE { PATTERN };
SQL ORDER BY Clause:
SELECT column1, column2....columnN
FROM table_name
WHERE CONDITION
ORDER BY column_name {ASC|DESC};
SQL GROUP BY Clause:
SELECT SUM(column_name)
FROM table_name
WHERE CONDITION
GROUP BY column_name;
SQL COUNT Clause:
SELECT COUNT(column_name)
FROM table_name
WHERE CONDITION;
SQL HAVING Clause:
SELECT SUM(column_name)
FROM table_name
WHERE CONDITION
GROUP BY column_name
HAVING (arithematic function condition);
SQL CREATE TABLE Statement:
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns ) );
SQL DROP TABLE Statement:
DROP TABLE table_name;
SQL CREATE INDEX Statement:
CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);
SQL DROP INDEX Statement:
ALTER TABLE table_name
DROP INDEX index_name;
SQL DESC Statement:
DESC table_name;
SQL TRUNCATE TABLE Statement:
TRUNCATE TABLE table_name;
SQL ALTER TABLE Statement:
ALTER TABLE table_name {ADD|DROP|MODIFY} column_name {data_ype};
SQL ALTER TABLE Statement (Rename):
ALTER TABLE table_name RENAME TO new_table_name;
SQL INSERT INTO Statement:
INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);
SQL UPDATE Statement:
UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE CONDITION ];
SQL DELETE Statement:
DELETE FROM table_name
WHERE {CONDITION};
SQL CREATE DATABASE Statement:
CREATE DATABASE database_name;
SQL DROP DATABASE Statement:
DROP DATABASE database_name;
SQL USE Statement:
USE DATABASE database_name;
SQL COMMIT Statement:
COMMIT;
SQL ROLLBACK Statement:
ROLLBACK