Olá galera o/

Continuando nossa série de postagens sobre as restrições de domínio vulgo constraints, hoje abordaremos sobre a constraint DEFAULT.

Let’s go para nosso quinto episódio Guys!!!

O que é a Constraint DEFAULT?

Restrição que colocar um valor padrão na coluna caso a mesma não seja preenchida no momento do INSERT.

Obs.1: Quando uma coluna recebe a restrição Default, a declaração da coluna no momento do insert não é obrigatória.

Obs.2: Em projetos de BI/Big Data utilizamos a restrição default para criar colunas de controle das informações, como, por exemplo, o momento que um registro foi inserido ou atualizado na tabela.

Boa prática!

Sempre que for definir um valor DEFAULT para uma coluna, tente sempre colocar um valor que faça sentido com a regra de negócio que você está trabalhando.

Para facilitar o entendimento, unificaremos a nomenclatura tudo que for referente a atributo, coluna ou campo, utilizaremos a palavra coluna (Column).

Praticando a criação da constraint Default!

A partir de agora, começaremos a praticar a criação da constraint Default.

1 – Criando tabela com Default – Definição no create table

1.1 – Criaremos uma tabela chamada TB_DEFAULT com 4 colunas. Percebam que, aplicamos a constraint nas colunas LETRA e DT, ou seja, no momento que estivermos inserindo registros na tabela e não declaramos as mesmas no comando do INSERT, os valores DEFAULT serão utilizados como valores padrões das colunas. Em resumo, caso eu não insira dados na coluna LETRA o valor padrão sempre será A, para a coluna DT sempre será a data atual do servidor que está executando a consulta.

Sintaxe da atribução do DEFAULT:

Sem nome da constraint:
– coluna TIPO DEFAULT (VALOR)

Com nome da constraint:
– coluna TIPO CONSTRAINT nome_constraint DEFAULT (VALOR)

CREATE TABLE TB_DEFAULT
(
ID SMALLINT PRIMARY KEY IDENTITY,
NOME VARCHAR (10),
LETRA CHAR(1) DEFAULT ('A'),
DT DATE CONSTRAINT DF_DATA DEFAULT (GETDATE())
)

1.2 – Iremos inserir 9 registros nas tabelas TB_DEFAULT. Simularemos 3 situações:

1º – Iremos inserir apenas valores nas colunas Nome e Letra, deixando a constraint preencher o valor da coluna DT com a data do sistema.

2º – Iremos inserir apenas valores nas colunas Nome e DT, deixando a constraint preencher o valor da coluna LETRA com o valor A.

3º – Iremos inserir apenas valores na coluna Nome, deixando a constraint preencher o valor da coluna LETRA e DT, ou seja, letra A e a data do sistema.

INSERT INTO TB_DEFAULT (NOME, LETRA)
VALUES 
	('SONIC','S'),
	('TAILS','T'),
	('KNUCKLES','K')

SELECT * FROM TB_DEFAULT
INSERT INTO TB_DEFAULT (NOME,DT)
VALUES 
	('GOKU','2022-12-10'),
	('VEGETA','2022-12-11'),
	('BROLY','2022-12-12')

SELECT * FROM TB_DEFAULT
INSERT INTO TB_DEFAULT (NOME)
VALUES 
	('AZURE'),
	('AWS'),
	('GCP')

SELECT * FROM TB_DEFAULT

2 – Criando tabela com Default – Colunas de controle com Default

2.1 – Criaremos uma tabela chamada TB_DEFAULT2 com 5 colunas. Aplicaremos a constraint na coluna DT_INSERT, ou seja, toda vez que um registro for inserido ele atribuirá a data do sistema. Também possuímos uma coluna chamada DT_UPDATE, para sabermos quando um registro já existente foi atualizado.

CREATE TABLE TB_DEFAULT2
(
ID CHAR(4) PRIMARY KEY,
NOME VARCHAR(20) ,
VALOR SMALLMONEY,
DT_INSERT DATETIME CONSTRAINT DF_DT_INSERT DEFAULT (GETDATE()),
DT_UPDATE DATETIME 
)

2.2 – Iremos inserir 5 registros na tabela. Na primeira parte do INSERT, simularemos que os registros foram adicionados no dia 11 de dezembro, informei os valores da coluna DT_INSERT manualmente. Na segunda parte, simularemos que os registros foram inseridos utilizando o DEFAULT, ou seja, o valor do DT_INSERT será dia 12 de dezembro.

Fiquem atentos que no primeiro INSERT declaramos a coluna DT_INSERT no comando. No segundo INSERT não atribuímos a coluna no comando.

INSERT INTO TB_DEFAULT2 (ID, NOME,VALOR, DT_INSERT)
VALUES 
	('V001', 'MARIA', 10.5, '2022-12-11'),
	('V002', 'MARIANA', 20.99, '2022-12-11'),
	('V003', 'MARIELE', 30.78, '2022-12-11')

