Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Триггер для копирования одной таблицы в другую / 8 сообщений из 8, страница 1 из 1
27.07.2011, 15:09:20
    #37369032
Триггер для копирования одной таблицы в другую
Надо чтоб в новую таблицу table2 вставлялись значения после добавления записи в таблицу table1 тогда, когда поле field=0 или 1.
Код: plaintext
1.
2.
3.
create trigger trig after insert on table1
for each row begin
insert into table2 set field=new.field where new.field= 0  or new.field= 1 ;
end;

Так ругается на синтак. ошибку.

Пробовал и без условий:

Код: plaintext
1.
2.
3.
4.
create trigger trig after insert on table1
for each row begin
insert into table2 set field=new.field;

end;

Так тоже синтаксическая ошибка. Подскажите, пожалуйста, как правильно написать такой триггер?
...
Рейтинг: 0 / 0
27.07.2011, 15:34:56
    #37369092
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер для копирования одной таблицы в другую
Делимитер не забыли?
...
Рейтинг: 0 / 0
27.07.2011, 19:22:27
    #37369656
Триггер для копирования одной таблицы в другую
нет, не забыл
...
Рейтинг: 0 / 0
27.07.2011, 19:47:18
    #37369684
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер для копирования одной таблицы в другую
Во-первых, почитайте справку по синтаксису INSERT INTO. Синтаксис Insert ... Set работает только со скалярными данными, а с табличными необходим Insert ... Select.
Во-вторых, таблица NEW в триггере состоит ровно из одной записи. Зато триггер вызывается столько раз, сколько строк инсертится.
В третьих, запрос (будь он верный, конечно) добавит во вторую таблицу столько строк, сколько добавлено в первую. А значение field влияет лишь на то, что будет добавлено в новую запись. Косяк логики.
...
Рейтинг: 0 / 0
27.07.2011, 21:25:58
    #37369778
Триггер для копирования одной таблицы в другую
Спасибо.
Не могли бы вы привести корректный код для моего случая?
...
Рейтинг: 0 / 0
27.07.2011, 23:21:56
    #37369890
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер для копирования одной таблицы в другую
Был наполовину неправ.
AkinaСинтаксис Insert ... Set работает только со скалярными данными, а с табличными необходим Insert ... Select.
[skipped]
таблица NEW в триггере состоит ровно из одной записи.
А ещё... одно поле единственной записи для MySQL - скаляр! одно из многих отступлений от стандарта, но оно делает возможным использования SET в именно этом случае.

В общем, вероятно, будет что-то типа

Код: plaintext
1.
2.
3.
4.
5.
6.
create trigger trig after insert on table1
for each row begin
   if (new.field= 0 ) or (new.field= 1 ) then
      insert into table2
      set field = new.field;
   end if;
end;
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
17.05.2014, 17:11:47
    #38644206
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер для копирования одной таблицы в другую
Коллеги, помогите, пожалуйста, корректно написать триггер. Пробовал разными способами, но не получается. :/

У нас есть таблицы (схема прилагается):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE TABLE `Tbl_Groups` (
  `ID_Group` INT NOT NULL AUTO_INCREMENT,
  `Number_group` VARCHAR(20) NULL,
  PRIMARY KEY (`ID_Group`),
  UNIQUE INDEX `Name_subject_UNIQUE` (`Number_group`))
ENGINE = InnoDB;



CREATE TABLE `Tbl_Subject` (
  `ID_Subject` INT NOT NULL AUTO_INCREMENT,
  `Subject_name` VARCHAR(100) NULL,
  PRIMARY KEY (`ID_Subject`))
ENGINE = InnoDB;



CREATE TABLE `Tbl_Subject_has_Groups` (
  `Subject_ID_Subject` INT NULL,
  `Groups_ID_Group` INT NULL,
  CONSTRAINT `fk_Subject_has_Groups_Subject1`
    FOREIGN KEY (`Subject_ID_Subject`)
    REFERENCES `Tbl_Subject` (`ID_Subject`),
  CONSTRAINT `fk_Subject_has_Groups_Groups1`
    FOREIGN KEY (`Groups_ID_Group`)
    REFERENCES `Tbl_Groups` (`ID_Group`))
ENGINE = InnoDB;



Пишу триггер, который должен выполнять копирование новых данных из атрибута "ID_Group" таблицы "Tbl_Groups" в атрибут "Groups_ID_Group" таблицы "Subject_has_Groups".

Код: sql
1.
2.
3.
4.
CREATE TRIGGER FillSubjectHasGroupsFromGroups
	AFTER INSERT ON `Tbl_Groups`
	FOR EACH ROW 
	INSERT INTO `Tbl_Subject_has_Groups` SET `Tbl_Subject_has_Groups`.`Groups_ID_Group` = NEW.`Tbl_Subject_has_Groups`.`Groups_ID_Group`;



Заполняю таблицу "Tbl_Groups" в надежде, что значение из атрибута "ID_Group" скопируется в "Groups_ID_Group" таблицы "Subject_has_Groups":
Код: sql
1.
INSERT INTO `Tbl_Groups` (`Number_group`) VALUES ('Группа №1');


Но вместо этого получаю ошибку, отсылающую к триггеру:
Error Code: 1054. Unknown column 'NEW.Tbl_Subject_has_Groups.Groups_ID_Group' in 'field list'.

Искал информацию в интернете и единственное, что нашёл - люди неправильно использовали кавычки и компилятор принимал значения, которые они хотят передать за имена полей. Но эта проблема к моей ситуации неприменима.

Большая просьба помочь. Сам уже не знаю куда копать, сведующих в MySQL людей нет.
...
Рейтинг: 0 / 0
17.05.2014, 18:46:47
    #38644231
Afelion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Триггер для копирования одной таблицы в другую
Разобрался. Извиняюсь за невнимательной чтение FAQ синтаксиса INSERT.

CREATE TRIGGER FillSubjectHasGroupsFromGroups
AFTER INSERT ON `Tbl_Groups`
FOR EACH ROW
INSERT `Tbl_Subject_has_Groups` (`Groups_ID_Group`) SELECT `ID_Group` FROM `Tbl_Groups`;
SHOW TRIGGERS;
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Триггер для копирования одной таблицы в другую / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]