【赵强老师】数据库的事务

【赵强老师】数据库的事务一、什么是事务? 数据库事务(Transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的

【赵强老师】数据库的事务

【赵强老师】数据库的事务

一、什么是事务?

数据库事务(Transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

例如:从A账号给B账号转帐,对应于如下两条sql语句
update from account set money=money+100 where name=‘b’;
update from account set money=money-100 where name=‘a’;

代码100分

这两条update语句应该作为一个整体来运行,要保证同时成功,或者同时失败;不应该存在一个成功,一个失败的情况。

二、数据库开启事务命令

我们可以使用下面的语句来开启或者结束一个事务。

  • start transaction  开启事务
  • rollback  回滚事务
  • commit   提交事务

例如,我们可以把上面的银行转账的update语句放到一个事务中执行。

代码100分start transaction;
update from account set money=money+100 where name=‘b’;
update from account set money=money-100 where name=‘a’;
commit;

三、事务的特征:ACID

  • 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
  • 隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

四、事务的隔离级别

多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。

如果不考虑隔离性,可能会引发如下问题:

  • 脏读:指一个事务读取了另外一个事务未提交的数据。
  • 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。
  • 虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

数据库共定义了四种隔离级别:

  • Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)
  • Repeatable read(MySQL的默认值):可避免脏读、不可重复读情况的发生。(可重复读)
  • Read committed:可避免脏读情况发生(读已提交)。
  • Read uncommitted:最低级别,以上情况均无法保证。(读未提交)

我们可以可以通过下面的语句来查看MySQL的事务隔离级别和设置隔离级别:

  • set (GLOBAL|SESSION) transaction isolation level 设置事务隔离级别
  • select @@tx_isolation 查询当前事务隔离级别

下面的语句将查看MySQL数据库当前的事务隔离级别。

【赵强老师】数据库的事务

下面的语句将MySQL的事务隔离级别设置成read committed,在这种隔离级别下,将会发生脏读的问题。

【赵强老师】数据库的事务

【赵强老师】数据库的事务

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8622.html

(0)
上一篇 2023-02-25
下一篇 2023-02-25

相关推荐

  • 快速认识elasticsearch – G

    快速认识elasticsearch – G快速认识elasticsearch what is Elasticsearch Elasticsearch被称为“Lucene穿了一件json的外衣” 把Lucene用Netty封装成服务,使用jso

    2023-03-11
    108
  • Python技巧:如何让Matlab代码跨行继续

    Python技巧:如何让Matlab代码跨行继续在编写Matlab脚本的时候,有时候需要输入较长的语句,可能会超出每行的字符限制。这时候就需要在代码中进行跨行继续。本文将介绍使用Python的反斜杠符号实现跨行继续的方法。

    2024-04-02
    19
  • mysql删除索引的sql语句_mysql还原sql文件

    mysql删除索引的sql语句_mysql还原sql文件删除索引 删除索引可以使用ALTER TABLE或DROP INDEX语句来实现。DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下: 其中,在前面的两条语句中,都删除了

    2023-01-25
    105
  • Python中Callable的概念与实现

    Python中Callable的概念与实现在Python的世界中,我们常常会听到关于callable的概念。那么”callable”是什么呢?在Python中,callable是指一种特殊的对象,这种对象可以像函数一样”callable”或被调用,例如Python中的函数、方法、类以及实现了特殊方法__call__的对象。在本文中,我们将会详细介绍callable的概念、使用场景以及具体实现等方面的内容。

    2024-04-20
    17
  • 【StoneDB研发日志】列式存储 delete方案调研

    【StoneDB研发日志】列式存储 delete方案调研MySQL删除数据的方式 以MySQL 5.7为例,数据库删除数据的方式一共有以下三种: delete truncate drop 以上三种方式都可以删除数据,但是使用场景是不同的。 对于整个表进行删

    2023-05-31
    103
  • MySQL多表操作_如何建立表格数据库

    MySQL多表操作_如何建立表格数据库一、多表查询 1. 内连接 ① 隐式内连接 * 语法 select * from 表1,表2 where 连接条件; * 示例 select * from emp,dept where emp.de…

    2023-01-28
    112
  • MySQL实战45讲 19[亲测有效]

    MySQL实战45讲 19[亲测有效]MySQL实战45讲 19 查询长时间不返回 查询慢

    2023-05-29
    87
  • python中验证ip正则(正则验证ip地址)

    python中验证ip正则(正则验证ip地址)首先给出一个c函数的原型:int sscanf(const char *buffer,const char *format,[argument ]…)它的返回值是参数的数据,也就是argument的个数,buffer:存储的数据,format:格式控制字符串,argument:选择性设定字符串。这个程序从标准流读取数据,可以进行无限制的输入。下面贴出代码,然后引出另外一个问题,将字符串ip转换成整形ip地址。[cpp]

    2023-11-19
    82

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注