Você está na página 1de 6

SQL Server: chaves estrangeiras com conjunto nulo na exclusão

Este tutorial do SQL Server explica como usar chaves estrangeiras com "set null on delete" no SQL Server com sintaxe e exemplos.

O que é uma chave estrangeira com "Set NULL on delete" no SQL Server?
Uma chave estrangeira com "definir nulo ao excluir" significa que, se um registro na tabela pai for excluído, os registros correspondentes na tabela filha terão os campos
de chave estrangeira definidos como NULL. Os registros na tabela filho não serão excluídos no SQL Server.

Uma chave estrangeira com conjunto nulo na exclusão pode ser criada usando uma instrução CREATE TABLE ou uma instrução ALTER TABLE.

Criar chave estrangeira com conjunto nulo na exclusão - usando a instrução CREATE TABLE

Sintaxe
A sintaxe para criar uma chave estrangeira com conjunto nulo ao excluir usando uma instrução CREATE TABLE no SQL Server (Transact-SQL) é:

CREATE TABLE child_table


(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...

CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
ON DELETE SET NULL
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);

tabela_criança
O nome da tabela filho que você deseja criar.

coluna1, coluna2
As colunas que você deseja criar na tabela. Cada coluna deve ter um tipo de dados. A coluna deve ser definida como NULL ou NOT NULL e se esse valor for deixado
em branco, o banco de dados assume NULL como padrão.

fk_name
O nome da restrição de chave estrangeira que você deseja criar.

criança_col1, criança_col2, ... criança_col_n


As colunas em child_table que farão referência a uma chave primária em parent_table .

parent_table
O nome da tabela pai cuja chave primária será usada em child_table .

parent_col1, parent_col2, ... parent_col3


As colunas que compõem a chave primária em parent_table . A chave estrangeira imporá um link entre esses dados e as colunas child_col1, child_col2, ...
child_col_n na child_table .

ON DELETE SET NULL


Ele especifica que os dados do filho são definidos como NULL quando os dados do pai são excluídos. Os dados da criança NÃO são excluídos.

EM ATUALIZAÇÃO
Opcional. Ele especifica o que fazer com os dados do filho quando os dados do pai são atualizados. Você tem as opções de NO ACTION, CASCADE, SET NULL ou
SET DEFAULT.

SEM AÇÃO
É usado em conjunto com ON DELETE ou ON UPDATE. Isso significa que nenhuma ação é executada com os dados do filho quando os dados do pai são excluídos
ou atualizados.

CASCATA
É usado em conjunto com ON DELETE ou ON UPDATE. Isso significa que os dados do filho são excluídos ou atualizados quando os dados do pai são excluídos ou
atualizados.

DEFINIR NULO
É usado em conjunto com ON DELETE ou ON UPDATE. Isso significa que os dados do filho são definidos como NULL quando os dados do pai são excluídos ou
atualizados.

CONJUNTO PADRÃO
É usado em conjunto com ON DELETE ou ON UPDATE. Isso significa que os dados do filho são definidos com seus valores padrão quando os dados do pai são
excluídos ou atualizados.

Exemplo
Vejamos um exemplo de como criar uma chave estrangeira com set null on delete no SQL Server (Transact-SQL) usando a instrução CREATE TABLE.

Por exemplo:

CREATE TABLE products


( product_id INT PRIMARY KEY,
product_name VARCHAR(50) NOT NULL,
category VARCHAR(25)
);

CREATE TABLE inventory


( inventory_id INT PRIMARY KEY,
product_id INT,
quantity INT,
min_level INT,
max_level INT,
CONSTRAINT fk_inv_product_id
FOREIGN KEY (product_id)
REFERENCES products (product_id)
ON DELETE SET NULL
);

Neste exemplo de chave estrangeira, criamos nossa tabela pai como a tabela de produtos . A tabela products possui uma chave primária que consiste no campo
product_id .

Em seguida, criamos uma segunda tabela chamada inventário que será a tabela filho neste exemplo de chave estrangeira. Usamos a instrução CREATE TABLE para
criar uma chave estrangeira na tabela de inventário chamada fk_inv_product_id . A chave estrangeira estabelece um relacionamento entre a coluna product_id na tabela
de inventário e a coluna product_id na tabela de produtos .

