2014-01-23 88 views
1

我有一個錯誤,當我想創建一個觸發器來檢查salle表中的新條目 我有一個salle表(nSalle,nbComputer,負責任) 我想在插入之前ckeck如果nSalle在(1,2,3,4,5)否則,我將限制插入mysql觸發ckeck約束

我已經創建了一個觸發器,我沒有錯誤,但是當我插入一個值!=(1,2,3,4,5 )我把它插入女巫是不是我想要的

她是我的代碼到目前爲止

delimiter // 

create trigger before_insert_salle before insert 
on salle 
for each row 
begin 
(nSalle,nbComputer,responsible) 
if new.nSalle in (1,2,3,4,5) then 
set new.nSalle = new.nSalle, 
    new.nbComputer = new.nbComupter, 
    new.responsible = new.responsible ; 
end if ; 
end // 

當我插入像這樣

insert into salle values (10,20,'Joe')是作品的記錄,女巫是錯的10不在(1,2,3,4,5)

回答

1

您希望在約束違反發出錯誤信號。 MySQL的現在,您可以用signal做到這一點:

delimiter // 

create trigger before_insert_salle before insert 
on salle 
for each row 
begin 
declare msg varchar(255); 
if new.nSalle not in (1,2,3,4,5) then 
    SET msg = concat('Constraint on nSalle violated: invalid value ', cast(new.nSalle as varchar(255))); 
    SIGNAL sqlstate '45000' SET message_text = msg; 
end if ; 
end // 

的文檔上signalhere

+0

我收到一個錯誤錯誤1193(HY000):未知的系統變量'消息' – advseo32

+0

我添加了declare語句。 –