我有这样的例子:
CREATE TABLE a(
id INT PRIMARY KEY AUTO_INCREMENT,
parent_id INT,
FOREIGN KEY (parent_id) REFERENCES a(id)
);
DELIMITER ;;
CREATE TRIGGER a_insert BEFORE INSERT ON a
FOR EACH ROW
BEGIN
SIGNAL SQLSTATE '01431' SET MESSAGE_TEXT = 'The foreign data source you are trying to reference does not exist.';
END;;
DELIMITER ;
INSERT INTO a(parent_id) VALUES (NULL);
INSERT INTO a(parent_id) VALUES (1);
INSERT INTO a(parent_id) VALUES (2);
INSERT INTO a(parent_id) VALUES (4);
INSERT INTO a(parent_id) VALUES (999);
SELECT * FROM a
这最终有 4 条记录:
----------------
id parent_id
----------------
1 NULL
2 1
3 2
4 4
我在网上发现 MySQL 不支持触发器中的回滚。这是一个问题,因为我想要这样的层次结构,其中没有行指向它自己,并且像插入的那样ID=4
工作得很好。如何确保数据库中没有此类记录?