delimiter //
CREATE TRIGGER id_parent_table_check_insert_trg
BEFORE INSERT ON id_parent_table
FOR EACH ROW
BEGIN
DECLARE msg varchar(255);
IF new.parent_id = new.main_id THEN
SET msg = 'parent_id and main_id should be different';
SIGNAL SQLSTATE '45000' SET message_text = msg;
END IF;
END
//
CREATE TRIGGER id_parent_table_check_update_trg
BEFORE UPDATE ON id_parent_table
FOR EACH ROW
BEGIN
DECLARE msg varchar(255);
IF new.parent_id = new.main_id THEN
SET msg = 'parent_id and main_id should be different';
SIGNAL SQLSTATE '45000' SET message_text = msg;
END IF;
END
//
2条答案
按热度按时间w8biq8rn1#
现在从MySQL 8.0.16开始支持此功能。
参见https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html
yyyllmsg2#
显然,MySQL不支持检查约束。引用online reference:
所有存储引擎都会分析CHECK子句,但会将其忽略。
或者,您可以使用触发器来使此类插入或更新失败:
编辑:MySQL不支持对两个事件使用一个触发器,因此您必须使用两个不同的触发器: