我试图得到一个后插入触发器不回滚插入到innodb表的插入。 MyISAM似乎没有这个问题。插入触发器后MySQL - MyISAM与InnoDB
让我说明:
CREATE TABLE `testTable` (
`id` int(10) AUTO_INCREMENT,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB; #Engine supports transactions
CREATE TABLE `dummyTable` (
`id` int(10) AUTO_INCREMENT,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
DELIMITER $$
CREATE TRIGGER triggerTest AFTER INSERT ON `testTable`
FOR EACH ROW
BEGIN
INSERT INTO dummyTable VALUES(1, 2, 3, 4); #This will throw a column count error
END;$$
DELIMITER ;
INSERT INTO testTable(data) VALUES('This insert will be rolled back');
SELECT COUNT(1) FROM testTable; # 0
如果更改的testTable
发动机的MyISAM原来的插入不会被回滚(我认为)MyISAM不支持事务。
CREATE TABLE `testTable` (
`id` int(10) AUTO_INCREMENT,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM; #Engine does NOT support transactions
CREATE TABLE `dummyTable` (
`id` int(10) AUTO_INCREMENT,
`data` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
DELIMITER $$
CREATE TRIGGER triggerTest AFTER INSERT ON `testTable`
FOR EACH ROW
BEGIN
INSERT INTO dummyTable VALUES(1, 2, 3, 4); #This will throw a column count error
END;$$
DELIMITER ;
INSERT INTO testTable(data) VALUES('This insert will not be rolled back');
SELECT COUNT(1) FROM testTable; # 1
问:是否有一种方法,使后面插入触发InnoDB表保存原始的插入,如果有在触发的错误?
当然,MyISAM不会回滚原始插入,因为它无法回滚任何内容。 –