【发布时间】:2019-06-14 23:03:19
【问题描述】:
我需要在一堆表中进行 N 次插入,但如果其中任何一个失败,我希望滚动所有插入。
我正在使用 MySql 8.0 和 InnoDB,我花了很多时间试图让它发挥作用,并且我已经读到我应该使用事务来实现这一点,但它没有按照我想要的方式工作,我没有不知道怎么解决。
这是表的定义:
CREATE TABLE IF NOT EXISTS `Example` (
`A` VARCHAR(30) NOT NULL,
`ID` int NOT NULL,
PRIMARY KEY (`ID`)
);
表只包含记录(“abc”,1)
所以我执行
START TRANSACTION;
INSERT INTO `Example` (`A`, `ID`) VALUES ("abd", 2);
INSERT INTO `Example` (`A`, `ID`) VALUES ("abc", 1);
COMMIT;
在事务(“abd”,2)被添加到表之后。 我希望表上没有任何更改,因为事务中的第二次插入失败
【问题讨论】:
-
如果有错误你应该使用
ROLLBACK;而不是COMMIT; -
你是如何执行查询的?
-
但是我怎么知道是否发生了错误呢?
-
如果您手动执行查询,您应该会看到一条错误消息。如果您是使用编程语言进行的,它应该提供一种测试查询是否成功的方法。
-
我正在通过 Mysql 工作台执行它们,但是如何设置一些行为,例如“如果它失败回滚,否则继续”?
标签: mysql sql transactions innodb