MySQL constraints
(what you have done)
ข้อบังคับของการใช้งาน MySql ได้แก่
1.PRIMARY KEY and UNIQUE Index Constraints
เนื่องจากการใช้คำสั่งเพื่อเปลี่ยน data อย่างเช่น INSERT หรือ UPDATE กับ data ที่เป็น primary-key, unique-key, หรือ foreign-key constraints อาจทำให้เกิด error ได้
ดังนั้น MySQL จึงมี IGNORE keywords ไว้ให้กับ key นั้น เมื่อเราเรียกใช้ INSERT หรือ UPDATE มันจะข้ามไปยัง row ต่อไปทันที
ตัวอย่าง
ตารางของเรามีข้อมูลดังนี้
CREATE TABLE `file_names` (
`id` int(11) NOT NULL
auto_increment,
`file_name` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `file_name` (`file_name`(200))
) ENGINE=InnoDB
DEFAULT CHARSET=latin1
AUTO_INCREMENT=4 ;
นี่คือ คำสั่งของเรา
INSERT IGNORE INTO `its_streamingdata`.`file_names` (`id` ,
`file_name`) VALUES (NULL , 'a'), (NULL , 'a')
เราสามารถดึงข้อมูลแบบข้าม relate data จากตาราง อื่นๆได้เลย และยังทำให้ข้อมูลที่ดึงมานั้นมีความต่อเนื่อง
ตัวอย่าง
mysql>SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME
>FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
>WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;
+--------------+---------------+-------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | +--------------+---------------+-------------+-----------------+ | fk1 | myuser | myuser_id | f | | fk1 | product_order | customer_id | f2 | | fk1 | product_order | product_id | f1 | +--------------+---------------+-------------+-----------------+
จะเห็นได้ว่า ข้อมูลที่เรา SELECT นั้นมาจากต่าง table กัน
3.Constraints on Invalid Data
วิธีการจัดการกับ Invalid Data ของ MySQL มีดังต่อนี้
- ถ้าเราพยายามใส่ค่าลงใน คอมลั่มจำนวน ที่เกินตาราง Mysql จะแทนที่ด้วยค่า 0
- สำหรับ ข้อมูลชนิด string MySQL สามารถเก็บเป็น string ว่างๆ หรือ string ที่ยาวที่สุดเท่าที่จะเก็บในคอลั่มได้
- ถ้าพยายามจะเก็บ string ที่ไม่ได้ขึ้นต้นด้วยตัวเลข ลงใน คอลั่มจำนวน MySQL จะเก็บค่า 0 แทน
- Invalid ของ ENUM หรือ SET จะถูกจัดการตาม ENUM and SET Constraints
- MySQL ให้เก็บ data ที่อาจมีค่าไม่ถูกต้องลงในคอลั่ม DATE และ DATETIME ได้ เช่น '2000-02-31' กับ '2000-02-00 ขึ้นอยู่กับ Application ว่าจะให้ใช้ strict SQL mode หรือเปล่า
- ถ้าพยายามที่จะเก็บ NULL ในคอลั่มที่ไม่รับค่า NULL errror จะเกิดสำหรับคำสั่ง INSERT แบบแถวเดียว แต่สำหรับคำสั่ง INSERT แบบหลายๆแถว หรือคำสั่งอื่นๆ MySQL จะเก็บ implicit default value
สำหรับชนิดของข้อมูลในคอลั่มนั้น เช่น 0 สำหรับข้อมูลจำนวน '' สำหรับข้อมูลชนิด string
- ถ้าคำสั่ง INSERT ไม่ได้ระบุค่าใส่ลงในคอลั่ม MySQL จะใส่ค่า default ถ้า คอลั่มได้ระบุคำนิยาม รวมถึง explicit DEFAULT clause เอาไว้ แต่ถ้าไม่ได้ระบุ จะใส่ค่า DEFAULT ของ data type ในคอลั่มนั้นๆ
4.ENUM and SET Constraints
ENUM และ SET มีวิธีจัดการคอลั่มที่สามารถเก็บได้แค่ค่า set เท่านั้น
- ค่า ENUM ต้องอยู่ในรายชื่อที่ระบุไว้ตอนสร้างคอลั่ม ค่านั้นไม่สามารถเป็น ค่า error ได้ เช่น 0 หรือ string ว่างๆ เช่น สำหรับคอลั่มที่ตั้งเอาไว้ให้รับข้อมูล ENUM ('a','b','c') ข้อมูลอย่าง 'd' หรือ 'ax' ที่เขามา จะถูก reject ออกไป
- ค่า SET ต้องเป็น string ว่างๆ หรือ มีค่าที่ระบุตามที่คอลั่มต้องการ แต่ละตัวคั่นด้วย , เช่น คอลั่มที่ระบุว่า SET('a','b','c') ค่าอย่าง 'd' หรือ 'a,b,c,d' จะถือว่า Invalid และถูก reject ออกไป
(any problem/solution)
ปัญหา
-
แก้ปัญหา
-
(decision)
- หาข้อมูลจากเว็ป official ของ MySQL
(related info/link/reference)
- http://dev.mysql.com/doc/refman/5.7/en/constraints.html
(any problem/solution)
ปัญหา
-
แก้ปัญหา
-
(decision)
- หาข้อมูลจากเว็ป official ของ MySQL
(related info/link/reference)
- http://dev.mysql.com/doc/refman/5.7/en/constraints.html
ไม่มีความคิดเห็น:
แสดงความคิดเห็น