CONSTRAINT MySQL
คือ ข้อจำกัดที่ถูกใช้ในการระบุกฏและข้อบังคับของข้อมูลในตาราง ที่จะถูกจัดเก็บในลำดับต่อไป
โดยมี constraint ที่รองรับ ดังนี้
1) NOT NULL
2) ๊CHECK*
3) DEFAULT
4) UNIQUE
5) PRIMARY KEY
6) FOREIGN KEY (Referential Integrity constraint)
Detail for each constraint
- NOT NULL
ใช้สำหรับ กำหนดให้การใส่ข้อมูลในcolumn นั้นๆจะไม่ยอมรับค่าที่เป็น null ได้
Syntax :
CREATE TABLE table_name ( column_name column_type NOT NULL);
Example :
เช่น ใช้ในกรณีของการใช้เก็บข้อมูล ชื่อ และนามสกุลของลูกค้า โดยกำหนดว่า ห้ามเป็น null หรือค่าว่าง แต่สำหรับอายุ จะไม่ใส่ก็ได้
ภาพแสดงตัวอย่างตารางข้อมูลที่ได้ออกแบบไว้
ภาพแสดงคำสั่งที่ใช้ในการสร้างตาราง
พอใช้คำสั่ง describe customer; เพื่อดูรายละเอียดของตาราง จะเห็นได้ว่า รายละเอียดของตารางของattribute name กับ surname ไม่ยอมรับการใส่null คือ ตรงคอลัมน์ null มีค่าเป็น no
ภาพแสดงรายละเอียดของตาราง
ตัวอย่างการใส่ข้อมูล โดยมีอยู่ 3 กรณี ที่เราจะไม่สามารถใส่ข้อมูล
1) ใส่แต่อายุ
2) ใส่ชื่อกับอายุ
3) ใส่นามสกุลกับอายุ
ตัวอย่างการใส่ข้อมูลแต่อายุ
ตัวอย่างการใส่ข้อมูลแต่ชื่อและอายุ
ตัวอย่างการใส่ข้อมูลแต่นามสกุลและอายุ
แต่เราสามารถใส่ข้อมูลชื่อกับนามสกุล โดยไม่ใส่อายุได้ เนื่องจากข้อมูลอายุเราไม่ได้กำหนดว่า ห้ามเป็น null
ภาพแสดงตัวอย่างการใส่ข้อมูลชื่อกับนามสกุล โดยไม่ใส่อายุ
ภาพแสดงตัวอย่างการใส่ข้อมูลครบถ้วน |
จากนั้นทำการเช็คข้อมูลที่ได้เพิ่มเข้าไป โดยใช้คำสั่ง select * from customer; จะเห็นได้ว่าข้อมูลแถวแรก ตรงคอลัมน์ age เป็นค่า null เนื่องจากไม่มีการใส่ค่าจากผู้ใช้
ภาพแสดงตารางข้อมูล
- CHECK*
สาเหตุที่ทำการใส่ดอกจันทร์สีแดง เนื่องจาก ทางเว็บไซต์ w3schools ได้มีตัวอย่างการใช้ constraint check แต่พอทำตามแล้ว กลับไม่เป็นไปอย่างที่คิดไว้ จึงได้ทำการศึกษาข้อมูลเพิ่มเติม จึงได้คำตอบว่า "check constraints are not supported in MySQL" นั่นก็คือ MySQL ไม่รองรับ constraint check อ้างอิงข้อมูลจาก http://oak.cs.ucla.edu/cs143/project/mysql/constraints.html
ตัวอย่างที่ทำ คือ สร้างตารางชื่อ persons เก็บข้อมูลชื่อกับอายุ โดยอายุที่ใส่ กำหนดให้มากกว่า 18
ภาพแสดงการสร้างตาราง โดยใช้constraint check
ซึ่งถ้าเป็นไปตามที่เขียน การใส่ข้อมูลที่ทำให้เงื่อนไขเป็นเท็จน่าจะใส่ข้อมูลไม่ได้ แต่นี่ ไม่มีการขึ้น error แจ้งเตือนเลย แถมยังบอกว่ามีการเปลี่ยนแปลง1 แถวอีกด้วย
ภาพแสดงการเพิ่มข้อมูล ซึ่งทำให้เงื่อนไขเป็นเท็จ
จากนั้นลองทำการเช็คข้อมูลในตาราง พบว่าข้อมูลถูกจัดเก็บจริง ซึ่งในความเป็นจริง ไม่ควรถูกจัดเก็บในตาราง
ภาพแสดงข้อมูลในตาราง
โดยข้อมูลการศึกษาตัวอย่าง อ้างอิงจาก http://www.w3schools.com/sql/sql_check.asp
ภาพตัวอย่างการใช้constraint check จากเว็บไซต์
- DEFAULT
เป็นการกำหนด default ให้กับค่าที่ใส่ในตาราง ในกรณีที่ไม่ได้ใส่ข้อมูล
Syntax :
CREATE TABLE table_name
(column_name column_type DEFAULT 'default_value' );
Example :
เช่น ใส่ข้อมูลเกี่ยวกับเด็ก โดยในตารางมีการใส่ชื่อกับเพศ โดยเพศของเด็กในกรณีที่ไม่ใส่ จะถือว่ามีค่าเป็นเด็กผู้ชาย หรือ male นั่นเอง
ตัวอย่างตารางที่ได้ทำการออกแบบไว้
ภาพแสดงตัวอย่างคำสั่งการสร้างตารางโดยใช้ default
ดูรายละเอียดของตารางโดยใช้คำสั่ง describe children; จะเห็นได้ว่าตรงค่า default ของ gender มีค่าเป็น male
ภาพแสดงรายละเอียดของตาราง |
ทดลองใส่ข้อมูล โดยการใส่ข้อมูลเป็นไปตามตารางด้านบนที่ได้ออกแบบไว้ โดยข้อมูลตัวที่สองจะไม่ใส่ค่า gender เพื่อดูการทำงานของ default
เพิ่มข้อมูลชุดแรก โดยให้เพศเป็นผู้หญิง |
เพิ่มข้อมูลชุดแรก โดยไม่ใส่เพศ
เพิ่มข้อมูลชุดที่สาม โดยให้เพศเป็นผู้ชาย ซึ่งเหมือนกับค่า default
ภาพแสดงตารางข้อมูล โดยเป็นไปตามตารางที่ออกแบบไว้
- UNIQUE
ใช้ในกำหนดว่าการใส่ค่าข้อมูลในคอลัมน์นั้นจะไม่ยอมรับ ค่าข้อมูลที่มีค่าซ้ำกัน ซึ่งจะแตกต่างจากconstraint ที่เป็น PRIMARY KEY (จะได้ศึกษาในลำดับถัดไป) ตรงที่ UNIQUE นั้นจะไม่มีส่วนเกี่ยวข้องใดๆกับ FOREIGN KEY และคอลัมน์ที่มี constraint เป็น unique จะสามารถมีค่าข้อมูลเป็น NULL ได้ โดยค่าข้อมูลที่เป็น NULL นั้นมีความหมายที่ไม่ซ้ำกัน
ทดลองการใส่ข้อมูล โดยใส่ข้อมูลตามตารางที่ได้ออกแบบไว้ โดยสามข้อมูลแรกที่ใส่ สามารถใส่ได้ปกติ แต่เมื่อถึงการใส่ข้อมูลตัวที่ 4 จะมีการแจ้งเตือน เนื่องจากข้อมูลตัวที่ 4 ที่ตำแหน่งของ username มีค่าที่ซ้ำกับค่าที่ใส่ไปก่อนหน้านี้ ซึ่งค่าusername ไม่สามารถซ้ำกันได้ เนื่องจากถูกตั้งให้เป็น unique
Syntax :
CREATE TABLE table_name
(column_name column_type UNIQUE);
Example :
เช่น การเก็บข้อมูล username กับ ชื่อและนามสกุล โดยมีแนวคิดที่ว่า 1 คนสามารถมีได้หลาย username แต่ username จะไม่มีทางซ้ำกัน จึงกำหนดให้ attribute username มีconstraint เป็น unique
ภาพแสดงตัวอย่างตารางที่ได้ออกแบบไว้
ภาพตัวอย่างการสร้างตารางโดยกำหนด constraint unique |
ภาพแสดงการใส่ข้อมูลตัวที่ 1-3 ตามลำดับ
ภาพแสดงการเกิด error เมื่อใส่ข้อมูลตัวที่ 4 ที่มีค่า username ซ้ำ
เมื่อดูที่ตารางข้อมูล จะเห็นได้ว่า ในตารางจะไม่มีข้อมูลตัวที่ 4 อยู่เลย
ภาพแสดงตารางข้อมูล
PRIMARY KEY & FOREIGN KEY
ซึ่งทั้งสองส่วนนี้มักทำงานร่วมกัน จึงจะขอนำเสนอรวมกันเลย โดยได้ออกแบบรูปแบบตารางและความสัมพันธ์ไว้ดังนี้
- PRIMARY KEY
ซึ่ง Primary key จะมีคุณสมบัติ UNIQUE (นั่นคือไม่สามารถใส่ข้อมูลซ้ำกับข้อมูลเดิมได้) และ NOT NULL (สาเหตุที่เป็น not null เพื่อใช้ในการค้นหา) และจะใช้งานร่วมกับ Foreign key
Syntax :
CREATE TABLE table_name
(column_name column_type,
PRIMARY KEY ( column_name));
PRIMARY KEY ( column_name));
ซึ่งในตารางที่ได้ออกไว้ primary key คือ n_department
ภาพแสดงตัวอย่างการสร้างตาราง
ภาพแสดงการใส่ข้อมูลตัวที่ 1 และ 2 ที่ไม่เกิดปัญหา
ภาพแสดงการใส่ข้อมูลตัวที่ 3 เพื่อทดลองการแจ้งเตือนเมื่อข้อมูลซ้ำ
ภาพแสดงตารางข้อมูล
- FOREIGN KEY
จะถูกใช้งานร่วมกันกับ primary key เพื่อสร้างความสัมพันธ์กันระหว่าง2 ตาราง เพื่อให้ละการใส่ข้อมูล
Syntax :
CREATE TABLE table_name
(column_name column_type,
FOREIGN KEY ( column_name)
REFERENCES table_pk_name ( column_pk_name ) [ ON UPDATE RESTRICT | CASCADE | SET NULL ] [ ON DELETE RESTRICT | CASCADE | SET NULL ] );
FOREIGN KEY ( column_name)
REFERENCES table_pk_name ( column_pk_name ) [ ON UPDATE RESTRICT | CASCADE | SET NULL ] [ ON DELETE RESTRICT | CASCADE | SET NULL ] );
** จะต้องสร้างตารางที่ใช้ในการอ้างอิงก่อน จึงจะใช้ FOREIGN KEY ได้
Example :
เช่น การสร้างเก็บข้อมูลนักศึกษา โดยมีรหัสนักศึกษา ชื่อ นามสกุล และภาควิชาที่ศึกษาอยู่ โดยในข้อมูลของ attribute ภาควิชานี้ ได้อ้างอิงไปยังตารางของ department ที่ได้สร้างไว้ก่อนหน้าในบทเรียนของ primary key ซึ่งตารางข้อมูลที่ได้ออกแบบไว้คือ
ภาพแสดง ตารางที่ได้ออกแบบไว้
ภาพแสดงตัวอย่างการสร้างตาราง
ทำการใส่ข้อมูลตามตารางที่ได้ออกแบบไว้ในขั้นต้น ผลที่ได้คือเมื่อใส่ข้อมูลที่ 1-3 สามารถใส่ได้ปกติ ไม่เกิดปัญหาใดๆ (เนื่องจากค่าที่ใส่เข้าไปไม่มีค่า id ที่ซ้ำกัน และค่า department ตรงกับค่า n_department ในตาราง department ที่ได้สร้างไว้ก่อนหน้า) แต่เมื่อทำการใส่ข้อมูลชุดที่ 4 ที่กำหนดให้ department เป็นค่าที่ไม่เคยมีมาก่อนในตารางอ้างอิง จึงเกิด error ขึ้น
ภาพแสดงการใส่ข้อมูล 3 ชุดแรก
ภาพแสดง error ที่เกิดขึ้นเมื่อใส่ข้อมูลชุดที่ 4
ทำการเรียกดูข้อมูล โดยเชื่อมทั้งสองตารางจะใช้คำสั่งใดนะ???
เรียนรู้เพิ่มเติมคือหากต้องการเชื่อมทั้งสองตาราง จะใช้คำสั่ง JOIN หรือ INNER JOIN โดยทั้งสองตัวมีความหมายเหมือนกัน สามารถแสดงได้ในรูปเชิงคณิตศาสตร์ในคือการ intersection กัน คือ นำส่วนที่เหมือนกันทับซ้อนกัน
ภาพแสดง รูปแบบ intersection
Syntax :
ในตารางทั้งสองตารางด้านบน เราสร้างตาราง s_engineer ที่ข้อมูลของ department อ้างอิงไปยัง ข้อมูล n_department ของตาราง department เราจึงทำการเชื่อมสองตารางเข้าด้วยกัน และให้แสดงข้อมูลออกมา
ภาพแสดง การแสดงข้อมูลของทั้งสองตาราง
ตารางที่กำหนดให้แสดงค่าออกมา กำหนดให้แสดงค่าของตาราง s_engineer ทั้งหมด และให้แสดงข้อมูลในตาราง department เฉพาะข้อมูล location ที่ชื่อdepartment ตรงกันจึงได้ข้อมูลออกมาดังตารางด้านบน
อ้างอิงเว็บไซต์ที่เกี่ยวข้อง
ไม่มีความคิดเห็น:
แสดงความคิดเห็น