千家信息网

MySQL中事务是什么意思

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,小编给大家分享一下MySQL中事务是什么意思,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、事务的概念事务由单独单元的一
千家信息网最后更新 2024年09月22日MySQL中事务是什么意思

小编给大家分享一下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、在多用户的时候使用孤立性级别是很重要的,这样可以保证这些事务互不影响,保证数据库性能不受到影响。

2、mysql中提供的孤立级别有以下四种:

SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。
Read Uncommitted(读取未提交内容)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
Read Committed(读取提交内容)

这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
Repeatable Read(可重读)

这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的"幻影" 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化)
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如:

脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。

不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。

幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:

3、事务孤立级的查看和修改:

查看:select @@tx_isolation;

修改:set global transaction isolation level 设置的孤立级别;

七、伪事务(锁定)

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中事务是什么意思"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

事务 数据 级别 存储 隔离 用户 引擎 支持 不同 单元 过程 数据库 系统 语句 查询 一致 多个 技术 数据表 类型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器内存可以在台式机上用吗 数据库长文本 网络安全工程师都干嘛 西安安卓软件开发人才招聘 数据库学习哪一种比较好 全国大学生网络安全28元 服务器搭建远程桌面系统 网络安全和科技安全国家安全 无锡璞石网络技术有限公司 网络安全授权侵犯 西安安卓应用软件开发公司哪家强 还原数据库 单个用户 外文文献数据库怎么用知网找 多级审批功能的数据库设计 做单片机软件开发前景如何 录播服务器参数 湖南郴州市电脑软件开发待遇 数据库结构的正确顺序 php数据库删除数据 软件开发公司应该有哪些设备 世纪佳缘数据库zip 网站和软件开发有前景吗 图书馆公共网络安全吗 林区公安局网络安全保卫大队 对网络数据库信息安全的理解 广东网络安全保护协调小组 服务器爆炸 被黑客攻击 6501服务器连接不了 网络安全审查制度有什么意义 中国网络安全病毒库
0