gpt4 book ai didi

mysql - 与截断语句的标准定义混淆

转载 作者:行者123 更新时间:2023-11-30 22:16:33 26 4
gpt4 key购买 nike

我在 MSSQL 服务器方面有相当多的经验。我们有一个从 MYSQL 到 SQL 服务器的数据库迁移。我从来没有使用过 MYSQL,所以我正在使用这个 link 来解决差异。 .

在页面的一个地方,下面是Truncate的定义..

The SQL standard defines the TRUNCATE TABLE tablename statement (optional feature ID F200, new in SQL:2008) as: Delete all rows of a base table without causing any triggered action.

Unfortunately, the standard doesn't specify
1. whether TRUNCATE TABLE should be allowed in a transaction involving other statements, or not
2. whether TRUNCATE TABLE should imply an immediate COMMIT, or not

对于 SQL 服务器,页面显示

Follows the standard.

In MSSQL, TRUNCATE TABLE is allowed in a transaction involving other operations, and TRUNCATE TABLE does not imply an immediate COMMIT operation.

对于MYSQL,页面说

MySQL has a TRUNCATE TABLE statement, but it doesn't always follow the standard.

Note that in some cases, MySQL's truncate command is really the equivalent of an unrestricted DELETE command (i.e.: potentially slow and trigger-invoking). Its behaviour depends on which storage engine the table is managed by.

When using InnoDB (transaction safe) tables, TRUNCATE TABLE is allowed in a transaction involving other operations, however TRUNCATE TABLE implies an immediate COMMIT operation.

在 SQLServer 中,当你截断一个表时
1.操作可能被最小化记录
2.只有页面解除分配发生并记录在事务日志中

所以我的问题是:
1.以下标准中的措辞是什么意思,SQL Server 是如何遵循标准而 MYSQL 不是。

whether TRUNCATE TABLE should imply an immediate COMMIT, or not

最佳答案

感谢来自 Clifton_h 的链接和对此 question 的回答...

我的问题是这个措辞是什么意思

whether TRUNCATE TABLE should imply an immediate COMMIT, or not

这一切都归结为您是否可以回滚截断..

对于 MYSQL 和 Oracle:
你不能回滚截断,因为那些 DBMS 确实在事务后应用隐式提交,只有在出错的情况下才会回滚,但用户不能这样做

对于 SQL 服务器:
您可以回滚截断,因为不应用立即提交..

关于mysql - 与截断语句的标准定义混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38090931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com