Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ใช้ BEFORE INSERT Trigger จำลอง CHECK CONSTRAINT สำหรับการแทรกข้อมูล

การจำลอง CHECK CONSTRAINT ด้วย BEFORE INSERT Trigger

MySQL รองรับ Foreign Key สำหรับความสมบูรณ์ของการอ้างอิง แต่ไม่รองรับ CHECK Constraint โดยตรง อย่างไรก็ตาม เราสามารถจำลองได้โดยใช้ Trigger

ตัวอย่าง

สมมติเรามีตาราง car ที่ต้องการหมายเลขทะเบียนรูปแบบคงที่: ตัวอักษร 2 ตัว - ตัวเลข 3 ตัว - ตัวอักษร 2 ตัว (เช่น AB-235-YZ)

mysql> CREATE TABLE car (number CHAR(9));
Query OK, 0 rows affected (0.32 sec)

mysql> INSERT INTO car VALUES('AB-235-YZ');
Query OK, 1 row affected (0.10 sec)

ค่าด้านบนถูกต้อง แต่ถ้าเราแทรกค่าที่ไม่ถูกต้อง:

mysql> INSERT INTO car VALUES('AB-2X5-YZ');
Query OK, 1 row affected (0.04 sec)

ค่านี้ไม่ถูกต้องเพราะมีตัวอักษรอยู่ระหว่างตัวเลข ซึ่งขัดกับรูปแบบที่กำหนด

สร้าง BEFORE INSERT Trigger เพื่อป้องกันการแทรกข้อมูลที่ไม่ถูกต้อง

mysql> DELIMITER //
mysql> CREATE TRIGGER car_insert_value BEFORE INSERT ON car
    -> FOR EACH ROW
    -> BEGIN
    ->     IF NEW.number NOT RLIKE '^[[:alpha:]]{2}-[[:digit:]]{3}-[[:alpha:]]{2}$'
    ->     THEN
    ->         SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Not a valid Number';
    ->     END IF;
    -> END //
Query OK, 0 rows affected (0.15 sec)
mysql> DELIMITER ;
mysql> DELETE FROM car;
Query OK, 2 rows affected (0.06 sec)

ตอนนี้ลองแทรกข้อมูลที่ไม่ถูกต้องอีกครั้ง:

mysql> INSERT INTO car VALUES('AB-2X5-YZ');
ERROR 1644 (45000): Not a Valid Number

แต่ข้อมูลที่ถูกต้องยังแทรกได้ปกติ:

mysql> INSERT INTO car VALUES('AB-235-YZ');
Query OK, 1 row affected (0.04 sec)