MySQL之事务(上)

本文详细解释了事务的概念,包括其原子性、一致性、隔离性和持久性。介绍了MySQL中的隐式事务、显式事务、savepoint和只读事务,以及如何在实际操作中使用它们来管理数据库操作的完整性和一致性。
摘要由CSDN通过智能技术生成

1.什么是事务

        1)事务是指执行一批操作,要么操作全部成功,要么全部失败,不会存在极个别失败或成功的现象;

        2)事务是一个原子性操作,是最小单元,可由一个或多个SQL语句组成;

2.事务特性

        1)原子性:事务是一个原子性质的操作单元,事务里面对数据库的操作要么全部执行,要么全部不执行;

        2)一致性:事务操作之前和之后,数据都必须保持一致,保证数据的完整性;

        3)隔离性:事务的操作不能被其它事务干扰,即一个事务的内部操作及使用的数据对其它并发事务时时隔离的,并发执行的各个事务之间不能互相干扰;

        4)持久性:事务一旦提交,对数据库的改变将是永久的。

3、MySQL之事务操作

        MySQL默认事务操作是隐式事务,执行增删改操作时,数据库自动开启事务,提交或回滚事务;是否开启隐式事务是由autocommit控制的,事务分为隐式事务、显式事务,savepoint(保存点)和只读事务;

3.1.隐式事务

可查看autocommit是否开启了自动提交:

show variables like 'autocommit';

注:autocommit为ON表示开启了自动提交,OFF表示手动提交

3.2.显式事务

        显式事务需要开发者手动开启;提交、回滚由开发者自己控制。

        开启事务:

set autocommit=0;

        开启显式事务后,操作数据后需要手动提交或回滚

3.3.保存点 savepoint

        当我们需要只回滚一部分数据的时候,可以用savepoint

        在要保存的地方写:point1是保存点名称

save point1;

        需要回滚时:

rollback to point1;
commit;

此操作将会把savepoint和rollback to point1之间的操作全部回滚

案例:

创表,可以在终端,也可以在MySQL对应的软件里面,如:Navicat Premium 

mysql> create table t_test (id int);
Query OK, 0 rows affected (0.01 sec)

mysql> select * from t_test;
Empty set (0.00 sec)
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_test values (1);
Query OK, 1 row affected (0.00 sec)

mysql> savepoint point1;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_test values (2);
Query OK, 1 row affected (0.00 sec)

mysql> rollback to point1;
Query OK, 0 rows affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_test;
+------+
| id  |
+------+
|   1 |
+------+
1 row in set (0.00 sec)

        我在增加1之后设置了一个保存点,然后再增加2回滚,提交后查询只查到了1,说明保存点后面的操作全被回滚了。

3.4.只读事务

        表示事务只会做一些只读操作,如查询,而不会增删改操作;

        开启只读事务:

start transaction read only;

案例: 

    mysql> start transaction read only;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_test;
+------+
| id  |
+------+
|   1 |
|   1 |
+------+
2 rows in set (0.00 sec)

mysql> delete from t_test;
ERROR 1792 (25006): Cannot execute statement in a READ ONLY transaction.
mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_test;
+------+
| id  |
+------+
|   1 |
|   1 |
+------+
2 rows in set (0.00 sec)

可以发现,只能查询,删除操作会报错,增,改也依然;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值