一、事务的概念

1、事务的概念

2、在mysql中哪些存储引擎(表类型)支持事务哪些不支持

3、事务的四个属性

4、mysql事务的创建与存在周期

5、mysql行为

6、事务的隔离性和性能

7、mysql的伪事务

事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。

二、MySQL 中的存储引擎以及支持事务,和不支持事务的存储引擎

1、存储引擎的概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中。

这些技术中的每一种技术都使用不同的存储机制,索引 技巧,并且最终提供广泛的不同的功能和能力。可以通过选择不同的技术,可以获得额外的速度或功能,从而改善应用的整体功能。

2、这些不同的技术以及配套的相关功能在mysql中被称为存储引擎(也称为表类型)。

3、通过show engines;来查看mysql支持的存储引擎。

4、 在mysql中用的最多的存储引擎有:innodb,bdb,myisam ,memory 等。其中innodb和bdb支持事务而myisam等不支持事务。

三、事务的四个属性

1、原子性:事务是由一个或一组相互关联的SQL语句组成,这些语句被认为是一个不可分割的单元,要么都成功要么全回滚。

2、一致性:对于数据库的修改是一致的,即多个用户查的的数据是一样的。一致性主要由mysql的日志机制处理,他记录数据的变化,为事务恢复提供跟踪记录。

3、隔离性:每个事务都有自己的空间,和其他发生在系统中的事务隔离开来,而且事务的结果只在他完全被执行时才能看到

4、持久性:但提交了这个事务之后对数据的修改更新就是永久的。当一个事务完成,数据库的日志已经被更新时,持久性即可发挥其特有的 功效,在mysql中,如果系统崩溃或者数据存储介质被破坏,通过日志,系统能够恢复在重启前进行的最后一次成功更新,可以反应系统崩溃时处于执行过程的事物的变化。

四、事务的创建及生存周期

对于支持事务的存储引擎,一个事务的周期:

1、在创建事务的过程中,用户需要创建一个innodb或bdb类型的数据表,其基本命令结构如下:

create  table table_name  (file  defintions)  type=innodb/bdb;

2、对表类型进行修改

alert  table table-name  type =innodb/bdb;

3、事务的整个过程

use  databases;   //使用某个数据库

start transaction ;   //开始事务 、这里也可以使用 begin   、 beginwork

insert  into stu1 values('',  );   //进行相关的操作

commit    //提交事物

rollback   //撤销事务(事务回滚)

五:mysql行为

1、我们在使用mysql是如果关闭之后,打开在查询的话就会发现,哪些数据已经保存了,但是我们知道,在这过程中没有进行显示或隐式提交,问什么会这样那?因为我们在mysql中设置了自动提交,但我们也可以改为手动提交。

2、 set   autocommit =0;  //关闭自动提交

3、 set   autocommit =1;  //开启自动提交

六、事务的隔离性

现在重点来说明下事务的隔离性,当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,下面看看四种隔离界别

1、READ  UNCOMMITTED(未提交读/脏读)

(1)、该隔离级别的事务,在数据修改过程中,即使没有提交,其他事务对于这些数据也是可读的。事务可读到未提交的数据也叫脏读(Dirty Read),由于脏读在实际应用中会导致很多问题,一般这类隔离级别应用很少。

2、READ COMMITTED(不可重复读/提交后读)

(1)、不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。

例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。

(2)、(一般数据库默认事务级别)只有当前事务执行完,把数据提交之后,其他事务才可对这些数据进行读取。也叫不可重复读,因为其他事务执行2次查询可能前后会得到2个不同结果(事务执行前读一次,执行后读一次)。

3、REPEATABLE  READ(可重读/幻读)

(1)、幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。

而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

(2)、(Mysql的默认隔离级别)解决了脏读的问题,该级别保证了在同一事务中,多次读取的结果是一致的。但仍旧无法解决幻读问题。幻读:事务A在读取一定范围内数据时,事务B有对该范围数据进行插入等更新操作,事务A再次读取该范围记录时,会产生幻读。

4、SERIALIZABLE(序列化/串行化)

(1)、在读取每一行数据的时候都对该行数据加锁,强制事务串行执行,在事务提交的时候会释放锁,这时其他事务才能获取相关数据的锁进行处理这样避免了幻读问题,隔离性达到了最高但是这种执行方式效率 低,锁竞争激烈容易出现超时问题。

只有在对数据一致性要求很强的时候和没有并发或并发量很小的时候使用!

5、事务隔离级别的查看和修改

查看:select @@tx_isolation;

修改:set  global  transaction  isolation level  设置的隔离级别;

6、mysql中支持的四种隔离级别

(1)、Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

(2)、Repeatable read (可重复读):可避免脏读、不可重复读的发生。

(3)、Read committed (读已提交):可避免脏读的发生。

(4)、Read uncommitted (读未提交):最低级别,任何情况都无法保证。

七、伪事务(锁定)

1、在MySQL中根据不同的需求,提供了很多存储引擎,但是有的存储引擎不支持事务,对于这种情况,可以使用表锁定来代替事务。

