Foreign Key with Set Null in SQL Server
The following tutorial will explain the Foreign Key foreign key with the Set Null On Delete constraint in SQL Server.
The following tutorial will explain the Foreign Key foreign key with the Set Null On Delete constraint in SQL Server.
What is the foreign key with Set NULL on Delete in SQL Server?
Foreign keys are bound to set Null on Delete meaning that when a record in the parent table is deleted, the corresponding record in the child table in the foreign key value field will be set to NULL. The table written in the child table will not be deleted from SQL Server.
Foreign keys provided that the NULL value when deleted can be created with the CREATE TABLE or ALTER TABLE statement.
Create foreign key with constraint to set NULL value when deleted with CREATE TABLE statement
Syntax
CREATETABLE bang_con
(
cot1 kieudulieu [ NULL | NOT NULL ],
cot2 kieudulieu [ NULL | NOT NULL ],
…
CONSTRAINT fk_ten
FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n)
ON DELETE SET NULL
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);
bang_con
The name of the child table you want to create.
cot1, cot2
The column you want to create in the table. Each column has 1 data type, must be specified to contain NULL or NOT NULL values, otherwise default is NULL.
Data types in SQL Server
fk_ten
The name of the foreign key constraint to create.
cot_con1, cot_con2, . cot_con_n
The column in bang_con wants to refer to the primary key in bang_me.
bang_me
The name of the parent table contains the primary key used in bang_con.
cot_me1, cot_me2, . cot_me_n
The column that makes up the primary key in bang_me. Foreign keys will create constraints between data and columns cot_con1, cot_con2, . cot_con_n in bang_con.
ON DELETE SET NULL
The data in the child table will be set to NULL when the data in the parent table is deleted. Sub-data is not deleted.
ON UPDATE
Option. Indicates what to do with the child data when the parent data is updated. There are options NO ACTION, CASCADE, SET NULL and SET DEFAULT.
NO ACTION
Use with ON DELETE or ON UPDATE, ie do nothing with child data when parent data is deleted or updated.
CASCADE
Use with ON DELETE or ON UPDATE, meaning that the child data is deleted or updated when the parent data is deleted or updated.
SET NULL
Use with ON DELETE or ON UPDATE, meaning that the child data is set to NULL when the parent data is deleted or updated.
SET DEFAULT
Use with ON DELETE or ON UPDATE, meaning that the child data is set to the default value when the parent data is deleted or updated.
For example
CREATE TABLE sanpham
( id_sanpham INT PRIMARY KEY,
ten_sanpham VARCHAR(50) NOT NULL,
phan_loai VARCHAR(25)
);
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);
In this example, we created the parent table, sanpham, with the primary key including the information field id_sanpham. Then there is a child table named hangtonkho with a foreign key with deletion constraint. The CREATE TABLE statement creates a foreign key on the hangtonkho table named fk_htk_id_sanpham. The foreign key forms the relationship between the id_sanpham column in the hangtonkho table and id_sanpham in the sanpham table.
This foreign key is specified ON DELETE SET NULL to tell SQL Server that it is necessary to set the corresponding record value in the child table to NULL when the data in the parent table is deleted. In this example, when id_sanpham is deleted from the table, the corresponding record in the hangtonkho table using id_sanpham will be set to NULL.
It is important to note that because the id_sanpham column in the hangtonkho table will be set to NULL, it is necessary to ensure that this column is allowed to receive NULL values. If set to NOT NULL when created with CREATEA, the following error will be encountered.
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT NOT NULL,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);
Msg 1761, Level 16, State 0, Line 1
Cannot create the foreign key 'fk_htk_id_sanpham' with the SET NULL referential action, because one or more referencing columns are not nullable.
Msg 1750, Level 16, State 0, Line 1
Could
thể tạo constraint hoặc chỉ mục. Xem lỗi trước.
Make sure you define the id_sanpham column in the hangtonkho table to get NULL values as shown below.
CREATE TABLE hangtonkho
( id_hangtonkho INT PRIMARY KEY,
id_sanpham INT,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE SET NULL
);
Comma
nd (s) completed successfully.
Creating a foreign key with the constraint sets the NULL value when deleting with the ALTER TABLE statement
Syntax
ALTER TABLE state_con
ADD CONSTRAINT fk_ten
FOREIGN KEY (cot_con1, cot_con2, . cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, . cot_me_n)
ON DELETE SET NULL;
bang_con
The name of the child table you want to create.
fk_ten
The name of the foreign key constraint to create.
cot_con1, cot_con2, . cot_con_n
The column in bang_con wants to refer to the primary key in bang_me.
bang_me
The name of the parent table contains the primary key used in bang_con.
cot_me1, cot_me2, . cot_me_n
The column that makes up the primary key in bang_me. Foreign keys will create constraints between data and columns cot_con1, cot_con2, . cot_con_n in bang_con.
ON DELETE SET NULL
Specifies that the child data will be set to NULL value when the data in the parent table is deleted. Data in the child table will not be deleted.
For example
ALTER TABLE hangtonkho
ADD CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
ON DELETE
SET NULL;
In this example, the hangtonkho sub table is created with a foreign key named fk_htk_id_sanpham, referring to the parent table sanpham based on id_sanpham.
Specifying ON DELETE SET NULL for SQL Server to understand that when id_sanpham data in the parent table is deleted, the corresponding record in the hangtonkho sub table will be set to NULL value.
Previous lesson: Foreign Key (Cascade Delete) in SQL Server
The following article: Delete the foreign key in SQL Server
You should read it
- Foreign Key foreign key in SQL Server
- Foreign Key with Cascade Delete in SQL Server
- Delete the foreign key in SQL Server
- Activate foreign keys in SQL Server
- IS NOT NULL condition in SQL Server
- Disable foreign key in SQL Server
- DELETE command in SQL Server
- DELETE TOP command in SQL Server
- FUNCTION (Function) in SQL Server
- How to decentralize users in MS SQL Server
- VIEW in SQL Server
- PROCEDURE (Procedure) in SQL Server
Maybe you are interested
Invite to download the space theme wallpapers on the NASA XS inspired by NASA Norway will build the first tunnel for ships 20 pictures of super beautiful splendor around the world on November 14 'Aliens will arrive on Earth in September 2017' - Nostradamus' prediction How hot is the planet of Mercury? Reveal the best place to find life on Mars