【问题标题】:How to create a CHECK constraint in MySQL that requires negative values?如何在 MySQL 中创建需要负值的 CHECK 约束?
【发布时间】:2014-03-11 16:12:56
【问题描述】:

我想更改表上的整数列以添加检查约束以防止值为零或正数。例如:

CREATE TABLE example (id INTEGER)
ALTER TABLE example ADD CONSTRAINT chk_negID CHECK (id<0)

MySQL 很高兴地遵守这些,但随后允许以下内容:

INSERT INTO example VALUES (-1);
INSERT INTO example VALUES (1);

我的约束实际上没有被添加吗?有没有办法列出在创建表后添加到表中的约束?

【问题讨论】:

  • 这似乎需要在应用层处理,因为 MySQL 不支持此功能。
  • MySQL 中没有CHECK 约束。您需要改为编写触发器。
  • @AgRizzo:如果这是从触发器终止执行的好方法。
  • @zerkms - 我编辑我的评论更清楚
  • 看看这个问题和答案stackoverflow.com/a/7189396/2587724 - 并翻转答案的逻辑

标签: mysql


【解决方案1】:

这是可行的,但可能难以调试。这是一个触发器:

DELIMITER $$;
CREATE TRIGGER my_trigger AFTER INSERT ON my_table 
FOR EACH ROW
BEGIN
 IF(OLD.id <= 0)
   THEN
   DELETE FROM my_table where id = OLD.id;
 END IF;
END

【讨论】:

  • 准确地说 - 用户可能没有DELETE 权限
  • 我们不能假设他不@zerkms
  • 确实如此。请注意,此解决方案在某些情况下可能不起作用。
  • 这是一个有趣的解决方案,谢谢,但效果是数据成功INSERT突然消失了。
  • 如果 id 大于或等于 0,则应将其删除,更改列名以适应您的情况。
【解决方案2】:

mysql 不支持(即使它接受它作为有效语法)

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

http://dev.mysql.com/doc/refman/5.5/en/create-table.html

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 2023-01-31
    • 2022-01-11
    • 1970-01-01
    • 2020-10-12
    • 2020-04-21
    • 2011-01-08
    相关资源
    最近更新 更多