Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL Server

Foreign Key foreign key ใน SQL Server

บทช่วยสอนนี้จะแนะนำวิธีใช้ Foreign Key foreign Key ใน SQL Server พร้อมไวยากรณ์และตัวอย่าง

คีย์นอกใน SQL Server คืออะไร

คีย์ต่างประเทศใช้เพื่อเพิ่มการอ้างอิงในฐานข้อมูล SQL Server คีย์นอกหมายความว่าค่าในตารางนี้ต้องปรากฏในตารางอื่น

ตารางอ้างอิงเรียกว่าตารางพาเรนต์ ในขณะที่ตารางที่มีคีย์นอกจะเรียกว่าตารางย่อย คีย์ต่างประเทศในตารางลูกมักจะอ้างถึงคีย์หลัก PRIMARY KEY ในตารางหลัก

คีย์ต่างประเทศสามารถสร้างได้ด้วยคำสั่ง CREATE TABLE หรือคำสั่ง ALTER TABLE

สร้างคีย์นอกโดยใช้คำสั่ง CREATE TABLE

ไวยากรณ์

 CREATE TABLE 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 { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]  [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] ); 

bang_con

ชื่อของตารางย่อยที่คุณต้องการสร้าง

cot1, cot2

คอลัมน์ที่คุณต้องการสร้างในตาราง แต่ละคอลัมน์มี 1 ประเภทข้อมูล ต้องระบุเพื่อให้มีค่า NULL หรือ NOT NULL มิฉะนั้น ค่าเริ่มต้นจะเป็น NULL

ประเภทข้อมูลใน SQL Server

fk_ten

ชื่อของข้อจำกัดคีย์ต่างประเทศที่จะสร้าง

cot_con1, cot_con2, . cot_con_n

คอลัมน์ใน bang_con ต้องการอ้างถึงคีย์หลักใน bang_me

bang_me

ชื่อของตารางหลักมีคีย์หลักที่ใช้ใน bang_con

cot_me1, cot_me2, . cot_me_n

คอลัมน์ที่ประกอบเป็นคีย์หลักใน bang_me Foreign Key จะสร้างข้อจำกัดระหว่าง data และคอลัมน์ cot_con1, cot_con2, . cot_con_n ใน bang_con

เปิดการลบ

ตัวเลือก ระบุว่าจะทำอย่างไรกับข้อมูลย่อยเมื่อข้อมูลหลักถูกลบ มีตัวเลือก NO ACTION, CASCADE, SET NULL และ SET DEFAULT

กำลังอัปเดต

ตัวเลือก ระบุว่าจะทำอย่างไรกับข้อมูลย่อยเมื่อมีการอัพเดตข้อมูลหลัก มีตัวเลือก NO ACTION, CASCADE, SET NULL และ SET DEFAULT

ไม่มีการดำเนินการ

ใช้กับ ON DELETE หรือ ON UPDATE นั่นคือไม่ทำอะไรกับข้อมูลลูกเมื่อข้อมูลหลักถูกลบหรืออัปเดต

CASCADE

ใช้กับ ON DELETE หรือ ON UPDATE ซึ่งหมายความว่าข้อมูลลูกจะถูกลบหรืออัปเดตเมื่อข้อมูลหลักถูกลบหรืออัปเดต

ตั้งค่าเป็นโมฆะ

ใช้กับ ON DELETE หรือ ON UPDATE หมายความว่าข้อมูลลูกถูกตั้งค่าเป็น NULL เมื่อข้อมูลหลักถูกลบหรืออัปเดต

ตั้งค่าเริ่มต้น

ใช้กับ ON DELETE หรือ ON UPDATE หมายความว่าข้อมูลลูกถูกตั้งค่าเป็นค่าเริ่มต้นเมื่อข้อมูลหลักถูกลบหรืออัปเดต

  1. Foreign Key (Cascade Delete) ใน SQL Server
  2. Foreign Key (Set Null) foreign key ใน SQL Server

