2015-09-24 2 views
0

по многим причинам мне нужно иметь одинаковые данные в двух таблицах. Я начинаю новую систему, и на короткий период мне нужно, чтобы обе системы работали, проблема в старой системе имеет не очень хорошую структуру MySQL, поэтому она не может ее сохранить. Я не хочу менять старую или новую конфигурацию системы. Я думал, что лучшим решением будет поставить некоторые триггеры старого и нового стола что-то вроде этого:Триггеры MYSQL для хранения одинаковых данных в двух таблицах

DROP TRIGGER IF EXISTS table1_table2; 
DELIMITER $$ 
CREATE TRIGGER `table1_table2` AFTER INSERT ON `table1` 
FOR EACH ROW 
BEGIN 
    IF(@disable_triggers != 1) THEN 
     SET @disable_triggers = 1; 
     INSERT INTO table2 (value1,value2) 
     VALUES(NEW.value1, NEW.value2); 
    END IF; 
    SET @disable_triggers = 0; 
END$$ 
DELIMITER ; 

DROP TRIGGER IF EXISTS table2_table1; 
DELIMITER $$ 
CREATE TRIGGER `table2_table1` AFTER INSERT ON `table2` 
FOR EACH ROW 
BEGIN 
    IF(@disable_triggers != 1) THEN 
     SET @disable_triggers = 1; 
     INSERT INTO table1 (value1,value2) 
     VALUES(NEW.value1, NEW.value2); 
    END IF; 
    SET @disable_triggers = 0; 
END$$ 
DELIMITER ; 

при первой попытке я создать триггеры без IF условий и не удалось, потому что table1 заблокирован так второй триггер не может писать Это. Я решил добавить глобальную переменную @disable_triggers, чтобы предотвратить запуск триггеров в циклах, но после вставки ничего не произошло, какие-либо предложения?

+0

Почему вам нужны две таблицы? Бросьте один и замените его на вид – e4c5

+0

спасибо, я надеюсь, что все будет хорошо работать – jesus6402

ответ

0

Благодаря e4c5. Лучшее решение создать VIEW:

CREATE TABLE IF NOT EXISTS `table2` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `t2col1` int(11) DEFAULT 0, 
    `t2col2` int(11) DEFAULT 0, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; 

INSERT INTO `table2` (`t2col1`, `t2col2`) 
SELECT `t1col1`, `t1col2` FROM `table1`; 

DROP TABLE IF EXISTS `table1`; 
CREATE OR REPLACE VIEW `table1` AS 
SELECT `t2col1` AS `t1col1`, `t2col2` AS `t1col2` 
FROM `table2`; 

оба запроса имеют одинаковый результат

SELECT * FROM `table1`; 

и

SELECT * FROM `table2`; 

это то же самое с вкладышем