-SQL มีข้อจำกัดในการระบุลงในตาราง เพื่อให้การเลือกและการจัดเก็บข้อมูลใน database เป็นไปอย่างถูกต้อง อธิเช่น
- NOT NULL - คือการกำหนดให้ columns นั้น เป็น null ไม่ได้
- UNIQUE - คือการกำหนดให้ข้อมูลใน columns นั้นไม่สามารถซ้ำกันได้
- PRIMARY KEY - คือการกำหนดให้ columns นั้น เก็บค่า null ไม่ได้ และ มีข้อมูลที่ไม่ซ้ำกัน
- FOREIGN KEY - คือการกำหนดให้ columns นั้นเก็บข้อมูลเดียวกันกับ column ในtable อื่น เพื่อใช้เป็นตัวเชื่อมโยงกันระหว่าง table
- CHECK - คือการกำหนดให้ columns นั้นเก็บค่าที่เฉพาะเจาะจง
- DEFAULT - คือการระบุค่าเริ่มต้นสำหรับ columns นั้นๆ
โดยการระบุ constraints นั้นจะทำตั้งแต่การสร้างตาราง(created) หรือการแก้ไขรายละเอียดของตาราง(ALTER)เมื่อตารางนั้นได้ถูกสร้างขึ้นแล้ว
อ้างอิงจาก: http://www.w3schools.com/sql/sql_constraints.asp
How to specify them?
SQL CREATE TABLE + CONSTRAINT
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
ทดลองสร้างตาราง และกำหนดCONSTRAINT
รูปที่1 แสดงการสร้างตาราง และ แสดงรายละเอียดของตาราง
จากรูปที่1จะเห็นว่า
- id ให้เป็น PRIMARY KEY และไม่สามารถเก็บค่า null ได้
- name และ lastname ไม่สามารถเก็บค่า null ได้
- age กำหนดCONSTRAINT โดยใช้คำสั่ง CHECK ให้ข้อมูลที่ใส่ต้องมีค่ามากกว่า20
- status กำหนดค่า DEFAULT ให้เป็น S
ทอลองใส่ข้อมูล
จากรูปที่2จะเห็นว่า
- ถ้าเราไม่กำหนดค่าใน column status database จะเก็บข้อมูลเป็น s ซึ่งเป็นค่า DEFAULT ที่เราได้ตั้งไว้
- มีข้อผิดพลาดในการใช้ CONSTRAINT โดยใช้คำสั่ง CHECK เนื่องจากเรากำหนดให้ age>20 แต่ค่าที่เราใส่เค้าไปเป็น 19 *จะหาทางแก้ไขต่อไป
จากรูปที่3จะเห็นว่า
- ถ้าหากไม่ใส่ข้อมูลช่อง lastname จะไม่สามารถเพิ่มข้อมูลได้เนื่องจาก เรากำหนดCONSTRAINT ไม่ให้เก็บค่า null
- ในกรอบสีแดง เป็นการใส่ค่าที่มี id ซ้ำกับค่าที่อยู๋ table อยู่แล้ว ทำให้ไม่สามารถใส่ค่าไปยังตารางได้ เนื่องจาก id เป็น PRIMARY KEY ซึ่งค่าที่เก็บไว้นั้นไม่สามารถซ้ำกันได้
- ในกรอบสีเขียว เป็นการใส่ค่า โดยที่ id ไม่ซ้ำกัน แต่ name กับ lastname ซ้ำ แต่ยังสามารถใส่ค่าได้ เพราะ name และ lastname ไม่ได้ถูกกำหนดให้เป็น UNIQUE
