【发布时间】:2016-10-31 15:35:56
【问题描述】:
我在使用 MSSQL 服务器方面有相当多的经验。我们有一个从 MYSQL 到 SQL 服务器的数据库迁移。我从来没有使用过 MYSQL,所以我在使用这个 link 时遇到了差异。
在页面的某处,下面是Truncate的定义..
SQL 标准将 TRUNCATE TABLE 表名语句(可选功能 ID F200,SQL:2008 中的新功能)定义为: 删除基表的所有行而不引起任何触发操作。
不幸的是,标准没有指定
1. 在涉及其他语句的事务中是否应该允许TRUNCATE TABLE
2. TRUNCATE TABLE 是否应该暗示立即提交
对于 SQL 服务器,页面显示
遵循标准。
在 MSSQL 中,TRUNCATE TABLE 允许在涉及其他操作的事务中使用,TRUNCATE TABLE 并不意味着立即进行 COMMIT 操作。
对于 MYSQL,页面上说
MySQL 有一个 TRUNCATE TABLE 语句,但它并不总是遵循标准。
请注意,在某些情况下,MySQL 的 truncate 命令实际上等同于不受限制的 DELETE 命令(即:可能很慢并且会触发调用)。其行为取决于管理该表的存储引擎。
在使用 InnoDB(事务安全)表时,TRUNCATE TABLE 允许在涉及其他操作的事务中使用,但 TRUNCATE TABLE 意味着立即执行 COMMIT 操作。
在 SQLServer 中,当您截断表时
1.操作可能被最小化记录
2.只有页面释放发生并记录在事务日志中
所以我的问题是:
1.标准中的以下措辞是什么意思,SQL服务器如何遵循标准而MYSQL不遵循。
TRUNCATE TABLE 是否应该暗示立即提交,或者不
【问题讨论】:
-
只是为了让您了解 truncate table 它的 DDL 查询删除和重新创建表(不删除数据)。它直接删除表并重新创建它。你不能在事务块中执行 DDL
标签: mysql sql-server database-migration