Скопируйте все данные из одной таблицы в другую с помощью триггера | PHPMyAdmin

0

Я новичок в этой триггерной вещи с PHPMyAdmin. Я действительно не знаю, что я делаю неправильно, но хочу просто скопировать все данные из table1 в table2 например, в архив или что-то в этом роде. Каждый раз, когда есть вставка, он должен скопировать данные в table2.

Table1 есть эти атрибуты/поля:

ID
customerID
BookSN(SN = serialnumber)
created_at(when he lend the book)
updated_at(when he gave the book back)

Table2:

Имеет те же атрибуты/поля, что и в Table1

Я пытаюсь решить это:

delimiter //
CREATE TRIGGER 'simple_copy' AFTER INSERT ON table1
FOR EACH ROW BEGIN
insert into table2(id, customerID, BookSN, created_at,updated_at)
select ?? -- i dont know what to write here...
from table1;
END;
//
delimiter ;

Я был бы очень благодарен, если бы вы помогли мне исправить этот общий беспорядок.

  • 0
    «В теле триггера ключевые слова OLD и NEW позволяют вам получить доступ к столбцам в строках, на которые воздействует триггер» dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html, т. Е. Скорее используйте предложение values чем выбрать и NEW.id и т. д. в качестве значений
Теги:

2 ответа

1
Лучший ответ

Если в table1 есть некоторые данные, которые вы хотите скопировать в table2 сначала выполните это:

INSERT INTO table2(id, customerID, BookSN, created_at, updated_at)
SELECT id, customerID, BookSN, created_at, updated_at
FROM table1;

Затем вы можете использовать триггер для непрерывной копирования вновь вставленных данных из table1 в table2.

DELIMITER //
CREATE TRIGGER 'simple_copy' AFTER INSERT ON table1
FOR EACH ROW BEGIN
INSERT INTO table2(id, customerID, BookSN, created_at, updated_at)
VALUE (new.id, new.customerID, new.BookSN, new.created_at, new.updated_at);
END//
DELIMITER ;

Но если table1 пуста, то просто запустите сразу триггер.

0

Если вы хотите скопировать все столбцы, вы должны использовать это

delimiter #
CREATE TRIGGER 'simple_copy' AFTER INSERT ON table1
FOR EACH ROW 
BEGIN
insert into table2(id, customerID, BookSN, created_at,updated_at)
values (new.id, new.customerID, new.BookSN, new.created_at,new.updated_at)
from table1;
END#
delimiter ;
  • 0
    Выглядит хорошо, но я получаю сообщение об ошибке непосредственно в строке 1, что-то не так с разделителем?
  • 0
    @DarkShadow Обновленный ответ, ошибка, которую вы получаете, может быть, потому что я добавил точку с запятой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню