首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于交易知识

关于交易知识
EN

Database Administration用户
提问于 2022-08-08 00:16:53
回答 1查看 90关注 0票数 0

我在教自己SQL。我从未在任何一家企业公司工作过,但我看过和学习了一些关于web开发的教程,我看到crud应用程序使用数据操纵语言(,DML)将数据注入数据库,比如插入、更新、删除。我想问他们是否应该使用TCL。我的意思是,如果您正在处理一个企业客户端,我是否应该作为一个事务执行此查询?或者我应该直接使用DML命令执行该操作,如果发生了错误,而ACID属性是否获得了不使用TCL命令的优势呢?请帮助我理解这一点,或指出我的任何方向,以便我可以学习。免责声明:我为我的英语道歉

EN

回答 1

Database Administration用户

回答已采纳

发布于 2022-08-08 02:49:45

我的意思是,如果您正在处理一个企业客户端,我是否应该作为一个事务执行此查询?

如果用例要求数据在被操作后是事务一致的,那么您应该使用一个事务,但这是您的选择。换句话说,如果您正在对数据库的数据(DML)或结构(DDL)进行多个更改,并且希望确保它们都成功地发生,或者它们都没有发生(如果其中一个失败了),那么您将选择使用一个事务(TCL)。

事务也是一种很好的方法,可以确保对象被锁定,以防止在进行所期望的更改时发生意外的更改。

还是应该使用DML执行该操作?

如果您需要使用事务,那么您将编写TCL命令。这些TCL命令将包围您为修改数据而编写的DML命令。TCL和DML命令并不是相互排斥的,它们通常是相互结合使用的。

其中一个示例(使用Server的T语法)如下所示:

代码语言:javascript
复制
BEGIN TRANSACTION; -- TCL command to start a transaction 
    UPDATE dbo.Movies -- DML command to update the Movies table
    SET IsOldMovie = 1 -- Part of the DML query
    WHERE ReleaseYear < 2000; -- Part of the DML query
COMMIT; -- Closing TCL command to commit the change of the DML query above and end the transaction successfully 

不同类型的命令: DQL -数据查询语言、DDL -数据定义语言、DML -数据操作语言、DCL -数据控制语言和TCL -事务控制语言,都只是同一种关系编程语言SQL的不同命令的类别。有关差异的更多信息,请参见、DQL、DML DML DCL、TCL命令

如果在插入数据和部分插入的数据时发生了错误,那么ACID属性从不使用TCL命令中得到什么好处呢?

每个查询都在一个隐式事务中运行,使其本身保持一致( ACID原则中的C)。这意味着对于任何单个DML查询,例如INSERT,不可能只更改某些数据(插入)。要么所有的数据都会被插入,要么都不会被插入。

在TCL命令中不封装DML命令的好处是提高了并发性和性能,因为封装在同一个显式事务中的每个数据库对象都会锁定整个事务。因此,如果您有10个UPDATE语句,每个语句用于一个不同的表,那么在整个显式transaction命令期间,这十个表将从其他查询中锁定。权衡是,如果您没有将所有10个查询都封装在同一个显式事务(TCL命令)中,那么如果只有一些UPDATEs成功地工作,那么您将面临不一致状态的风险。在一个明确的事务中,如果十个UPDATEs中的一个失败了,那么所有十个都会被撤销(回滚)。

请举例说明直接使用DML命令插入数据所需的情况,这不是一种风险吗?

在多个DML命令互不依赖的情况下,这是没有风险的。如果您有三个彼此无关的UPDATE查询,其中一个是否失败并不重要,那么您就不需要使用TCL命令将这三个查询封装在一起。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/315338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档