我有相当多的MSSQL server.We的经验--从MYSQL迁移到SQL server.I -我从来没有使用过MYSQL,所以我使用这个链接进行了一些不同的工作。
在页面的一个地方,下面是截断的定义。
SQL标准将截断表tablename语句(可选的特性ID F200,在SQL:2008中是新的)定义为:删除基表的所有行,而不导致任何触发操作。 不幸的是,标准没有指定 1.是否允许在涉及其他语句的事务中使用截断表 2.截断表是否意味着立即提交
对于SQL server,页面显示
遵循标准。 在MSSQL中,在涉及其他操作的事务中允许截断表,截断表并不意味着立即提交操作。
对于MYSQL,页面上写着
MySQL有一个截断表语句,但它并不总是遵循标准。 注意,在某些情况下,MySQL的截断命令实际上相当于一个无限制的DELETE命令(即:潜在的缓慢调用和触发器调用)。它的行为取决于表所管理的存储引擎。 当使用InnoDB (事务安全)表时,在涉及其他操作的事务中允许截断表,但是截断表意味着立即提交操作。
在SQLServer中,当您截断表时
1.操作可以最少记录。
2.只发生页释放并登录事务日志。
所以我的问题是:
1.标准中的以下措辞意味着什么,以及SQL server是如何遵循标准的,而MYSQL则不是。
截断表是否意味着立即提交?
发布于 2016-06-29 09:06:48
感谢Clifton_h的链接和这个问题的答案.
我的问题是,这句话意味着什么?
截断表是否意味着立即提交?
这一切归结为您是否可以回滚截断。
MYSQL和Oracle的:
您不能回滚截断,因为那些DBMS确实在事务后应用隐式提交,并且只有在出现错误时才会回滚,但是用户不能这样做。
用于SQL server的:
您可以回滚截断,因为没有应用立即提交。
https://stackoverflow.com/questions/38090931
复制相似问题