我编写了一个MySQL触发器,但它给出了语法错误:
create trigger trg_check_row_exists before insert on charges
for each row
begin
if exists (select 1 from charges c where c.product_id = new.product_id) then
signal sqlstate '45000' set message_text = 'Record already exists in charges table';
end if;
end
语法错误来自WHERE子句。这有什么问题?
更新
DELIMITER $$
create trigger trg_check_row_exists before insert on charges
for each row
begin
if exists (select 1 from charges c where c.currency_value_id = new.currency_value_id) then
signal sqlstate '45000' set message_text = 'Record already exists in charges table';
end if;
end$$
DELIMITER ;
必须添加DELIMITER
和$$
。现在它正在工作。
因为有多个语句;
MySQL客户端威胁它们作为单独的语句而不考虑触发器作为单个语句。
答案 0 :(得分:0)
你不应该使用触发器。相反,使用唯一约束/索引:
create unique index unq_charges_productid on charges(product_id);
这将确保一次只有一个产品可以在表中。
此外,您的逻辑似乎表明您需要exists
而不是not exists
。