[转帖]mysql基础专题——9.mysql事务管理_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3962 | 回复: 0   主题: [转帖]mysql基础专题——9.mysql事务管理        下一篇 
eink
注册用户
等级:上尉
经验:764
发帖:54
精华:0
注册:2012-11-13
状态:离线
发送短消息息给eink 加好友    发送短消息息给eink 发消息
发表于: IP:您无权察看 2012-11-19 10:51:20 | [全部帖] [楼主帖] 楼主

1,事务的概念

事务就是一段sql 语句的批处理,但是这个批处理是一个atom(原子) ,不可分割,要么都执行,要么回滚(rollback)都不执行。

2,事务的作用

事物可以理解为,一系列的SQL语句的组合,这个组合是一个整体,其中任何一条SQL语句执行失败了,将会导致,其他的SQL语句也无效。这样可以保证同步性。

比如用户A向用户B转账100元,首先需要执行一个SQL语句从A的账户中减去100元,然后执行一个SQL语句向B的账户余额中增加100元。如果在执行完第一个SQL语句的时候,出现了意外,第二个SQL语句执行失败了,这个时候不就麻烦了吗?所以在这个时候需要用到事务了,把这���个操作放在一个事务里,任何一个操作执行失败的时候,另外一个操作也无法执行成功。

3,使用事务的步骤

第一步初始化事务,也可以说是开启一个事务

1 mysql> start transaction
2     -> ;
3 Query OK, 0 rows affected (0.00 sec)


第二步执行SQL语句

4 mysql> insert into user values(null,'456','456',now());
5 Query OK, 1 row affected (0.06 sec)
6
7 mysql> insert into user values(null,'789','789',now());
8 Query OK, 1 row affected (0.00 sec)


在这里执行了两条插入语句,但是这两个语句实际上还没有插入进去了,因为第三步还没有完成,

你可以理解为这些数据暂时存放在缓存里

第三部提交事务、或者撤销事务(事务回滚)

9 mysql> commit
10     -> ;
11 Query OK, 0 rows affected (0.05 sec)


这个时候 上面的插入操作才算是真正的插入到了表中

12 mysql> select * from user;
13 +----+----------+----------+---------------------+
14 | id | username | password | createtime          |
15 +----+----------+----------+---------------------+
16 |  1 | kenan    | kenan    | 2012-10-31 15:32:26 |
17 |  3 | kenan    | lele     | 2012-10-31 15:32:26 |
18 |  4 | lele     | lele     | NULL                |
19 |  5 | 1        | 1        | NULL                |
20 |  9 | 123      | 123      | 2012-11-05 18:35:02 |
21 | 10 | 456      | 456      | 2012-11-05 21:16:29 |
22 | 11 | 789      | 789      | 2012-11-05 21:16:40 |
23 +----+----------+----------+---------------------+
24 7 rows in set (0.00 sec)


撤销事务用 rollback ; 这样的话前面的所有对数据的增删改操作都将无效

4,不使用事务的情况

在不使用事务的情况下,实际上系统会有默认的事务开启的,当我们执行完SQL语句之后,所有的操作都是自动提交的,在mysql中有一个autocommit属性,这个属性默认情况是开启的.

25 使用这个SQL语句可以查看autocommit的值,autocommitmysql中的一个变量

26 结果显示autcommit是开着的

27 mysql> show VARIABLES like '%autocommit%';
28 +---------------+-------+
29 | Variable_name | Value |
30 +---------------+-------+
31 | autocommit    | ON    |
32 +---------------+-------+
33 1 row in set (0.00 sec)
34
35 mysql> set autocommit = 1;
36 Query OK, 0 rows affected (0.00 sec)


37  使用这个语句可以将autocommit关闭,执行的sql语句不会自动提交,遇到错误,所有的操作不会影响的数据库

38 mysql> set autocommit = 0;
39 Query OK, 0 rows affected (0.00 sec)
40
41 mysql> show VARIABLES like '%autocommit%';
42 +---------------+-------+
43 | Variable_name | Value |
44 +---------------+-------+
45 | autocommit    | OFF   |
46 +---------------+-------+
47 1 row in set (0.00 sec)


关于autocommit的更多的介绍,可以参考:

http://my.oschina.net/zimingforever/blog/73088


本文出自 “Kenan_ITBlog” 博客,请务必保留此出处http://soukenan.blog.51cto.com/5130995/1050917




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论