mysql事务处理

 

事务处理就是所有操作要么一起成功、要买一起失败,事务本身具有:
原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(lsolation)、持久性(Durability),也称ACID特征;
1.原子性:是事务最小的单元,是不可再分割的单元,是必须同时完成的操作,如果有一个失败,则一切操作失败,如同一笔转帐入账业务!
2.一致性:操作的前后是完全一致的,保证数据的有效性,如果事务正常操作则系统会维持有效性,若事务出错,则回到最原始状态,这样保证事务开始时和结束时系统处于一致状态。
如转帐和收账,若成功则保持一致性,若失败,则保持操作之前的一致性,即转帐方的钱不会少,收账方的钱不会增加!
3.隔离性:多个事务可以同时进行但彼此之间无法相互访问,只有当事务完成后,才可以看见结果!
4.持久性:当一个系统崩溃时,一个事务依然可以坚持提交,当一个事务操作完成后,操作的结果保存在磁盘中,永远不会被回滚。
——开启事务:
前提:只有INNODB类型数据表才支持事务操作;
1.查看INNODB引擎是否开启:show engines;
看到 INNODB | YES 说明已开启;
2.设置INNODB为默认引擎: sudo gedit /etc//my.cnf,在[mysqld]中添加:default-storage-engine=INNODB
然后保存退出,关闭服务器:mysqladmin -u root -p shutdown,启动:sudo /etc/init.d/ start;
3.查看是否配置成功:show engines;
看到 INNODB | DEFAULT 说明配置成功;
4.创建INNODB类型数据表:
use 你的
create table 数据表名(字段清单…) type = INNODB; # 创建成功
5.修改其他类型的数据表为:INNODB;
alter table 数据表名 type = INNODB;
6.测试事务操作,查看事务是否开启: show variables like ‘AUTOCOMMIT';
看到 AUTOCOMMIT值为 ON 说明自动提交开启,事务未开启,
开启事务: SET AUTOCOMMIT=0 ; # 或者SET AUTOCOMMIT=false;
show variables like ‘AUTOCOMMIT'; 发现AUTOCOMMIT值为 OFF;说明自动提交关闭,事务开启;
开始事务:BEGIN,或者 START TRANSACTION ;
进行更新操作:INSERT 或 UPDATE;
查看更新:SELECT 。。。
撤销更新:ROLLBACK;
查看是否撤销:SELECT 。。。
事务提交:COMMIT; # 将是更新生效,不可回滚;
设置中途保存点: SAVEPOINT 事务保存点名称;
回滚到某个事务保存点:ROLLBACK TO SAVEPOINT 事务保存点名称;
只有当输入:COMMIT提交事务时,这个事务操作才算完成,更新才能生效,否则回滚操作会使当前更新丢失!
—-实例:
> show variables like ‘autocommit';
+—————+——-+
| Variable_name | Value |
+—————+——-+
| autocommit    | ON    |
+—————+——-+
1 row in set (0.00 sec)
mysql> set autocommit = 0; # false
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like ‘autocommit';
+—————+——-+
| Variable_name | Value |
+—————+——-+
| autocommit    | OFF   |
+—————+——-+
1 row in set (0.00 sec)
mysql> insert into test(name) values(‘sadfsd');
Query OK, 1 row affected (0.00 sec)
mysql> savepoint s1;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test(name) values(‘sdfsadfsdf');
Query OK, 1 row affected (0.00 sec)
mysql> savepoint s2;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test(name) values(‘sadfsdfsdafsda');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+—-+—————-+
| id | name           |
+—-+—————-+
|  2 | sadfsd         |
|  3 | sdfsadfsdf     |
|  4 | sadfsdfsdafsda |
+—-+—————-+
3 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.04 sec)
mysql> select * from test;
Empty set (0.00 sec)
mysql> insert into test(name) values(‘sadfsdfsdafsda');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test(name) values(‘sdfsadfsdf');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test(name) values(‘sadfsd');
Query OK, 1 row affected (0.00 sec)
mysql> savepoint s1;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test(name) values(‘sadfsd');
Query OK, 1 row affected (0.00 sec)
mysql> savepoint s2;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test(name) values(‘sadfsd');
Query OK, 1 row affected (0.00 sec)
mysql> savepoint s3;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+—-+—————-+
| id | name           |
+—-+—————-+
|  5 | sadfsdfsdafsda |
|  6 | sdfsadfsdf     |
|  7 | sadfsd         |
|  8 | sadfsd         |
|  9 | sadfsd         |
+—-+—————-+
5 rows in set (0.01 sec)
mysql> rollback to savepoint s3;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+—-+—————-+
| id | name           |
+—-+—————-+
|  5 | sadfsdfsdafsda |
|  6 | sdfsadfsdf     |
|  7 | sadfsd         |
|  8 | sadfsd         |
|  9 | sadfsd         |
+—-+—————-+
5 rows in set (0.00 sec)
mysql> rollback to savepoint s2;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+—-+—————-+
| id | name           |
+—-+—————-+
|  5 | sadfsdfsdafsda |
|  6 | sdfsadfsdf     |
|  7 | sadfsd         |
|  8 | sadfsd         |
+—-+—————-+
4 rows in set (0.00 sec)
mysql> rollback to savepoint s1;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+—-+—————-+
| id | name           |
+—-+—————-+
|  5 | sadfsdfsdafsda |
|  6 | sdfsadfsdf     |
|  7 | sadfsd         |
+—-+—————-+
3 rows in set (0.00 sec)
mysql> rollback ;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from test;
Empty set (0.00 sec)
mysql> insert into test(name) values(‘sadfsd');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test(name) values(‘sadfsd');
Query OK, 1 row affected (0.00 sec)
mysql> insert into test(name) values(‘sadfsd');
Query OK, 1 row affected (0.00 sec)
mysql> commit
    -> ;
Query OK, 0 rows affected (0.08 sec)
mysql> select * from test;
+—-+——–+
| id | name   |
+—-+——–+
| 10 | sadfsd |
| 11 | sadfsd |
| 12 | sadfsd |
+—-+——–+
3 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+—-+——–+
| id | name   |
+—-+——–+
| 10 | sadfsd |
| 11 | sadfsd |
| 12 | sadfsd |
+—-+——–+
3 rows in set (0.00 sec)

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《mysql事务处理
本文地址:https://www.zhiletu.com/archives-164.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微