使用像断言这样的触发器

时间:2013-07-10 10:39:09

标签: mysql triggers

我知道在MySQL中我们不能使用断言。我有这些表:

CREATE TABLE `soggiorno` (  
`idSoggiorno` varchar(16) NOT NULL,  
`price` int(11) NOT NULL,  
 PRIMARY KEY (`idSoggiorno`))  

 CREATE TABLE `prenotazione` (  
`idPrenotazione` varchar(16) NOT NULL,  
`soggiorno` varchar(16) NOT NULL,  
`paymentType` varchar(45) NOT NULL,    
 PRIMARY KEY (`idPrenotazione`))    
 CONSTRAINT `guest_ibfk_1` FOREIGN KEY (`soggiorno`) REFERENCES `soggiorno` (`idSoggiorno`)

我必须确保,如果'价格'> 1500,你不能用“现金”支付。如果没有断言,我怎么能这样做呢?我正在考虑触发......感谢所有

1 个答案:

答案 0 :(得分:0)

尝试

CREATE TRIGGER tg_prenotazione_before_insert 
BEFORE INSERT ON prenotazione
FOR EACH ROW 
SET NEW.soggiorno = IF((SELECT price 
                          FROM soggiorno 
                         WHERE idSoggiorno = NEW.soggiorno) > 1500 
                       AND NEW.paymentType = 'Cash', NULL, NEW.soggiorno);

它检查您所需的条件是什么(如果价格> 1500且paymentType为'Cash'),如果匹配,则会违反NOT NULL约束,从而有效阻止插入行。

这是 SQLFiddle 演示。 尝试取消注释演示中的最后一个插入语句,你会发现它不允许你插入它。