我有一个Node
表,其中有一个ParentID
列,该列引用其父级NodeID
。我想确保没有节点可以引用自己(即一个节点的ParentID
不能拥有自己的NodeID
),所以我尝试添加一个检查约束CHECK(NodeID != ParentID)
。
但是,我得到了这个错误:Error Code: 3818. Check constraint 'node_chk_1' cannot refer to an auto-increment column.
我也不能添加ParentID
作为Node
的外键。
使用MySQL,我如何确保没有新记录,其中NodeID
= ParentID
?
1条答案
按热度按时间kiayqfof1#
使用触发器:
请注意,它必须是AFTER触发器,因为BEFORE触发器中尚未生成自动递增id。
演示:
如果您希望防止用户更新行并将parentid设置为与同一行中的id相同的值,则还需要一个类似的AFTER UPDATE触发器。
另一种解决方案是使主键不自动递增。您必须在INSERT语句中指定每个id值,而不是让它们自动递增。但这将允许您使用CHECK约束。