我已经阅读了手册,其中提到每笔交易都会添加一个BEGIN
在开始转储之前声明。有人可以用更容易理解的方式详细说明这一点吗?
这是我读到的:
该选项在从服务器转储数据之前发出 BEGIN SQL 语句。它仅对事务表(例如 InnoDB 和 BDB)有用,因为那样的话
转储发出 BEGIN 时数据库的一致状态,而不会阻塞任何应用程序。”
有人可以详细说明一下吗?
由于转储位于一个事务中,因此您可以获得数据库中所有表的一致视图。这可能最好用一个反例来解释。假设您转储一个包含两个表的数据库,Orders
and OrderLines
- 您无需单个事务即可启动转储。
- 另一个进程将一行插入到
Orders
table.
- 另一个进程将一行插入到
OrderLines
table.
- 转储处理
OrderLines
table.
- 另一个进程删除
Orders
and OrderLines
记录。
- 转储处理
Orders
table.
在此示例中,您的转储将包含以下行:OrderLines
, 但不是Orders
。如果数据之间存在外键,数据将处于不一致的状态并且恢复将失败Orders
and OrderLines
.
如果您在单个事务中完成此操作,则转储将不会有顺序或行(但它会是一致的),因为两者都是在事务开始后插入然后删除的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)