我如何为mysql中的每个行循环中的每个行循环做一个?

时间:2013-12-07 23:50:22

标签: mysql sql

好吧伙计们,我正在尝试为每个行循环中的每个行循环执行一个,我真的是新的mysql,这是我的frist触发器我有一个名为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 ;

它给了我这个错误:

  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在Disponivel中的每一行附近使用的语法if if((new.nomeA   = Disponivel.nomeA)和(第4行的new.d'

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));

1 个答案:

答案 0 :(得分:1)

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不会允许插入这一行。

相关问题