fer*_*akp 4 mysql transactions mysql-workbench
我在这里进行简单的交易;
START TRANSACTION;
INSERT INTO user_photos(id, user_id, meta, upload_timestamp) VALUES (1211, 1, '{"a"}',
from_unixtime(unix_timestamp()));
UPDATE user_photos set user_id = '{"test"}' WHERE user_id = 1;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
INSERT 语句将起作用,但第二条语句(UPDATE 语句)将失败,因为 user_id 列的类型为 INTEGER。
我想要一个事务,如果任何语句(事务内)失败,该事务将回滚。此交易的行为并非如此。
我使用INNODB引擎。为什么这个交易不成功?
MYSQL 在事务级别没有“自动回滚”功能。
如果某个语句失败,则该语句将回滚,但事务不会回滚。如果运行 COMMIT,MySQL 会提交当前事务的所有非回滚语句:这就是所发生的情况。如果运行 ROLLBACK,则所有语句都会回滚,无论它们失败还是成功。
如果您想要不同的行为,您需要将其编码到应用程序代码中。这可以通过存储过程来完成:请参阅mysql transaction - roll back on any exception。
| 归档时间: |
|
| 查看次数: |
3673 次 |
| 最近记录: |