您的位置:58脚本 > mysql事务隔离级别 MySQL 事务

mysql事务隔离级别 MySQL 事务

2023-03-13 03:32 MySQL教程

mysql事务隔离级别 MySQL 事务

mysql事务隔离级别

MySQL事务隔离级别是指在多个用户并发访问数据库时,保证数据的一致性和完整性的一种机制。MySQL事务隔离级别可以通过设置不同的隔离级别来实现,MySQL提供了4个不同的事务隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。

1. 读未提交(Read Uncommitted)
该隔离级别允许一个用户从另一个用户尚未提交的事务中读取数据。这意味着一个用户可以看到其他用户尚未提交的修改。这是MySQL中最低的隔离水平。

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

2. 读已提交(Read Committed)
该隔离水平保证在同一个会话中对同一行的多次读取将返回相同的数据。但是它不能防止其他会话对表中行所做的修改对当前会话是可见的。

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

3. 可重复读(Repeatable Read)
在此隔离水平上,在同一会话内对同一行执行多次“select”将返回相同的数据。它也防止其他会话在当前会话开始之前对表中行所做的修改对当前会话是可见的。

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

4. 串行化(Serializable)
此隔离水平要求所有并发事务都必须依序执行(即使它们之间存在冲突也必须如此)。因此它能够避免脏写、不可重复写和幻影写问题。但是它也带来性能上的开销。

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

MySQL 事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

  • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
  • 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。
  • 事务用来管理 insert , update , delete 语句。

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性或不可分割性)、Consistency(一致性)、Isolation(隔离性或独立性)、Durability(持久性)

  • 1、原子性:一组事务,要么成功;要么撤回,即事务在执行过程中出错会回滚到事务开始前的状态。
  • 2、一致性 : 一个事务不论是开始前还是结束后,数据库的完整性都没有被破坏。因此写入的数据必须完全符合所有预设规则(资料精确度、串联性以及后续数据库能够自发完成预定工作)。
  • 3、隔离性:数据库允许多个事务并发的同时对其数据进行读写修改等操作,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离可分为:Read uncommitted(读未提交)、Read committed(读提交)、Repeatable read(可重复读)、Serializable(串行化)。
  • 4、持久性:事务在处理结束后对数据做出的修改是永久的,无法丢失。

事务控制语句

1,显式的开始一个事务:

start transaction

begin

2, 做保存点,一个事务中可以有多个保存点:

savepoint 保存点名称

3, 提交事务,并使数据库中进行的所有修改成为永久性的:

commit

commit work

4,回滚结束用户的事务,并撤销正在进行的所有未提交的修改:

rollback

rollback work

5.删除一个事务的保存点,若没有指定保存点,执行该语句操作会抛错。

release savepoint 保存点名称

6.将事务滚回标记点:

rollback to 标记点

7.设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

set transaction

事务处理方法

1.用 begin , rollback , commit 来实现事务处理。

2.用 set 来改变 MySQL 的自动提交模式。

  • set autocommit = 0 (禁止自动提交)。
  • set autocommit = 1 (开启自动提交)。

PHP中使用事务实例

<?php
$handler=mysql_connect("localhost","root","password");
mysql_select_db("task");
mysql_query("SET AUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行 mysql_query("BEGIN");//开始事务定义
if(!mysql_query("insert into trans (id) values("2")"))
{
mysql_query("ROOLBACK");//判断当执行失败时回滚
}
if(!mysql_query("insert into trans (id) values("4")"))
{
mysql_query("ROOLBACK");//判断执行失败回滚
}
mysql_query("COMMIT");//执行事务
mysql_close($handler);
?>


阅读全文
以上是58脚本为你收集整理的mysql事务隔离级别 MySQL 事务全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58脚本 58jiaoben.com 版权所有 联系我们
桂ICP备12005667号-28 Powered by CMS