MYSQL事务

1-事务的概念

事务指的是逻辑上的一种操作,在这些操作中,要么全部成功,要么全部失败。就是即使它部分操作失败,系统也会保证事务的状态不会被部分更新。

2-手动提交事务

手动提交事务是指在数据库操作中,开发者需要显式地控制事务的提交与回滚。

这种操作允许在你执行完数据库的一系列操作以后,决定是否将这些操作永久的保存在数据库当中,或者在出现错误的时候可以撤销这些操作。

1-手动提交事务的基本步骤

1-开始事务

START TRANSACTION

使用START TRANSACTION或者BEGIN开启一个新的事务

2-执行SQL操作

在这里执行一些你需要进行的SQL操作

3-条件判断

根据操作的结果判断是需要提交回滚事务

4-提交或者回滚、

如果成功的话,使用COMMIT进行提交事务

如果失败的话,使用ROLLBACK撤销事务,回退到事务开始前的状态

5-示例

START TRANSACTION;
#开始事务

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

-- 假设这里有条件判断
IF (没有错误) THEN
    COMMIT;  -- 提交事务
ELSE
    ROLLBACK;  -- 回滚事务
END IF;

3-自动提交事务

MYSQL的每一条语句都是一个单独的事务,每条语句都会自动的开启事务,然后执行语句,然后自动提交事务。

在这里我们可以通过修改全局变量autocommit进行控制

然后设置自动提交的参数变为off

4-事务的四大特性

1-原子性

事务中的所有操作要么全部执行,要么完全不执行。如果事务在执行过程中发生错误时,事务需要回滚到事务开始之前的状态。

2-一致性

事务必须使数据库从一种一致状态到另一种一致状态。

3-隔离性

多个事务并发执行的时候,彼此之间不会互相干扰。

每个事务的执行结果对其他事务时不可见的, 直到该事务提交

4-持久性

一旦事务提交,其对数据库所作的修改是永久性的,哪怕数据库发生异常,重启之后数据依然存在。

5-事务的并发引发的几个问题

1-脏读

一个事务读取了另一个事务中未提交的数据,是最为严重的问题。

2-不可重复读

在一个事务当中多次读取同一项数据,但是获取到的结果不同。也就是值不同。

这通常是因为其他的事务对该项数据进行了个更新。

3-幻读

一个事务读取到了别的事务插入或者删除的数据,使得在读取数据的是时候,第一次和第二次查询的结果不一致,导致记录的行数不同。

6-事务的隔离级别

级别名字隔离级别脏读不可重复读幻读数据库默认隔离级别
1读未提交read uncommitted
2读已提交read committedOracle和SQL Server
3可重复读repeatable readMySQL
4串行化serializable

2、安全和性能对比

安全性:serializable > repeatable read > read committed > read uncommitted

性能 : serializable < repeatable read < read committed < read uncommitted

3、注意:其实三个问题,开发中最严重的问题就是脏读,这个问题一定要避免,而关于不可重复读和虚读其实只是感官上的错误,并不是逻辑上的错误。就是数据的时效性,所以这种问题并不属于很严重的错误。如果对于数据的时效性要求不是很高的情况下,我们是可以接受不可重复读和虚读的情况发生的。

MySQL 事务是指一组数据库操作,这些操作要么全部执行,要么全部不执行,其目的是保证在并发环境下,数据的一致性和完整性。MySQL 事务具有 ACID 性质,即原子性、一致性、隔离性和持久性。 MySQL 中使用事务需要使用 BEGIN、COMMIT 和 ROLLBACK 语句,其中 BEGIN 表示开启一个事务,COMMIT 表示提交事务,ROLLBACK 表示回滚事务事务的基本语法如下: ``` BEGIN; -- 执行一组数据库操作 COMMIT; -- 提交事务 -- 或者 ROLLBACK; -- 回滚事务 ``` 在 MySQL 中,事务的隔离级别分为四个等级,分别是 Read Uncommitted、Read Committed、Repeatable Read 和 Serializable。隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。 MySQL 事务的 ACID 性质有以下含义: 1. 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败回滚,不会只执行其中的一部分操作。 2. 一致性(Consistency):事务执行前后,数据库中的数据必须保持一致性状态,即满足数据库的约束条件和完整性规则。 3. 隔离性(Isolation):事务之间应该是相互隔离的,一个事务的执行不应该被其他事务干扰,保证事务之间的数据相互独立。 4. 持久性(Durability):事务提交后,对数据库的修改应该是永久性的,即使出现系统故障或电源故障,也不应该对数据产生影响。 总之,MySQL 事务是一组数据库操作,具有 ACID 性质,可以通过 BEGIN、COMMIT 和 ROLLBACK 语句来实现,隔离级别越高,数据的一致性和完整性越高,但同时也会影响数据库的性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值