2、对于不支持事务的存储引擎MYISAM类型数据表,当用户插入,修改,删除时,这些操作都会立即保存到磁盘中,当多用户同时操作某个表时,可以使用表锁定来避免同一时间有多个用户对数据库中指定表进行操作,这样可以避免在用户操作数据表过程中受到干扰。

只有在用户释放表的操作锁定后,其他用户才可以访问这些修改的数据表。

这里的锁和java多线程中锁的作用一样,个人觉的可以这样理解。

3、对指定表进行锁操作的过程:

(1)lock  table table-name lock type ;   //locktype 有read 和write 两种

对多个表进行加锁:

lock table  table-name1 lock type, table -name2  lock type ,table -name3 lock type;

(2)在指定的表中进行相应的操作

(3)当用户完成对锁定数据表的操作后,进行解锁。

unlock tables ;  //释放了所有加锁表的锁。

mysql 事务隔离详解_MySQL 中事务、事务隔离级别详解相关推荐

  1. mysql日期比较大小 方式_mysql中日期比较大小方法详解

    在mysql中日期比较有许多的函数,下面我来给大家总结一下常用的mysql中日期比较大小有需要了解的朋友可进入参考参考,假如有个表product有个字段add_time,它的数据类型为datetime ...

  2. mysql枚举类型enum用法_mysql中枚举类型之enum详解

    enum类型就是我们常说的枚举类型,它的取值范围需要在创建表时通过枚举方式(一个个的列出来)显式指定,对1至255个成员的枚举需要1个字节存储: 对于255至65535个成员,需要2个字节存储.最多允 ...

  3. mysql 对视图的操作_Mysql中关于视图操作的详解

    视图的操作: 1.视图的创建:create view view_name as 查询语句; 2.视图的查看:show tables;// 显示所有的表和视图 show create view view ...

  4. mysql不同连接的事务_mysql中不同事务隔离级别下数据的显示效果--转载

    事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...

  5. mysql sql 事务写作_mysql中的事务

    MySQL事务相关 一. 什么是事务 事务(Transaction)是一个逻辑序列,该序列要么执行,要么不执行. 例如:转换业务 A 给 B 转账 1000 元,设计两个操作: A减少1000元 B增 ...

  6. mysql中的事务_mysql中的事务,你理解嘛?

    事务又叫做TCL,全称是transaction control language,意思是事务控制语言.这篇文章还是属于我的mysql基础文章,在前面我们介绍了下面这些基础知识: 1.数据库的增查改删操 ...

  7. mysql的explain怎么看_mysql中explain用法详解

    如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...

  8. mysql添加新的实例_MySQL中添加新用户权限的实例详解

    有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表.比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些. 下面的例子显示出如何使用MySQL客户安装新用户. ...

  9. 给mysql 授权 命令_mysql中授权命令grant用法详解:

    mysql中授权命令grant用法详解: mysql中可以给你一个用户授予如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,用法格式为: gra ...

最新文章

  1. 线下沙龙 × 报名 | “大规模数据存储与挖掘”博士生研讨会
  2. sybase性能优化经验浅谈
  3. python 天气预报地图_在树莓派上用 python 做一个炫酷的天气预报
  4. 电脑技巧:电脑几种常见的系统故障解答
  5. python 闭包_Python中的闭包
  6. 经常用everything对硬盘有伤害吗?
  7. linux内核计算次方,linux内核中的循环缓冲去的设计与实现
  8. 系统服务器地云盘上,系统服务器地云盘上
  9. 使用Adobe Acrobat提取PDF签章图片
  10. 【Vegas原创】VMWare下,Linux挂载、卸载新硬盘的方法
  11. Python项目(Django):国内新冠肺炎疫情大数据可视化平台
  12. SCAU程序设计在线实训平台_实验_高级语言程序设计_教材习题_第七章
  13. linux进阶-网络安全系统网站服务
  14. NodeJS Warning: Accessing non-existent property ‘padLevels‘ 解决办法
  15. 9月编程排行榜新鲜出炉霸榜还得是它~
  16. Teardrop攻击初体验
  17. mysql表别名不加as_数据库别名AS区别
  18. python用保留字while实现无限循环_Python中无限循环需要什么条件
  19. TakePhoto-轻量级Android照片处理框架
  20. Struts原理与实践(文摘)

热门文章

  1. 盘点那些以“马”作为车标的汽车品牌
  2. 如何屏蔽百度右侧推荐和热搜
  3. 1分钟推荐一个深度学习领域的必备网站,高能!
  4. Oral English
  5. 七八个星天外,两三点雨山前 (琐记)
  6. 六代单传的老代码,到底能不能动
  7. 成都服务器销售熊掌号,百度熊掌号主页可以做产品词排名吗
  8. django 使用系统自带登录装饰器login_required
  9. linux磁盘合盘,超强启动盘制作工具MBROSTool(可隐藏,多分区,多启动)
  10. Android 手机十大必备软件