我在phpMyAdmin中创建了一个包含MySQL的表。我想使用CHECK约束来确保VATPERCENTAGE的新值介于0和100之间。当前语法不正确。如何正确使用两个CHECK,或者更好,我可以使用一个CHECK查看它们是否在两个数字之间?
CREATE TABLE JOBSFORCLIENTS(
JOBID NUMERIC(3) NOT NULL PRIMARY KEY,
CLIENTID NUMERIC(3) NOT NULL,
VATPERCENTAGE NUMERIC(3,2) NOT NULL CHECK (VATPERCENTAGE >= 0) AND CHECK (VATPERCENTAGE <= 100)
);
答案 0 :(得分:1)
不幸的是,MySQL仍然不支持 CHECK约束。
<强> CREATE TABLE Syntax 强>
所有存储引擎都会解析CHECK子句,但忽略。
这是 SQLFiddle 演示
现在您可以使用一对触发器强制执行此约束
CREATE TRIGGER VATPERCENTAGE_CHECK_INSERT
BEFORE INSERT ON JOBSFORCLIENTS
FOR EACH ROW
SET NEW.VATPERCENTAGE = IF(NEW.VATPERCENTAGE BETWEEN 0 AND 100, NEW.VATPERCENTAGE, NULL);
CREATE TRIGGER VATPERCENTAGE_CHECK_UPDATE
BEFORE UPDATE ON JOBSFORCLIENTS
FOR EACH ROW
SET NEW.VATPERCENTAGE = IF(NEW.VATPERCENTAGE BETWEEN 0 AND 100, NEW.VATPERCENTAGE, NULL);
这个想法很简单 - 如果新值超出有效值范围,我们只会违反NOT NULL
列上的VATPERCENTAGE
约束,从而有效地阻止插入和(或)更新行。这种方法适用于5.5之前的MySQL。如果您要输出相应的消息,可以使用SIGNAL
,如果您使用的是MySQL 5.5或更高版本。
这是 SQLFiddle 演示
答案 1 :(得分:-1)
实际上很简单。
CHECK (VATPERCENTAGE BETWEEN 0 AND 100)