将最大值设置为列

Posted

技术标签:

【中文标题】将最大值设置为列【英文标题】:set maximum value to a column 【发布时间】:2017-07-28 14:53:02 【问题描述】:

我有一个表,其中包含一个名为 age 的列(int 类型)。此列应保持最大值 50。如果超过,则不应更新该行。

表示该列的取值范围为 0 到 50。

如果我尝试将其更新为 51,那么这不应该允许。

谁能帮忙....!

【问题讨论】:

那你为什么使用错误的数据类型呢? ENUM 是你需要的,而不是 INT。 我认为触发器对你来说是正确的方式...... 【参考方案1】:

试试这个:

CREATE TRIGGER check_trigger
  BEFORE INSERT
  ON table
  FOR EACH ROW
BEGIN
  IF NEW.age<0 OR NEW.age>50 THEN
    CALL `Error: Wrong values for age`; -- this trick will throw an error
  END IF;
END

【讨论】:

对于@Gnanendra:如果用户插入错误,@nick rulez 将年龄设置为 null;我的示例引发错误。使用您认为最适合您的情况的方法! @Gnanendra:看看这篇有趣的文章forge.mysql.com/wiki/Triggers#Emulating_Check_Constraints @Gnanendra:接受给你的答案怎么样? ;)【参考方案2】:
create table test (
age tinyint not null ) engine = myisam;

delimiter //
drop trigger if exists max_num//
create trigger max_num before insert on test
for each row 
begin
if new.age < 0 or new.age > 50 then
set new.age = null;
end if;
end//
delimiter ;

insert into test (age) values (100);

为更新做同样的事情。

【讨论】:

【参考方案3】:

您可以使用CHECK 约束:

CREATE TABLE person (
Name VARCHAR(80), 
Age  INT CHECK (Age BETWEEN 5 and 50));

【讨论】:

更糟糕的是,MySQL 允许您使用此定义创建表,但该约束被解析器忽略并且未添加到表中! 有人知道是否有计划在任何 MySQL 数据库引擎的未来版本中添加 CHECK 约束?

以上是关于将最大值设置为列的主要内容,如果未能解决你的问题,请参考以下文章

通过缩进将选择中的最大数字居中对齐

SQL 将行合并为列

extjs3 网格单元最大长度输入验证

将默认值设置为列代码优先方法[重复]

SQL 将索引(订单值)设置为列

在最大解码函数上创建索引