【问题标题】:MySQL CHECK constraint to ensure record does not refer to itself with autoincrement id?MySQL CHECK 约束以确保记录不使用自动增量 ID 引用自身?
【发布时间】:2023-02-05 03:14:44
【问题描述】:

我有一个 SQL 表,它可以引用表中的另一条记录作为它的 parent 但不应引用自身。我试图用 CHECK 约束来强制执行此操作,但我的尝试失败了,因为 id 是一个自动递增列。有没有其他办法保证parent_id <> id

我当前的尝试失败并出现错误 Check constraint 'not_own_parent' cannot refer to an auto-increment column. (errno 3818)

CREATE TABLE `content` (
    `id` serial PRIMARY KEY NOT NULL,
    `item_id` int NOT NULL,
    `nested_item_id` int,
    `block_id` int,
    `order` int NOT NULL,
        CONSTRAINT not_own_parent CHECK (nested_item_id <> id)
);

【问题讨论】:

  • 也许您可以在插入后触发器中执行检查。

标签: mysql sql constraints


【解决方案1】:

不要把这种东西放在约束中。一方面,您不能直接在 MySql 中执行此操作。你必须使用触发器或其他东西。

反而:

  1. 仔细编写您的 CRUD 代码,以避免生成不正确的行。无论如何你都必须这样做。
  2. 写一个叫做“database_consistent”之类的小程序。让它运行一堆查询来查找任何错误,例如您要避免的错误。如果发现问题,让它发送电子邮件或短信。在开发期间经常运行它,在生产中至少每天运行一次。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多