MySQL - 防止一行引用自身

标签 mysql sql ddl

我有一个表 categories 具有以下结构:

----------------------------------
| id (PK) | name | parentId (FK) |
----------------------------------

其中 parentId 可以引用同一表中的一行。

我想防止更新一行以使其引用自身 (parentId != id)。我知道我必须使用数据库触发器,但我不知道它应该是什么样子。请问我该怎么做?

我知道我可以(也将)在应用程序逻辑中处理这个问题,但我认为仅在应用程序逻辑中处理这类事情不是一个好的做法。

我也想防止插入和更新时的循环引用,但我想那是另一个问题。

最佳答案

使用检查约束会更容易:

ALTER TABLE categories 
ADD CONSTRAINT categories_no_self_ref_ck CHECK (id != parentid)

关于MySQL - 防止一行引用自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32103539/

相关文章:

php - 将 codeigniter 数据传递给简单的 html dom url 变量

php - ionic 2 以及来自 mysql + php 后端的 http 调用

sql - 在 PL\SQL block 中使用 EXECUTE IMMEDIATE

SQL命令获取最大值字段,无需进行两次选择

MYSQL:您的 SQL 语法有错误

sql - 我无法在PostgreSQL上创建表

function - 在一次操作中更改多个 PostgreSQL 函数的架构?

php - 数组值在查询中不起作用

mysql - 从功能意义上来说,压缩两个查询的 SQL 习惯用法是什么?

使用 SQL 的 Java 程序 - 编译成 .jar