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

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

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

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

谁能帮忙....!

【问题讨论】:

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

标签: mysql


【解决方案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 约束?
    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2016-03-11
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多