将最大值设置为列
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
约束?以上是关于将最大值设置为列的主要内容,如果未能解决你的问题,请参考以下文章