【问题标题】:MySQL constraint using fixed "hard-coded" value - is this possible?MySQL 约束使用固定的“硬编码”值——这可能吗?
【发布时间】:2012-05-01 09:01:59
【问题描述】:

我有一个表“cmets”,其中包含一个基本的 auto-inc PK“id”字段,还有一个“type”字段。在另一个表中,我希望将 CONSTRAINT 应用于 cmets.id 和“类型”,使用类型值的固定值来实现引用完整性。

示例:在“question_cmets_rate”表中,我想强制“comment_id”作为“cmets”表中的“id”字段存在[这是简单的部分]并且“type”列等于“question” ”。

这存在吗?我该如何编写这个约束声明?

这就像一个“条件约束”——不仅“comment_id”字段必须作为“cmets.id”存在,而且“cmets”表中的这个“id”需要是“type”相等的行到“问题”(或其他指定值)...

我希望问题很清楚。通过您的帮助/反馈,我可能会更清楚。谢谢。

【问题讨论】:

    标签: mysql foreign-keys constraints referential-integrity


    【解决方案1】:

    这将是一个CHECK 约束,MySQL manual 对此表示:

    CHECK 子句被解析,但被所有存储引擎忽略。

    您可以改为在插入/更新时创建触发器以执行您的完整性检查。

    或者,在您的情况下,您可以将type 列的数据类型设为ENUM('question'),使其不能采用任何其他值('' 除外,所有ENUM 类型都可以是 - 例如,如果它们被设置为无效值)。

    【讨论】:

    • 谢谢,蛋蛋。我已经看到(并赞成)你的答案一出现......我在等着看看是否有人有另一个想法,但似乎这是不可能的......我的“类型”列必须能够取其他值,而不仅仅是“问题”......看来我将在 PHP 层中进行此检查 - 这是我在这种情况下使用的服务器端语言。
    • 如果type 可以持有的值是可枚举的(也就是说,您可以将它们全部列出),那么您可以(确实,应该)仍然使用ENUM:例如ENUM('question','answer','comment','wibble');.
    • 我正在使用 ENUM。我没有提到这一点,因为周围有人认为 ENUM 是邪恶的......google.com.br/search?q=enum+is+evil
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    相关资源
    最近更新 更多