gpt4 book ai didi

mysql - 我怎样才能在mysql中的for every row循环内执行for every row循环?

转载 作者:行者123 更新时间:2023-11-29 13:23:33 25 4
gpt4 key购买 nike

好吧,伙计们,我正在尝试在另一个 for every row 循环中执行一个 for every row 循环,我对 mysql 真的很陌生,这是我的第一个触发器我有一个名为 Disponivel 的表,我想要的是看看是否我尝试在名为 Venda 的表中插入的每一行都已经在 Disponivel 表中,如果是这种情况,我想将其插入到表 Venda 中。如果我尝试插入的行不是表 Disponivel 的一部分,则不应将其插入表 Venda 中。有人可以帮忙吗?这就是我所拥有的。

  DELIMITER $$
create trigger venda_disponivel
before insert on Venda
for each row begin
for each row in Disponivel begin
if ((new.nomeA = Disponivel.nomeA) and (new.dia = Disponivel.dia) and (new.mes = Disponivel.mes) and (new.ano = Disponivel.ano) and (new.nomeR = Disponivel.nomeR)) then
end if;
end;
end$$
DELIMITER ;

它给了我这个错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'for each row in Disponivel begin if ((new.nomeA = Disponivel.nomeA) and (new.d' at line 4

create table Disponivel(
NomeA varchar(80),
NomeR varchar(80),
dia integer,
mes varchar(45),
ano integer,
primary key(nomeA, nomeR, dia, mes, ano),
foreign key(nomeA) references Prato(nomeA),
foreign key(nomeR) references Restaurante(nomeR),
foreign key(dia, mes, ano) references Data(dia, mes, ano));

create table Venda(
NomeA varchar(80),
dia integer,
mes varchar(45),
ano integer,
nomeR varchar(80),
num integer,
primary key(nomeA, nomeR, dia, mes, ano),
foreign key(nomeA) references Prato(nomeA),
foreign key(nomeR) references Restaurante(nomeR),
foreign key(dia, mes, ano) references Data(dia, mes, ano));

最佳答案

FOR EACH 在 MySQL 中不是循环结构FOR EACH ROW 只是 CREATE TRIGGER 的一部分的子句。语句,仅表示将针对受触发器影响的每一行执行后面的代码。

现在可以通过额外的 FK 强制执行此约束,无需触发器

create table Venda(
NomeA varchar(80),
dia integer,
mes varchar(45),
ano integer,
nomeR varchar(80),
num integer,
primary key(nomeA, nomeR, dia, mes, ano)
,foreign key(nomeA) references Prato(nomeA)
,foreign key(nomeR) references Restaurante(nomeR)
,foreign key(dia, mes, ano) references Data(dia, mes, ano)
,foreign key(nomeA, nomeR, dia, mes, ano) references Disponivel(nomeA, nomeR, dia, mes, ano)
);

这里是SQLFiddle演示。尝试取消最后一个插入的注释并单击Build Schema。您将看到 FK 不允许插入此行。

关于mysql - 我怎样才能在mysql中的for every row循环内执行for every row循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20448175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com