Sql server 在单个/多个SQL INSERT SELECT UPDATE DELETE语句中传输和提交的目的

Sql server 在单个/多个SQL INSERT SELECT UPDATE DELETE语句中传输和提交的目的,sql-server,sql-server-2012,Sql Server,Sql Server 2012,有人能用简单的外行语言向我解释一下SQL事务在这里做什么吗 以下是场景: 我不是SQL开发人员或数据工程师。我希望根据您在where子句中看到的筛选器更新列值。我在数据库中运行了查询,因为我有管理员权限,当然是经过批准的 我根据需要键入以下命令 update idx_task set IDXTaskStatusDE=4 where ID='task_ID' 开发人员随后向我发送了以下查询,并说我做得不对。 Use Works begin tran update idx_task

有人能用简单的外行语言向我解释一下SQL事务在这里做什么吗

以下是场景:
我不是SQL开发人员或数据工程师。我希望根据您在where子句中看到的筛选器更新列值。我在数据库中运行了查询,因为我有管理员权限,当然是经过批准的

我根据需要键入以下命令

update idx_task set IDXTaskStatusDE=4 where ID='task_ID'
开发人员随后向我发送了以下查询,并说我做得不对。

Use Works
    begin tran
    update idx_task set IDXTaskStatusDE=4 where ID='task_ID'
    commit tran
开发者的电子邮件回复
当直接针对SQL发出adhoc语句时,最好将语句封装在事务中,以防出现问题,需要回滚。更新同一个表两次与使用或不使用事务不同。因此,这是一个专业的做法,可能是未知的业余爱好者喜欢你。这份工作似乎超出了你的主要职责范围。请与您的上司讨论,让您的团队成为专业的SQL开发人员

我的努力
因此,我是在阅读了一些技术术语之后来到这里的,目的是用几句话或者举例说明这两个查询的行为会有什么不同

我的问题:
1.)有没有人能在这里提供一个简单的理论解释,说明在tran中封装单个update语句的意义? 2.)它是否用于SQL开发人员社区中的任何以前、将来、安全或专业实践

感谢您给这里所有救世主的留言
提前感谢所有类型的回复。您的任何类型的反馈都将帮助我获得知识:)


保重

参考这个问题的线索。这会消除你的困惑。

@Panagiotis Kanavos完美地指出和表达了这一点

阅读有关SQL事务的内容时,只需了解以下术语的简单含义:

1.)原子:“原子”是指“不能被分割成更小的部分”。应用于1NF这意味着一列不应包含多个值。它不应构成或组合具有自身意义的价值观

2.)提交:SQL中的提交语句结束关系数据库管理系统(RDBMS)中的事务,并使所有更改对其他用户可见

3.)锁定:是确保数据一致性的机制。SQL Server在事务启动时锁定对象。事务完成后,SQL Server将释放锁定的对象。因此,正如@Panagiotis Kanavos所指出的,在您的情况下,如果其他开发人员与您正在执行UPDATE语句的相同数据并行执行,则TRAN将阻止所有其他命令


希望这有帮助。我不认为会有比这更多的“简单的话”了。如果您仍然感到困惑,请随时提问。

您不了解其中的哪些部分?我投票将此问题作为离题回答,因为可以通过查阅产品文档或任何可用的在线教程来回答此问题。在这个主题上没有必要提出堆栈溢出问题。@KaustubhUrsekar这个问题仍然不明确-除非开发人员不懂SQL<代码>更新是原子的-要么一切都成功,要么一切都失败。它不需要包装在
begin-tran/commit-tran
调用中。它已经表现得好像它被包装在它们里面,但这就是点——更新是原子的。如果出现问题,它将立即回滚。放置这些BEGIN/COMMIT的唯一原因是当您希望保持事务打开时,例如检查结果,并决定是手动提交还是回滚。这样做的问题是,当事务打开时,行被锁定,试图修改它们的其他连接被阻止。每个人都会偶尔忘记调用
COMMIT
,并在同事开始抱怨时记住另一个问题是,就数据库而言,应用程序甚至不同的SSM窗口只是不同的连接。在事务提交之前,他们不会看到您在事务中所做的更改。因此,使用BEGIN-TRAN/COMMIT-TRAN仅在您希望在同一窗口中检查修改时有用。这是无法避免的,您只需要小心地调用提交或回滚