当前位置: 首页 > 面试题库 >

MySQL触发器可以模拟CHECK约束吗?[重复]

狄溪叠
2023-03-14
问题内容

这个问题已经在这里有了答案

MySQL中的CHECK约束不起作用 (8个答案)

去年关闭。

我想在MySQL中使用CHECK约束,但不受支持。(与其他RDBMS不同,它将理解但不强制执行CHECK。)

我已经看到了一些使用触发器的解决方法。但是他们倾向于为相关字段设置默认值,而不是返回错误。

如果不满足条件,是否可以构造一个返回错误的触发器?

最终,我想要一个复制CHECK约束的触发器。


问题答案:

尝试以下语法

CREATE TRIGGER mytabletriggerexample
BEFORE INSERT
FOR EACH ROW BEGIN
IF(NEW.important_value) < (fancy * dancy * calculation) THEN
    DECLARE dummy INT;

    SELECT Your meaningful error message goes here INTO dummy 
        FROM mytable
      WHERE mytable.id=new.id
END IF; END;


 类似资料:
  • 问题内容: 按照MySQL手册“该子句已解析,但所有存储引擎都将忽略它”。因此,我知道简单的解决方案是不可能的,但是还有另一种可行的方法来达到相同的结果吗?也许通过一些触发器或存储过程的使用?如果可以,怎么办? 同样,由于它只是“已解析”,是否还可以避免使用它,因为它没有用? 使用MySQL 5.5.11和InnoDB表 问题答案: 看看这篇有趣的文章 https://wikis.oracle.c

  • SQL CHECK 约束 CHECK 约束用于限制列中的值的范围。 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。 CREATE TABLE 时的 SQL CHECK 约束 下面的 SQL 在 "Persons" 表创建时在 "P_Id" 列上创建 CHECK 约束。CHECK 约束规定 "

  • 问题内容: 首先,我创建了一个表,例如 然后在该表中插入值 MySQL没有显示错误,它接受了值。 问题答案: 如果您使用MySQL 8.0.15或更早版本,则MySQL参考手册会说: 该CHECK子句已解析,但所有存储引擎均将其忽略。 尝试触发… 希望能有所帮助。

  • 问题内容: 我正在研究触发器和约束。 我有一个使用触发器的问题(说实话,我不确定如何使用触发器。) 假设我们有一个教师表。 这个教师表包含Teacher_id,ssn,first_name,last_name,class_time 例如, 和 假设学生人数上限为25(学生人数上限由老师定义,因此可以是10、22、25 …等任意数字) 一个学生想添加鲍勃的班级。但是,我想触发拒绝添加学生的触发器。(

  • 问题内容: 我们有一个用户表,每个用户都有一个唯一的电子邮件和用户名。我们尝试在我们的代码中执行此操作,但是我们希望确保用户不会以相同的电子邮件用户名插入(或更新)到数据库中。我添加了一个触发器,以防止插入重复的用户。 但是对于更新触发器,我不知道如何执行此操作。我在Google上找到了以下示例:http : //www.devarticles.com/c/a/SQL- Server/Using-

  • 是否可以更改此触发器,以便表获得插入的2个列值(,)? 如何找到的值? 如果它是已知的并且可以插入表,那么它是否也可以插入表? 创建表排序顺序: 创建表图像: 错误消息: 错误1054:“new”SQL语句中的列“sortOrder”未知: 在INSERT ON image之前为每一行开始INSERT to nextcart.sortOrder设置sortOrderId=NULL,sortOrde