aru*_*run 3 mysql transactions interrupt sql-update
我通过MySQL命令行客户端发出了一个长时间运行的UPDATE查询(一个不正确的查询),并Ctrl-C在几秒钟后停止了它.该命令尚未完成运行.我的数据库是否会针对某些条目进行更新,还是会在事务中发生并且所有内容都会回滚?
mysql> <LONG RUNNING INCORRECT UPDATE STATEMENT>
^CCtrl-C -- sending "KILL QUERY 12088743" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted
mysql>
Run Code Online (Sandbox Code Playgroud)
更新:查询中涉及的所有表都是InnoDB表.
对于INNODB: Mysql手册说InnoDB(事务存储引擎)提供完整的 ACID抱怨.因此,它将立即完成所有操作,或者在中断的情况下不执行操作和回滚.这是MySQL 5.5及以上版本的默认引擎.
MySQL包括与ACID模型紧密相关的InnoDB存储引擎等组件,因此数据不会损坏,并且结果不会因软件崩溃和硬件故障等特殊情况而失真.
对于MYISAM:但是对于非交易的MyISAM存储引擎.这样的存储引擎遵循一种模型,其中数据一次写入一个语句.这是使用原子操作完成的.因此,如果您中断该过程,那么您将直到中断为止.
MySQL服务器中的非事务性存储引擎(如MyISAM)遵循不同的数据完整性范例,称为"原子操作".MyISAM表有效地始终以autocommit = 1模式运行.由于已更改的数据一次写入磁盘一个语句,因此很难保证一系列相关DML操作的一致性,这些操作可能会在中途中断.因此,此模式适用于大多数读取工作负载.在事务方面,当每个特定更新正在运行时,没有其他用户可以干扰它,永远不会有自动回滚,并且没有脏读.
但是,您可以将其LOCK TABLES用作解决方法.这是MySQL 5.5之前的默认存储引擎.*
所以答案取决于您使用的存储引擎.希望有帮助:)
| 归档时间: |
|
| 查看次数: |
3557 次 |
| 最近记录: |