2013-12-07 9 views
0

Ну, ребята, я пытаюсь сделать для каждого цикла строк внутри другого для каждого цикла строк, я действительно новичок в mysql, и это мой триггер-триггер. У меня есть таблица Disponivel, и я хотел бы видеть, строк, которые я пытаюсь вставить в таблицу с именем Venda, уже находится в таблице Disponivel, и если это так, я хочу вставить ее в таблицу Venda. Если строка, которую я пытаюсь вставить, не является частью таблицы Disponivel, то она не должна вставляться в таблицу Venda. Может ли кто-нибудь помочь? Это то, что у меня есть.Как я могу сделать для каждого цикла строк внутри a для каждого цикла строки в mysql?

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

Просьба указать точные схемы таблиц для 'Venda' и' Disponivel' в форме 'CREATE TABLE ...' операторов – peterm

+0

сделано, это то, что означало u? – Mop

ответ

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 не позволит вставить эту строку.

+0

отправил схемы (: – Mop

+0

спасибо, что это работает!), И вот я думал об использовании триггеров – Mop

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