在sql中使用两个检查约束

时间:2016-01-13 07:11:36

标签: mysql sql constraints using

我正在寻找为一个属性使用两种可能性的可能性。这是一个例子:

CREATE TABLE person (
 name VARCHAR(200), 
 age INTEGER CONSTRAINT adult 
 CHECK (age >= 18)
)

如果年龄超过18岁,代码将会调用一名成人,但现在我希望如果他未满18岁就会被称为儿童。

CREATE TABLE  Person (
Id INTEGER NOT NULL PRIMARY KEY,
power_level INTEGER NOT NULL,
evilness_level INTEGER NOT NULL,
name VARCHAR(256) NOT NULL UNIQUE,
)

或此处如果该人的evilness_level为< 0这是一个超级英雄,否则它是一个超级恶棍。

祝你有个美好的一天!

1 个答案:

答案 0 :(得分:1)

您可以尝试创建类似

的TRIGGER
CREATE TRIGGER trig_evilness_level_check BEFORE INSERT ON Person 
FOR EACH ROW 
BEGIN 
IF NEW.evilness_level < 0 THEN 
SET NEW.Name = 'super hero';
ELSE
SET NEW.Name = 'super villain';
END IF; 
END

同样,您也可以为年龄检查创建触发器。

建议创建TRIGGER而不是CHECK约束的原因从manual可以清楚地看出:

  

CHECK子句被解析但被所有存储引擎忽略。