2014-01-23 6 views
1

У меня есть ошибка, когда я хочу создать триггер, чтобы проверять новую запись в таблице salle У меня есть таблица salle (nSalle, nbComputer, ответственная) Я хочу, чтобы ckeck перед вставкой, если nSalle находится в (1,2,3,4,5) В противном случае я ограничу установкуmysql trigger ckeck constraint

Я создал триггер, у меня нет ошибки, но когда я вставляю значение! = (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 // 

Документация по signal является here.

+0

Я получаю сообщение об ошибке ERROR 1193 (HY000): Неизвестная системная переменная 'msg' – advseo32

+0

Я добавил заявление declare. –

Смежные вопросы