两个表上的MySQL BEFORE INSERT触发器

时间:2013-01-15 22:00:35

标签: mysql transactions triggers

我是一个MySQL触发新手,无法理解如何做一些看似非常简单的事情。

我有两个表,old_table和new_table,我试图使用INSERT,DELETE和UPDATE触发器保持同步。

我需要使用未设置的old_table中的自动增量编号,使用BEFORE INSERT触发器更新new_table。

我建议之前不能使用AFTER INSERT触发器,因为我希望首先发生new_table插入,如果失败,那么old_table插入也会失败。


CREATE TRIGGER `old_db`.`test_insert` BEFORE INSERT ON `old_table`
FOR EACH ROW BEGIN
INSERT INTO new_table (`first_name`, `family_name`,`old_table_autoincrement_id`)
VALUES (NEW.first_name, `NEW.family_name`, `???????????????`);

UPDATE new_table set some_other_field = LAST_INSERT_ID() where id = LAST_INSERT_ID();

END
//

我基本上想把整个事情包装在TRANSACTION中,所以如果INSERT(触发器或基本INSERT)的任何部分失败,我可以ROLLBACK。

我也熟悉MySQL中的TRANSACIONS,并且知道它们在我正在使用的MyISAM存储引擎上不可用,而且我被迫运行一个非常旧版本的MySQL - 5.0.95。

我查看了LAST_INSERT_ID(),但这是每个连接,也不是每个数据库,所以我不能使用它。我无法使用SIGNAL语法告诉我错误,因为它不会在我的MySQL版本上运行。

0 个答案:

没有答案