SyncNavigator v8.6.2
SyncNavigator是一款功能强大的数据库同步软件,适用于SQL SERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用于大容量数据库快速同步。
安装包下载地址:https://www.syncnavigator.cn/Setup.zip
帮助文档地址:https://www.syncnavigator.cn/Help_zh-CN.chm
Web文档地址:https://www.syncnavigator.cn/chm/index.htm
作者:Atul Gaikwad | 更新时间:2016-04-20 | 评论(11)| 相关:更多> T-SQL
问题
在采访SQL Server候选人时,我发现大多数人都不了解某些基本知识 SQL Server delete和truncate命令之间的差异以及这些操作是否可以 回滚,因此在本技巧中,我们将介绍其中的一些方面。
解
我一直积极参与 面试过程超过10年,并且面试时间超过 从初级到高级的500个SQL DBA。 从开始面试候选人时,我遵循一个简单的过程 基础知识,然后讨论高级主题。 我不希望他们知道所有答案,但是 他们应该了解基础知识,并至少在一个或两个领域工作过 例如群集,镜像,复制,日志传送,性能调整, 故障排除,监视,安装,迁移,灾难恢复 策略等
如果您不知道SQL Server的工作方式,那么您将不知道如何处理某些情况下的专业知识 是必需的。 所以我经常开始 带有“删除和截断有什么区别?”, 我认为这是一个非常基本的概念,每个DBA都必须知道。 令我惊讶的是 听到了许多令人震惊的答案。 一位候选人告诉我截断将删除整个架构和所有表。 我说什么 那DROP呢? (安静)
所以我决定写 DELETE和TRUNCATE之间的区别 举一个例子,使人们可以有一个更好的理解。
每个人都应该知道DELETE是DML命令,而TRUNCATE是DDL命令。 DELETE删除记录一个一个,并为每个记录和 事务日志中的每个删除,而TRUNCATE取消分配页面和 在事务日志中输入要取消分配页面的条目。
人们之间对回滚也有很多误解 在TRUNCATE或DELETE之后。 人们说DELETE可以回滚,但是 可以回滚TRUNCATE。 即使我们开始交易,这是真的吗? 让抯 尝试寻找答案。
让我们创建一个表并插入一些虚拟记录以进行测试:
创建表员工
(
Empid int NOT NULL,
名称nchar(10)NULL,
城市nchar(10)NULL
) ON [PRIMARY]
走
-命令成功完成。
插入到员工值(1,'Shweta','Pune'),(2,'Stella','Hydrabad')
-(遭受的2行)
从员工中选择*
现在我们有了一个带有伪记录的表。 现在让我们在里面做一个DELETE 交易,看看是否可以回滚:
开始交易
-从员工中选择*
从员工那里删除,其中Empid ='1'
从员工中选择*
走
我们删除了Empid等于1的记录,现在只有一条记录:
让我们尝试回滚,看看能否恢复已删除的记录:
回滚交易
从员工中选择*
如您在下面看到的,我们有记录。
让抯为TRUNCATE尝试相同的方法:
开始交易
截断员工表
从员工中选择*
现在我们已经截断了该表并且没有记录,该表为空:
让我们尝试回滚,看看是否可以取回记录。 跑 下面的命令 看看你得到什么:
回滚交易
从员工中选择*
如您在下面看到的,我们得到了记录。
因此,如果命令在A内启动,我们也可以回滚DELETE以及TRUNCATE。 交易,如果我们是,则DELETE和TRUNCATE之间没有区别 初期回滚。 自己尝试,让我知道您是否有经验 任何问题。
- 截断种子的标识值,而删除则不。
- 截断将全部删除 记录和不触发触发。
- 与删除排序,截断还原 因为它减少了事务日志的使用。
- 在以下情况下无法截断 表由外键引用,或者表用于复制或与 索引视图。
下一步
- 查看这些相关提示
- 使用TRUNCATE与删除SQL Server中的数据删除命令
- 截断SQL Server数据库中的所有表
上次更新时间:2016-04-20
关于作者
Atul Gaikwad在SQL Server方面拥有14年以上的经验。 他目前在Pune的一家领先的跨国公司中担任交付经理。
查看我的所有提示
相关资源
- 更多数据库开发人员提示。。
鸣叫
成为研究员
发表评论或让作者知道此技巧有所帮助。
所有评论都经过审查,因此请紧贴主题,否则我们可能会删除您的评论。 注意:您的电子邮件地址尚未发布。 必填隙标标有星号(*)。
*名
*电子邮件
给我发电子邮件更新
<p></p>***注意***-如果要在帖子中包含来自SQL Server Management Studio(SSMS)的代码,请在复制以下代码以删除以下代码之前,从SSMS复制代码将其插入到NotePad的文本编辑器中。 SSMS格式。
注册我们的通讯
我同意提交数据以接收来自MSSQLTips和/或其他赞助者的有关SQL Server的通信,帐户更新和/或特别优惠。 我已阅读了隐私声明,并了解我可能随时退订。
2016年8月31日星期三-7:15:58 AM-Atul Gaikwad | 回到顶部 |
伊姆兰,您的观点是正确的。 大多数站点甚至Microsoft都说Truncate无法回滚,但实际上,如果您在事务下启动,则可以像delete语句一样回滚。 让我知道您是否还有任何疑问。 |
2016年8月9日,星期二-1:39:17 AM-Imran Siddiqui | |
大家好, 根据同一网站上的帖子i。e: https:// www。mssqltips。com / sqlservertip / 1080 /在带有truncate-vs-delete-commands的sql-server中删除数据/ 在第3和第4行中说 “由TRUNCATE TABLE语句删除的记录无法恢复。 ” 所以我对真实点感到困惑,无论是否可行。 任何人都可以确认将证明吗? |
2016年7月4日星期一-7:12:08 AM-Atul Rajaram Gaikwad | |
Roger:它将一直持续到检查点,并且将成为事务日志备份的一部分,这有助于您将数据库恢复到特定的时间点。 有关更多详细信息,请参阅:https:// technet。微软。com / zh-CN / library / aa933065(v = sql。80)。aspx |
2016年5月19日,星期四-11:14:49 AM-Recce | |
我有一种回到SQL Server 6的感觉。5,它将在执行DDL命令之前执行隐式COMMIT。 或者我对Oracle的行为感到困惑。 |
2016年5月18日,星期三-11:25:57 AM-汤姆·布兰农 | |
也许有些困惑来自TRUNCATE在不同系统中的不同行为。 在Oracle中,TRUNCATE无法回滚,而在SQL Server中可以回滚。 |
2016年5月18日,星期三-9:56:34 AM-韦恩 | |
我认为一个重要的区别是您可以使用WHERE和JOIN进行DELETE的选择性。 尽管如此,非常好的帖子。 我没有考虑过TRUNCATE是DML,但是您所说的是有道理的。 我需要测试您关于TRUNCATE重置IDENTITY种子的声明,还需要测试TRUNCATE是否将跟随外键RI的级联删除。 |
2016年5月18日,星期三-8:37:06 AM-Roger Plowman | |
这是有关截断的问题。 您说它会取消分配页面,并在日志中记录下来。 哪个都很好,但是未分配页面*保持*未分配多长时间? SQL Server会重用该页面吗?如果是,这是否意味着最终无法再回滚该页面? 还是恢复到某个时间点? |
2016年4月25日,星期一-12:21:47 PM-格雷格 Robidoux | |
嗨里克, 这里是一些其他DBA面试问题的链接。 https:// www。mssqltips。com / sql-server-tip-category / 46 / professional-development-interview-questions-dba / 谢谢 Greg |
2016年4月25日星期一-下午12:15:56-Rick Fitch | |
您是否考虑过发布dba面试问题? 我的dba退休了,我需要聘请替代人员。 dba的责任在这里很轻,主要是BI报告数据库-没有事务性的东西-但是我真的不知道当我们开始该过程时我会问哪些潜在的受访者。 我多年来一直是sql开发人员/报告编写者,并且在此过程中学习了很多dba基础知识,但是我的确在知识深度上有漏洞。 我认为可能有很多人处于类似的困境中 |
2016年4月21日,星期四-8:30:53 AM-ShwetaC | |
感谢Atul提供的如此有价值且易于理解的文章。这个博客确实消除了我的困惑!!! |
2016年4月20日,星期三-7:39:55 AM-Sagar Upadhyay | |