我对MSSQL服务器有相当多的经验。我们有从MYSQL到SQL服务器的数据库迁移。我从未使用过MYSQL,所以我使用这个link来解决差异。
在页面的一个位置,下面是Truncate的定义..
SQL标准将TRUNCATE TABLE tablename语句(可选功能ID F200,SQL:2008中的new)定义为: 删除基表的所有行而不会导致任何触发操作。
不幸的是,该标准没有指明
1.是否应该在涉及其他陈述的交易中允许TRUNCATE TABLE 2. TRUNCATE TABLE是否应该意味着立即执行COMMIT,而不是
对于SQL Server,页面显示
遵循标准。
在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是否应该意味着立即执行COMMIT,而不是
答案 0 :(得分:0)
感谢Clifton_h的链接以及此question的答案......
我的问题是这个措辞是什么意思
TRUNCATE TABLE是否应该意味着立即执行COMMIT,而不是
这一切都归结为你是否可以回滚截断..
对于MYSQL和Oracle:
你不能回滚截断,因为那些DBMS在事务之后确实应用了隐式提交,只有在出现错误时才会回滚,但是用户不能这样做
对于SQL Server:
您可以回滚截断,因为不会应用立即提交..