Sql server DDL命令在SQL server中是自动提交的,这意味着什么?
在我读过的大多数页面中,“DDL命令在SQL Server中具有自动提交功能”,如果我没有错的话,这个语句仅仅意味着我们不需要显式提交DDL命令 那为什么 1) 改变表EMP添加年龄INTSql server DDL命令在SQL server中是自动提交的,这意味着什么?,sql-server,Sql Server,在我读过的大多数页面中,“DDL命令在SQL Server中具有自动提交功能”,如果我没有错的话,这个语句仅仅意味着我们不需要显式提交DDL命令 那为什么 1) 改变表EMP添加年龄INT 更新EMP集合年龄=20 失败,显示无效列名“Age” 2) 开始传输 改变表EMP添加年龄INT 回滚 可以成功回滚 也许我对自动提交的概念有误,请举例说明它的实际效果 谢谢你的帮助。: 到数据库引擎实例的连接在自动提交模式下运行,直到begintransaction语句启动 所以,你的第二个例子不适用。再
更新EMP集合年龄=20 失败,显示无效列名“Age” 2) 开始传输
改变表EMP添加年龄INT
回滚
可以成功回滚 也许我对自动提交的概念有误,请举例说明它的实际效果 谢谢你的帮助。: 到数据库引擎实例的连接在自动提交模式下运行,直到
begintransaction
语句启动
所以,你的第二个例子不适用。再往下看:
在自动提交模式下,有时似乎数据库引擎的实例回滚了整个批处理,而不是一条SQL语句。如果遇到的错误是编译错误,而不是运行时错误,则会发生这种情况。编译错误会阻止数据库引擎构建执行计划,因此批处理中不会执行任何内容
这就是您的第一个示例所涉及的内容
因此,两者都没有处理自动提交事务
那么,让我们做一个如下陈述:
Alter TABLE EMP Add Age INT;
如果您在自动提交模式下有一个打开的连接,执行上述操作,并且该连接在没有错误的情况下完成,那么您将发现该连接没有打开的事务,并且任何其他连接都可以立即看到更改
如果您在隐式事务模式下有一个打开的连接,执行上面的操作,并且完成时没有错误,那么您将发现此连接有一个打开的事务。在执行COMMIT
或ROLLBACK
之前,任何需要对EMP
进行架构锁定的操作都会阻止其他连接
如果您有一个打开的连接,在该连接中您执行了
开始事务
,执行上述操作,并且完成时没有出现错误-那么您将处于与隐式事务相同的情况。但是,如果启用了COMMIT
ed或ROLLBACK
ed,您的连接将恢复为自动提交模式或隐式事务模式(在调用BEGIN TRANSACTION
之前处于活动状态)。如果您有一个类似于第二个示例中的BEGIN-tran,则必须进行提交。(您也可以回滚)
如果您没有像第一个示例中那样明确地指定它,那么它就是自动提交
自动提交是sql server中的默认模式,如果需要,可以关闭自动提交。如果在代码中添加批处理,则自动提交将正常工作
Alter TABLE EMP Add Age INT;
go
UPDATE EMP SET Age=20;
您的第一个示例显示,批处理在执行之前是完全编译的。它与“自动提交”无关——你引用了哪些资源来做出这一陈述?@Damien_The_unsiver,k然后我的第一个例子与批次相关,很抱歉我将其与自动提交相关。但是你能通过一些例子让我理解“DDL命令是自动提交的”吗?它实际上意味着什么?我不知道“DDL命令是自动提交的”这个短语是从哪里来的-它对我来说没有太多意义,因为自动提交是一种事务模式(与隐式和显式事务相比)。thnx,@Damien_不信者这个答案澄清了我的很多概念。我认为“DDL命令是自动提交”的概念是在Oracle中,我把它和SQL Server混合在一起,弄糊涂了。现在请告诉我,在事务、提交、回滚方面,DDL和DML之间有什么区别吗…@user369182-我想不起来。上的页面有一个受模式选择影响的语句列表。@Damien_不信者,我能请你将你的评论整合到你的答案中吗?首先是“DDL与sql server中的自动提交无关”。这里的问题是,默认情况下,oracle中的事务是显式的,DDL会“自动提交”这些显式事务。所以,有人想看看sql server中是否也存在这种情况,他们找到了这个答案,乍一看,他们相信这是真的。或者我们将问题修改为“什么是sql server中的自动提交”