建站软件 优化软件 编程软件 网页辅助 站群程序 网站程序 图像处理 资源教程 字体下载 推荐软件


您的位置:首页 > MYSQL学习 > mysql之事务管理

mysql之事务管理

时间:2015-01-21 20:58:47  来源:免费模板网 作者:风雪 阅读次数 tagsmysql之事务管理

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语句


  1. mysql> insert into user values(null,'456','456',now());  
  2. Query OK, 1 row affected (0.06 sec)  
  3.  
  4. mysql> insert into user values(null,'789','789',now());  
  5. Query OK, 1 row affected (0.00 sec) 
在这里执行了两条插入语句,但是这两个语句实际上还没有插入进去了,因为第三步还没有完成, 你可以理解为这些数据暂时存放在缓存里

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


  1. mysql> commit 
  2.     -> ;  
  3. Query OK, 0 rows affected (0.05 sec) 
这个时候 上面的插入操作才算是真正的插入到了表中

 


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

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

4,不使用事务的情况

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

 


  1. 使用这个SQL语句可以查看autocommit的值,autocommit是mysql中的一个变量
  2. 结果显示autcommit是开着的
  3. mysql> show VARIABLES like '%autocommit%';  
  4. +---------------+-------+  
  5. | Variable_name | Value |  
  6. +---------------+-------+  
  7. | autocommit    | ON    |  
  8. +---------------+-------+  
  9. 1 row in set (0.00 sec)  
  10.  
  11. mysql> set autocommit = 1;  
  12. Query OK, 0 rows affected (0.00 sec)  
  13.  使用这个语句可以将autocommit关闭,执行的sql语句不会自动提交,遇到错误,所有的操作不会影响的数据库
  14. mysql> set autocommit = 0;  
  15. Query OK, 0 rows affected (0.00 sec)  
  16.  
  17. mysql> show VARIABLES like '%autocommit%';  
  18. +---------------+-------+  
  19. | Variable_name | Value |  
  20. +---------------+-------+  
  21. | autocommit    | OFF   |  
  22. +---------------+-------+  
  23. 1 row in set (0.00 sec)  

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

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

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

本文地址:https://www.freemoban.com/mysql/2015/0121/273.html

猜你喜欢
栏目推荐
模板推荐

Copyright:www.freemoban.com 免费模板网 All Rights Reserved 网站备案:辽ICP备19014872号-2   辽公网安备 21010602000376号  辽公网安备:42900402000182号

免责声明:本站部分资源来自互联网收集,版权归原创者所有,如果侵犯了你的权益,我们会及时删除侵权内容,联系QQ:1615187561 谢谢合作!