mysql - 如何创建一个值必须大于 x 的 int 列?

标签 mysql

嗯,基本上是标题。

我需要创建包含几列的新表(这很容易),但其中之一需要确保输入的值高于 21(这很困难)。我怎样才能做到这一点?

CREATE TABLE myBD.myTable
        (`name` VARCHAR(90),
        `age` INT                --here I need to make sure it's above 21>,
        PRIMARY KEY (`name`));

最佳答案

将触发器设置为 reject any value that does not abide by your constraint 。实际上有两个:一个用于插入,另一个用于更新。

例如:

DELIMITER $$

CREATE TRIGGER insert_check_greater_than_21
     BEFORE INSERT ON tableName FOR EACH ROW
     BEGIN
          IF NEW.fieldName <= 21
          THEN
               SIGNAL SQLSTATE '45000'
                    SET MESSAGE_TEXT = 'fieldName must be greater than 21';
          END IF;
     END;
$$

CREATE TRIGGER update_check_greater_than_21
     BEFORE UPDATE ON tableName FOR EACH ROW
     BEGIN
          IF NEW.fieldName <= 21
          THEN
               SIGNAL SQLSTATE '45000'
                    SET MESSAGE_TEXT = 'fieldName must be greater than 21';
          END IF;
     END;
$$

这可能不是定义触发器的最优雅的方式,但您可以在您最喜欢的 MySQL 引用中阅读有关它们的更多信息。

MySQL 确实有所谓的“检查约束”语法,but currently ignores them .

关于mysql - 如何创建一个值必须大于 x 的 int 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53178354/

相关文章:

mysql - LEFT JOIN 使用日期列的最新行

mysql - C++ <mysql/mysql.h> 如何包含它?

php - Laravel - 不允许对图像设置为 Nullable 的请求验证并给出错误原因?

mysql - MySQL8 的 Hibernate 方言

mysql - 尝试将现有生产数据库表列从枚举转换为 VARCHAR

sql - 关于百万行的连接和表的问题

mysql - IPv6 SQL 到 Perl

javascript - 如何从同一个类中的另一个方法检索最后插入的 id?

php - 数据库查询(MySQL 与 PHP)未显示在 DOM 中

c# - 在 MySQL 的结果中找不到指定的列