在phpMyAdmin(MySQL)中对一个字段进行多次检查

时间:2014-11-22 01:17:12

标签: mysql phpmyadmin field constraints

我在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)
 );

2 个答案:

答案 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)