MySQL CHECK约束失效问题
在定义数据库表时,添加约束来保证数据完整性非常重要。CHECK约束允许您指定特定列的值必须满足的条件。然而,在MySQL 8.0.15及更早版本中,CHECK约束并未被强制执行,这是一种特殊情况。
举例说明:
<code class="language-sql">CREATE TABLE Customer ( SD integer CHECK (SD > 0), Last_Name varchar (30), First_Name varchar(30) );</code>
创建此表后,尝试插入SD值为负数的行:
<code class="language-sql">INSERT INTO Customer values ('-2', 'abc', 'zz');</code>
MySQL不会报错,即使插入的值违反了指定的CHECK约束。这是因为根据MySQL参考手册:
<code>CHECK子句会被解析,但所有存储引擎都会忽略它。</code>
解决方案:
为了解决这个问题,您可以采取以下方法之一:
<code class="language-sql">mysql> delimiter // mysql> CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer -> FOR EACH ROW -> BEGIN -> IF NEW.SD <=0 THEN SET NEW.SD=0; -> END IF; -> END -> // mysql> delimiter ;</code>
请注意,上面的触发器示例将负数的SD值设置为0,您可以根据实际需求修改触发器逻辑。
以上是为什么MySQL CHECK约束在8.0.16之前的版本中失败?的详细内容。更多信息请关注PHP中文网其他相关文章!