ตัวอย่างเช่น

 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 NOT NULL,  soluong INT,  luong_toithieu INT,  luong_toida INT,  CONSTRAINT fk_htk_id_sanpham  FOREIGN KEY (id_sanpham)  REFERENCES sanpham (id_sanpham) ); 

ในตัวอย่างข้างต้น เราสร้างตารางพาเรนต์ ซึ่งเป็นตาราง sanpham ที่มีคีย์หลักประกอบด้วยฟิลด์ใน id_sanpham ถัดมาเป็นโต๊ะย่อยหางคอ

คำสั่ง CREATE TABLE ที่ใช้สร้าง foreign key ของตาราง hangtonkho มีชื่อว่า fk_htk_id_sanpham คีย์นอกจะสร้างลิงก์ระหว่างคอลัมน์ id_sanpham ในตาราง hangtonkho และ id_sanpham ในตาราง sanpham

ตัวอย่างด้านบนแสดงวิธีสร้างคีย์นอกที่ประกอบด้วย 1 คอลัมน์ ตอนนี้สร้างคีย์ต่างประเทศที่มีมากกว่า 1 ช่องข้อมูล

ตัวอย่างเช่น

 CREATE TABLE sanpham ( ten_sanpham VARCHAR(50) NOT NULL,  diadiem VARCHAR(50) NOT NULL,  phanloai VARCHAR(25)  CONSTRAINT sanpham_pk PRIMARY KEY (ten_sanpham, diadiem) ); 
 CREATE TABLE hangtonkho ( id_hangtonkho INT PRIMARY KEY,  ten_sanpham VARCHAR(50) NOT NULL,  diadiem VARCHAR(50) NOT NULL,  soluong INT,  luong_toithieu INT,  luong_toida INT,  CONSTRAINT fk_htk_sanpham  FOREIGN KEY (ten_sanpham, diadiem)  REFERENCES sanpham (ten_sanpham, diadiem) ); 

ในตัวอย่างนี้ ตารางพาเรนต์ sanpham มีคีย์หลักสองคอลัมน์ ten_sanpham และ didiem ตารางลูกและคีย์นอกต้องอ้างอิงถึงสองคอลัมน์นี้

สร้างคีย์นอกโดยใช้คำสั่ง ALTER TABLE

ไวยากรณ์

 ALTER TABLE bang_con ADD CONSTRAINT fk_ten  FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)  REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n); 

bang_con

ชื่อของตารางย่อยที่คุณต้องการสร้าง

fk_ten

ชื่อของข้อจำกัดคีย์ต่างประเทศที่จะสร้าง

cot_con1, cot_con2, . cot_con_n

คอลัมน์ใน bang_con ต้องการอ้างถึงคีย์หลักใน bang_me

bang_me

ชื่อของตารางหลักมีคีย์หลักที่ใช้ใน bang_con

cot_me1, cot_me2, . cot_me_n

คอลัมน์ที่ประกอบเป็นคีย์หลักใน bang_me Foreign Key จะสร้างข้อจำกัดระหว่าง data และคอลัมน์ cot_con1, cot_con2, . cot_con_n ใน bang_con

ตัวอย่างเช่น

 ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_id_sanpham  FOREIGN KEY (id_sanpham)  REFERENCES sanpham (id_sanpham); 

ตัวอย่างนี้สร้าง foreign key ในตาราง hangtonkho ชื่อ fk_htk_id_sanpham โดยอ้างอิงตาราง sanpham ตามคอลัมน์ id_sanpham

คุณสามารถสร้างคีย์นอกที่มีมากกว่า 1 ฟิลด์ดังตัวอย่างด้านล่าง

 ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_sanpham  FOREIGN KEY (ten_sanpham, diadiem)  REFERENCES sanpham (ten_sanpham, diadiem); 

ตัวอย่างด้านบนสร้างคีย์ต่างประเทศชื่อ fk_htk_sanpham สำหรับตาราง hangtonkho โดยอ้างอิงถึงแดชบอร์ดตามคอลัมน์ ten_sanpham และ diadiem