ส่วนคำสั่ง CONSTRAINT

ข้อจำกัด จะคล้ายกับ ดัชนี แม้ว่าจะสามารถใช้ทำ ความสัมพันธ์ กับตารางอื่นได้เช่นกันก็ตาม

คุณใช้ส่วนคำสั่ง CONSTRAINT ในคำสั่ง ALTER TABLE และ CREATE TABLE เพื่อสร้างหรือลบข้อจำกัด ส่วนคำสั่ง CONSTRAINT มีสองชนิด: ชนิดแรกสำหรับสร้างข้อจำกัดบนเขตข้อมูลเดี่ยว และอีกชนิดสำหรับสร้างข้อจำกัดบนหลายเขตข้อมูล

หมายเหตุ: กลไกจัดการฐานข้อมูลของ Microsoft Access ไม่รองรับการใช้คำสั่ง CONSTRAINT หรือคำสั่งภาษากำหนดโครงสร้างข้อมูลใดๆ กับฐานข้อมูลที่ไม่ใช่ Microsoft Access ใช้เมธอดการสร้าง DAO แทน

ไวยากรณ์

ข้อจำกัดแบบเขตข้อมูลเดี่ยว:

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreigntable [(foreignfield1, foreignfield2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

ข้อจำกัดแบบหลายเขตข้อมูล:

CONSTRAINT name
{PRIMARY KEY (primary1[, primary2 [, ...]]) |
UNIQUE (unique1[, unique2 [, ...]]) |
NOT NULL (notnull1[, notnull2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

ส่วนคำสั่ง CONSTRAINT มีส่วนต่างๆ ดังนี้:

ส่วน

คำอธิบาย

name

ชื่อของข้อจำกัดที่จะถูกสร้าง

primary1, primary2

ชื่อของหนึ่งหรือหลายเขตข้อมูลที่จะถูกกำหนด คีย์หลัก

unique1, unique2

ชื่อของหนึ่งหรือหลายเขตข้อมูลที่จะถูกกำหนดเป็นคีย์เฉพาะ

notnull1, notnull2

ชื่อของหนึ่งหรือหลายเขตข้อมูลที่ถูกจำกัดไว้ที่ค่าที่ไม่เป็น Null

ref1, ref2

ชื่อของหนึ่งหรือหลายเขตข้อมูลของ Foreign Key ที่อ้างอิงเขตข้อมูลในตารางอื่น

foreigntable

ชื่อของ ตาราง Foreign Key ที่ประกอบด้วยหนึ่งหรือหลายเขตข้อมูลที่ระบุโดย foreignfield

foreignfield1, foreignfield2

ชื่อของหนึ่งหรือหลายเขตข้อมูลใน foreigntable ที่ระบุโดย ref1, ref2. คุณสามารถละเว้นส่วนคำสั่งนี้ได้ถ้าเขตข้อมูลที่ถูกอ้างอิงเป็นคีย์หลักของ foreigntable


ข้อสังเกต

คุณใช้ไวยากรณ์สำหรับข้อจำกัดแบบเขตข้อมูลเดี่ยวในส่วนคำสั่งข้อกำหนดเขตข้อมูลของคำสั่ง ALTER TABLE หรือ CREATE TABLE ที่อยู่หลังจากข้อกำหนดของชนิดข้อมูลของเขตข้อมูล

คุณใช้ไวยากรณ์สำหรับข้อจำกัดแบบหลายเขตข้อมูลเมื่อใดก็ตามที่คุณใช้ คำสงวน CONSTRAINT ภายนอกส่วนคำสั่งข้อกำหนดเขตข้อมูลในคำสั่ง ALTER TABLE หรือ CREATE TABLE

ด้วยการใช้ CONSTRAINT คุณสามารถกำหนดเขตข้อมูลให้เป็นหนึ่งในชนิดของข้อจำกัดต่อไปนี้ได้:

  • คุณสามารถใช้คำสงวน UNIQUE เพื่อกำหนดเขตข้อมูลให้เป็นคีย์เฉพาะ ซึ่งหมายความว่า จะไม่มีระเบียนใดๆ ในตารางที่มีค่าเดียวกับเขตข้อมูลนี้ คุณสามารถจำกัดเขตข้อมูลหรือรายการของเขตข้อมูลใดก็ตามให้เป็นเฉพาะได้ ถ้าข้อจำกัดแบบหลายเขตข้อมูลถูกกำหนดให้เป็นคีย์เฉพาะ ค่ารวมของเขตข้อมูลทั้งหมดในดัชนีต้องไม่ซ้ำกัน แม้ว่าระเบียนอย่างน้อยสองระเบียนขึ้นไปมีค่าเดียวกันในหนึ่งเขตข้อมูลก็ตาม

  • คุณสามารถใช้คำสงวน PRIMARY KEY เพื่อกำหนดเขตข้อมูลหนึ่งหรือชุดของเขตข้อมูลในตารางให้เป็นคีย์หลักได้ ค่าทั้งหมดในคีย์หลักต้องไม่ซ้ำกันและไม่เป็น Null และในหนึ่งตารางจะมีคีย์หลักได้เพียงคีย์เดียวเท่านั้น

    หมายเหตุ: อย่าตั้งค่าข้อจำกัด PRIMARY KEY ในตารางที่มีคีย์หลักอยู่แล้ว ข้อผิดพลาดจะเกิดขึ้นถ้าคุณทำเช่นนั้น

  • คุณสามารถใช้คำสงวน FOREIGN KEY เพื่อกำหนดเขตข้อมูลเป็นคีย์นอกได้ ถ้าคีย์หลักของตารางคีย์นอกประกอบด้วยเขตข้อมูลมากกว่าหนึ่ง คุณต้องใช้ข้อกำหนดข้อจำกัดแบบหลายเขตข้อมูล การแสดงรายการของเขตข้อมูลอ้างอิงทั้งหมด ชื่อของตารางคีย์นอก และชื่อของเขตข้อมูลที่ถูกอ้างอิงในตารางคีย์นอกในลำดับเดียวกับที่เขตข้อมูลอ้างอิงถูกจัดแสดงรายการ ถ้าหนึ่งหรือหลายเขตข้อมูลที่ถูกอ้างอิงเป็นคีย์หลักของตารางคีย์นอก คุณไม่จำเป็นต้องระบุเขตข้อมูลที่ถูกอ้างอิง ตามค่าเริ่มต้น กลไกจัดการฐานข้อมูลจะทำเหมือนคีย์หลักของตารางคีย์นอกเป็นเขตข้อมูลที่ถูกอ้างอิง

    ข้อจำกัดคีย์นอกกำหนดให้การกระทำบางอย่างถูกดำเนินการเมื่อค่าคีย์หลักที่เกี่ยวข้องถูกเปลี่ยนแปลง

  • คุณสามารถระบุการกระทำที่ถูกดำเนินการในตารางคีย์นอกได้โดยยึดตามการกระทำที่สอดคล้องกันซึ่งถูกดำเนินการกับคีย์หลักในตารางที่ CONSTRAINT ถูกกำหนด ตัวอย่างเช่น พิจารณาข้อกำหนดต่อไปนี้สำหรับตาราง Customers:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

พิจารณาข้อกำหนดของตาราง Orders ต่อไปนี้ ซึ่งกำหนดความสัมพันธ์คีย์นอกที่อ้างอิงคีย์หลักของตาราง Customers:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

ส่วนคำสั่ง ON UPDATE CASCADE และ ON DELETE CASCADE ถูกกำหนดไว้ในคีย์นอก ส่วนคำสั่ง ON UPDATE CASCADE หมายความว่า ถ้าตัวระบุลูกค้า (CustId) ถูกอัปเดตในตาราง Customers การอัปเดตจะถูกส่งต่อเป็นทอดผ่านตาราง Orders แต่ละคำสั่งซื้อที่ประกอบด้วยค่าตัวระบุลูกค้าที่สอดคล้องกันจะถูกอัปเดตเป็นค่าใหม่โดยอัตโนมัติ ส่วนคำสั่ง ON DELETE CASCADE หมายความว่า ถ้าลูกค้าถูกลบออกจากตาราง Customers แถวทั้งหมดในตาราง Orders ที่ประกอบด้วยค่าตัวระบุลูกค้าเดียวกันจะถูกลบไปด้วยเช่นกัน

พิจารณาข้อกำหนดที่แตกต่างกันของตาราง Orders ต่อไปนี้ ซึ่งใช้การกระทำ SET NULL แทน CASCADE:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

ส่วนคำสั่ง ON UPDATE SET NULL หมายความว่า ถ้าตัวระบุลูกค้า (CustId) ถูกอัปเดตในตาราง Customers ค่าคีย์นอกที่สอดคล้องกันในตาราง Orders จะถูกตั้งค่าเป็น NULL โดยอัตโนมัติ ในทำนองเดียวกัน ส่วนคำสั่ง ON DELETE SET NULL หมายความว่า ถ้าตัวระบุลูกค้า (CustId) ถูกลบจากตาราง Customers ค่าคีย์นอกทั้งหมดที่สอดคล้องกันในตาราง Orders จะถูกตั้งค่าเป็น NULL โดยอัตโนมัติ

เมื่อต้องการป้องกันไม่ให้มีการสร้างดัชนีสำหรับคีย์นอกโดยอัตโนมัติ คุณสามารถใช้ตัวปรับเปลี่ยน NO DEX ได้ ฟอร์มของข้อกำหนดคีย์นอกควรถูกใช้เฉพาะในกรณีที่ค่าดัชนีผลลัพธ์มักจะถูกทำซ้ำกันบ่อยเท่านั้น ในที่ที่ค่าในดัชนีคีย์นอกมักถูกทำซ้ำ การใช้ดัชนีอาจมีประสิทธิภาพน้อยกว่าการดำเนินการสแกนตารางเสียด้วยซ้ำ การรักษาดัชนีชนิดนี้ซึ่งมีแถวถูกแทรกและถูกลบออกจากตารางจะลดระดับประสิทธิภาพการทำงานและไม่มีประโยชน์ใดๆ



ขยายทักษะของคุณ
สำรวจการฝึกอบรม
รับฟีเจอร์ใหม่ก่อนใคร
เข้าร่วม Office Insider

ข้อมูลนี้เป็นประโยชน์หรือไม่

ขอบคุณสำหรับคำติชมของคุณ!

ขอขอบคุณสำหรับคำติชมของคุณ! เราคิดว่าอาจเป็นประโยชน์ที่จะให้คุณได้ติดต่อกับหนึ่งในตัวแทนฝ่ายสนับสนุน Office ของเรา

×