ใช้ TRIGGER ก่อน INSERT (BEFORE INSERT) ร่วมกับ REGEXP เพื่อตรวจสอบรูปแบบข้อมูลก่อนบันทึก
ตัวอย่าง: ตรวจสอบรูปแบบเบอร์โทรศัพท์
1. สร้างตาราง
mysql> create table enforceDataUsingRegularExpression (
-> yourPhoneNumber varchar(60)
-> );
2. สร้าง Trigger
mysql> DELIMITER //
mysql> CREATE TRIGGER enforce_phone_check BEFORE INSERT ON enforceDataUsingRegularExpression
-> FOR EACH ROW
-> BEGIN
-> IF (NEW.yourPhoneNumber REGEXP '^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$') = 0 THEN
-> SIGNAL SQLSTATE '33455' SET MESSAGE_TEXT = 'Your Phone Number is incorrect';
-> END IF;
-> END //
mysql> DELIMITER ;
3. ทดสอบ INSERT ข้อมูลผิด
mysql> insert into enforceDataUsingRegularExpression values("+55242-64576");
ERROR 1644 (33455): Your Phone Number is incorrect
mysql> insert into enforceDataUsingRegularExpression values("+76-WD1232221");
ERROR 1644 (33455): Your Phone Number is incorrect
4. INSERT ข้อมูลถูกต้อง
mysql> insert into enforceDataUsingRegularExpression values("+55-1232221");
Query OK, 1 row affected (0.13 sec)
5. ตรวจสอบข้อมูล
mysql> select * from enforceDataUsingRegularExpression;
+-----------------+ | yourPhoneNumber | +-----------------+ | +55-1232221 | +-----------------+
อธิบาย Regular Expression
^(\+?[0-9]{1,4}-)?[0-9]{3,10}$
^ เริ่มสตริง
( )? กลุ่มตัวเลือก (อาจมีหรือไม่มี)
\+? อาจมี + นำหน้า
[0-9]{1,4} ตัวเลข 1-4 หลัก (รหัสประเทศ)
- เครื่องหมายขีด
[0-9]{3,10} ตัวเลข 3-10 หลัก (เบอร์โทร)
$ จบสตริง
MySQL 8.0.16+ ใช้ CHECK Constraint แทน
CREATE TABLE phone_check (
phone VARCHAR(60),
CONSTRAINT chk_phone_format CHECK (phone REGEXP '^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$')
);
ประเภท Trigger ที่ใช้ได้
BEFORE INSERT- ตรวจสอบก่อนเพิ่มBEFORE UPDATE- ตรวจสอบก่อนแก้ไข- รวมได้:
BEFORE INSERT, UPDATE