INSERT INTO TB_DEFAULT2 (ID, NOME,VALOR)
VALUES 
	('V004', 'MARCELA', 40.57),
	('V005', 'MARCIA', 50.1)

SELECT *
FROM TB_DEFAULT2

2.3 – Realizaremos um UPDATE no registro V001, atualizando a coluna VALOR para o seu valor atual (10.50) multiplicando por 2, além disso, também atribuiremos para a coluna DT_UPDATE o valor da data do sistema (GETDATE()). Após a execução do comando consultaremos a tabela.

Percebam que, com as colunas de controle DT_INSERT e DT_UPDATE possuímos uma maneira de saber quanto um registro novo entrou na tabela ou se um registro existente foi atualizado.

UPDATE TB_DEFAULT2
SET VALOR = VALOR * 2,
	DT_UPDATE = GETDATE()
WHERE ID = 'V001'


SELECT *
FROM TB_DEFAULT2

2.4 – Vamos criar uma consulta para sabermos quais foram os registros inseridos ou atualizados hoje (2022-12-12).

Para os registros novos, teremos os IDs V004 e V005.
Para os registros atualizados, ou seja, com a coluna DT_UPDATE preenchida teremos o ID V001.

Este processo é bastante utilizado no BI (Business Intelligence) e no Big Data para a realização de cargas incrementais.

SELECT * FROM TB_DEFAULT2
WHERE FORMAT(DT_INSERT, 'yyyy-MM-dd') = FORMAT (GETDATE(),'yyyy-MM-dd')
OR FORMAT(DT_UPDATE, 'yyyy-MM-dd') = FORMAT (GETDATE(),'yyyy-MM-dd')

3 – Adicionando Default depois de uma tabela já criada.

3.1 – Adicionaremos uma constraint em uma tabela já existente. Simularemos 2 cenários:

1º – Adicionar a constraint a uma coluna já existente. Realizaremos o alter table na tabela TB_DEFAULT2 adicionando uma constraint com nome de DF_VALOR (O nome de constraint não é obrigatório, estou adicionando apenas como boa prática) atribuindo o valor 0 (zero) para (FOR) a coluna VALOR. Em resumo, toda vez que realizarmos um INSERT e não informarmos a coluna VALOR, o valor padrão sempre será 0.

2º – Adicionar uma nova coluna com a constraint já aplicada. Realizaremos o alter table na tabela TB_DEFAULT2 adicionando uma nova coluna chamada NUMERO do tipo TINYINT informando que o valor DEFAULT é 0. Em resumo, toda vez que realizarmos um INSERT e não informarmos a coluna NUMERO, o valor padrão sempre será 0.

ALTER TABLE TB_DEFAULT2
ADD CONSTRAINT DF_VALOR
DEFAULT 0 FOR VALOR

ALTER TABLE TB_DEFAULT2
ADD NUMERO TINYINT DEFAULT (0)

3.2 – Para apagarmos a constraint DEFAULT de uma tabela, é necessário realizar o alter table na tabela TB_DEFAULT2 colocando a sintaxe DROP Constraint e o nome da constraint. Lembrando que, caso você tenha definido o nome da constraint, informe o nome da mesma, porém, em casos que o próprio SGBD cria o nome da constraint, informe o mesmo no comando de drop constraint.

O primeiro alter table remove uma constraint com o nome definido pelo desenvolvedor (EU). Apagaremos a constraint DF_VALOR que está atribuída a coluna VALOR, como mostrado no item 3.1.

O segundo alter table remove uma constraint com o nome definido pelo SGBD (SQL Server). Apagaremos a constraint DF__TB_DEFAUL__NUMER__55009F39 que está atribuída a coluna NUMERO, como mostrado no item 3.1.

ALTER TABLE TB_DEFAULT2
DROP CONSTRAINT [DF_VALOR];

ALTER TABLE TB_DEFAULT2
DROP CONSTRAINT [DF__TB_DEFAUL__NUMER__55009F39];

3 – Considerações Finais

No episódio 05 aprendemos um pouco sobre a constraint DEFAULT, como criar uma tabela com a mesma, como adicionar em uma tabela já existente, e como podemos aplicá-la para colunas de controle de uma tabela para ambientes transacionais e de big data.

Este é o quinto de 6 posts sobre as constraints, fiquem atentos aos próximos episódios dessa série.

Espero que tenham gostado pessoal, boa leitura e bons estudos!

Quem quiser mandar comentários, sugestões, críticas ou dicas complementares, fiquem a vontade, pois feedbacks positivos ou negativos engradecem meu conhecimento para poder melhorar as postagens para vocês.

Até a próxima o/

Acessem nossas Redes Sociais: