0

我知道在 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,您不能用“现金”支付。没有断言我怎么能做到这一点?我正在考虑一个触发器......谢谢大家

4

1 回答 1

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 是“现金”),如果它是匹配的,它会违反NOT NULL约束,有效地阻止插入行。

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

于 2013-07-10T23:47:06.983 回答