如果在mysql命令列表上发生任何错误,是否可以自动回滚?
例如:
begin transaction;
insert into myTable values1 ...
insert into myTable values2 ...; -- will throw an error
commit;
Run Code Online (Sandbox Code Playgroud)
现在,在执行我希望整个交易失败,因此我应该不看到值1在myTable的.但不幸的是,即使事务有错误,表也会被值1傀儡.
我有什么想法让它回滚?(再次,任何错误)?
编辑 - 从DDL更改为标准SQL
我很快浏览了MySQL手册,但没有找到有关我的问题的确切信息.这是我的问题:如果我有一个InnoDB表A,其中有两个触发器由'AFTER INSERT ON A'和'AFTER UPDATE ON A'触发.更具体地说,例如:一个触发器定义为:
CREATE TRIGGER test_trigger AFTER INSERT ON A
FOR EACH ROW
BEGIN
INSERT INTO B SELECT * FROM A WHERE A.col1 = NEW.col1
END;
Run Code Online (Sandbox Code Playgroud)
你可以忽略BEGINAND 之间的查询END,基本上我的意思是这个触发器会在表B中插入几行,这也是一个InnoDB表.
现在,如果我启动一个事务,然后在表A中插入许多行,比如:10K行,如果没有与表A关联的触发器,那么所有这些插入都是原子的,这是肯定的.现在,如果表A与几个插入/更新触发器相关联,这些触发器将许多行插入/更新到表B和/或表C等,那么所有这些插入和/或更新是否仍然是原子的?
我认为它仍然是原子的,但它很难测试,我在手册中找不到任何解释.有谁可以证实这一点?