如果调用回滚,为什么 MySQL 会插入行然后将其删除?
例如,使用以下代码:
declare exit handler for not found rollback;
declare exit handler for sqlwarning rollback;
declare exit handler for sqlexception
BEGIN
select last_insert_id();
rollback;
END;
START TRANSACTION;
INSERT INTO test (text) VALUES ('this_insert_works');
INSERT INTO test (id, text) VALUES (3,'this_insert_fails');
在存储过程的以下代码中,如果我执行它,然后在没有最后一行的情况下再次执行它(它会起作用),我可以看到“缺少 auto_increment ID”,因为该行被插入然后被删除。返回的选择返回一个不存在的 ID。
如何避免这种行为?