我已经写了这个触发器,但它不起作用,我发现了这个错误:
11:24:11创建TRIGGER check_venduti插入venduti FOR后 EACH ROW BEGIN SELECT count(*)AS num_rows FROM prodotto WHERE cod_prodotto = NEW.cod_prodotto if numrows< 0然后SIGNAL “错误”结束错误代码:1064。您的SQL中有错误 句法;查看与MySQL服务器版本对应的手册 在'if numrows<附近使用正确的语法0然后SIGNAL “错误”结束'在第6行0.000秒
这些是我的表格:
CREATE TABLE clienti (cod_cliente integer(4) auto_increment,nome varchar(100),cognome varchar(100),primary key(cod_cliente))Engine=InnoDB;
CREATE TABLE prodotto(cod_prodotto integer(4) auto_increment,descrizione varchar(100),qnt integer(4),primary key(cod_prodotto))Engine=InnoDB;
CREATE TABLE venduti (cod_vendita integer(4) auto_increment,cod_cliente integer(4) REFERENCES clienti(cod_cliente),cod_prodotto integer(4)
REFERENCES prodotto(cod_prodotto),主键(cod_vendita))引擎= InnoDB;
这是我的触发器:
delimiter |
CREATE TRIGGER check_venduti
BEFORE INSERT ON venduti
FOR EACH ROW
BEGIN
SELECT count(*) AS num_rows FROM prodotto WHERE cod_prodotto=NEW.cod_prodotto
if num_rows == 0 then
SIGNAL "error"
end;
END;
|
现在,按照你的回答我在这种模式下编辑了我的代码:
delimiter |
CREATE TRIGGER check_venduti
BEFORE INSERT ON venduti
FOR EACH ROW
BEGIN
DECLARE num_rows INT;
SELECT count(*) INTO num_rows FROM prodotto WHERE cod_prodotto=NEW.cod_prodotto;
if num_rows==0 then
SIGNAL "error"
end;
END;
|
但我收到同样的错误:
答案 0 :(得分:1)
出现语法错误是因为您尚未终止SELECT
语句。
即使您终止SELECT
语句,也不会在num_rows
语句中定义IF
变量。
您可以将SELECT
语句的结果存储在变量中以供后续测试:
BEGIN
DECLARE num_rows INT;
SELECT COUNT(*) INTO num_rows ... ;
IF num_rows = 0 THEN
...
但是,您真正尝试做的事情似乎是在venduti.cod_prodotto
上强制执行foreign key constraint:
ALTER TABLE venduti
ADD FOREIGN KEY (cod_prodotto) REFERENCES prodotto (cod_prodotto);