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

希望する条件 (price > 1500 で paymentType が「Cash」の場合) をチェックし、一致する場合はNOT NULL制約に違反し、行が挿入されないようにします。

これがSQLFiddle のデモです。デモの最後の挿入ステートメントのコメントを外してみてください。挿入できないことがわかります。

于 2013-07-10T23:47:06.983 に答える