Есть решение. Вы можете использовать некоторые вспомогательные триггеры. Предположим, что вы вставляете данные (или загружаете из файла) в таблицу main . Тогда у вас есть table1 (c1, c2) , table2 (c3, c4) и table3 (c5) , как в вашем вопросе.
Сейчас:
- мы используем trigger1 на основной таблице для вставки данных в table1 . Некоторые переменные сеанса используются для хранения временных значений полей.
- мы используем триггер2 в таблица1 таблица для вставки данных в таблица2
- мы используем триггер3 на таблица2 таблица для вставки данных в таблица3
Давайте посмотрим на скрипт:
CREATE TABLE main (
c1 varchar(255) DEFAULT NULL,
c2 varchar(255) DEFAULT NULL,
c3 varchar(255) DEFAULT NULL,
c4 varchar(255) DEFAULT NULL,
c5 varchar(255) DEFAULT NULL
)
ENGINE = INNODB;
CREATE TABLE table1 (
id int(11) NOT NULL AUTO_INCREMENT,
c1 varchar(255) DEFAULT NULL,
c2 varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 10;
CREATE TABLE table2 (
id int(11) NOT NULL AUTO_INCREMENT,
id_ref_table1 int(11) DEFAULT NULL,
c3 varchar(255) DEFAULT NULL,
c4 varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 20;
CREATE TABLE table3 (
id int(11) NOT NULL AUTO_INCREMENT,
id_ref_table2 int(11) DEFAULT NULL,
c5 varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB;
CREATE TABLE main (
c1 varchar(255) DEFAULT NULL,
c2 varchar(255) DEFAULT NULL,
c3 varchar(255) DEFAULT NULL,
c4 varchar(255) DEFAULT NULL,
c5 varchar(255) DEFAULT NULL
)
ENGINE = INNODB,
AUTO_INCREMENT = 30;
DELIMITER $$
CREATE TRIGGER trigger1
AFTER INSERT
ON main
FOR EACH ROW
BEGIN
SET @c3 = NEW.c3;
SET @c4 = NEW.c4;
SET @c5 = NEW.c5;
INSERT INTO table1 (c1, c2)
VALUES (NEW.c1, NEW.c2);
END
$$
CREATE TRIGGER trigger2
AFTER INSERT
ON table1
FOR EACH ROW
BEGIN
INSERT INTO table2 (id_ref_table1, c3, c4)
VALUES (NEW.id, @c3, @c4);
END
$$
CREATE TRIGGER trigger3
AFTER INSERT
ON table2
FOR EACH ROW
BEGIN
INSERT INTO table3 (id_ref_table2, c5)
VALUES (NEW.id, @c5);
END
$$
DELIMITER ;
И некоторые операторы INSERT с результатом:
INSERT INTO main(c1, c2, c3, c4, c5) VALUES
('1', '2', '3', '4', '5'),
('11', '22', '33', '44', '55');
SELECT id, c1, c2 FROM table1;
------------------------------
10 1 2
11 11 22
SELECT id, id_ref_table1, c3, c4 FROM table2;
---------------------------------------------
20 10 3 4
21 11 33 44
SELECT id, id_ref_table2, c5 FROM table3;
-----------------------------------------
30 20 5
31 21 55