[在MySQL中]
有没有办法约束任何字段不是0,如果我得到0值将其转换为NULL
例如,两个产品不能具有相同的序列号,但产品可能根本没有序列号
我现在正在使用这个:(少数几个领域)
CREATE TABLE products (
sn DECIMAL(8,2),
UNIQE (sn),
...........
) ENGINE=InnoDB;
CREATE TRIGGER prod_zero1 BEFORE UPDATE ON products FOR EACH ROW
SET NEW.sn=NULLIF(NEW.sn,0);
有没有更短\更快的方法怎么做? 其他问题是,当我尝试在同一个表中的几个字段中使用它时,我得到了massege:
CREATE TRIGGER prod_zero2 BEFORE UPDATE ON products FOR EACH ROW
SET NEW.name=NULLIF(NEW.name,"");
ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
由于
答案 0 :(得分:2)
不要使用多个触发器,使用一个负责所有字段的触发器
CREATE TRIGGER prod_zero2 BEFORE UPDATE ON products FOR EACH ROW
BEGIN
SET NEW.sn=NULLIF(NEW.sn,0);
SET NEW.name=NULLIF(NEW.name,"");
END;
答案 1 :(得分:0)
您可以在一个触发器中执行此操作。
以下是您的示例中的两列合并为一个触发器。我只是做了一个更新触发器,因为这是你在你的例子中所拥有的,但是你也可能想要另一个触发器来为插入做同样的事情。
DELIMITER $$
DROP TRIGGER IF EXISTS tr_b_upd_products $$
CREATE TRIGGER tr_b_upd_products BEFORE UPDATE ON products FOR EACH ROW BEGIN
IF (NEW.sn = 0)
THEN
SET NEW.sn=NULL;
END IF;
IF (NEW.name = '')
THEN
SET NEW.name=NULL;
END IF;
END $$
DELIMITER ;