Para esta chave estrangeira, especificamos a cláusula ON DELETE SET NULL que informa ao SQL Server para definir os registros correspondentes na tabela filho
como NULL quando os dados na tabela pai são excluídos. Portanto, neste exemplo, se um valor de product_id for excluído da tabela de produtos , os registros
correspondentes na tabela de inventário que usam esse product_id terão o product_id definido como NULL.

Agora, uma coisa importante sobre como configurar essa chave estrangeira!!! Como essa chave estrangeira definirá o campo product_id como NULL ao excluir na
tabela de inventário , você precisa se certificar de que configurou a coluna product_id na tabela filho para uma coluna anulável. Se você definir a coluna como NOT
NULL na instrução CREATE TABLE, receberá a seguinte mensagem de erro:
CREATE TABLE inventory
( inventory_id INT PRIMARY KEY,
product_id INT NOT NULL,
quantity INT,
min_level INT,
max_level INT,
CONSTRAINT fk_inv_product_id
FOREIGN KEY (product_id)
REFERENCES products (product_id)
ON DELETE SET NULL
);

Msg 1761, Level 16, State 0, Line 1


Cannot create the foreign key "fk_inv_product_id" with the SET NULL referential action, because one or more referencing columns are not
nullable.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint or index. See previous errors.

Portanto, certifique-se de definir seu product_id na tabela de inventário como um campo anulável da seguinte forma, para que o SQL Server possa definir a coluna como
NULL quando a restrição de chave estrangeira precisar.

CREATE TABLE inventory


( inventory_id INT PRIMARY KEY,
product_id INT,
quantity INT,
min_level INT,
max_level INT,
CONSTRAINT fk_inv_product_id
FOREIGN KEY (product_id)
REFERENCES products (product_id)
ON DELETE SET NULL
);

Command(s) completed successfully.


Crie uma chave estrangeira com conjunto nulo na exclusão - usando a instrução ALTER TABLE

Sintaxe
A sintaxe para criar uma chave estrangeira com conjunto nulo ao excluir usando uma instrução ALTER TABLE no SQL Server (Transact-SQL) é:

ALTER TABLE child_table


ADD CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
ON DELETE SET NULL;

tabela_criança
O nome da tabela filho que você deseja modificar.

fk_name
O nome da restrição de chave estrangeira que você deseja criar.

criança_col1, criança_col2, ... criança_col_n


As colunas em child_table que farão referência a uma chave primária em parent_table .

parent_table
O nome da tabela pai cuja chave primária será usada em child_table .

parent_col1, parent_col2, ... parent_col3


As colunas que compõem a chave primária em parent_table . A chave estrangeira imporá um link entre esses dados e as colunas child_col1, child_col2, ...
child_col_n na child_table .

ON DELETE SET NULL


Especifica que os dados do filho são definidos como NULL quando os dados do pai são excluídos. Os dados da criança NÃO são excluídos.

Exemplo
Vejamos um exemplo de como criar uma chave estrangeira com set null on delete no SQL Server (Transact-SQL) usando a instrução ALTER TABLE.

Por exemplo:
ALTER TABLE inventory
ADD CONSTRAINT fk_inv_product_id
FOREIGN KEY (product_id)
REFERENCES products (product_id)
ON DELETE SET NULL;

Neste exemplo de chave estrangeira, criamos uma chave estrangeira na tabela de inventário chamada fk_inv_product_id que faz referência à tabela de produtos com
base no campo product_id .

Para esta chave estrangeira, especificamos a cláusula ON DELETE SET NULL que instrui o SQL Server a atualizar os registros correspondentes na tabela filho para
NULL quando os dados na tabela pai são excluídos. Portanto, neste exemplo, se um valor de product_id for excluído da tabela de produtos , os registros
correspondentes na tabela de inventário que usam esse product_id terão a coluna product_id definida como NULL.

Copyright TechOnTheNet.com

Você também pode gostar