码迷,mamicode.com
首页 > 数据库 > 详细

MYSQL 事务

时间:2017-12-18 18:45:51      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:修改   回滚   enc   name   序列化   二次   ted   abi   char   

 

事务(Transaction):ts,一般是指要做的或所做的事情。

例如:转账问题。

mysql> create table ac (id int primary key auto_increment,
    -> ac_name char(10),ac_money int);
Query OK, 0 rows affected (0.06 sec)//创建表

 
mysql> desc ac;
+----------+----------+------+-----+---------+----------------+
| Field    | Type     | Null | Key | Default | Extra          |
+----------+----------+------+-----+---------+----------------+
| id       | int(11)  | NO   | PRI | NULL    | auto_increment |
| ac_name  | char(10) | YES  |     | NULL    |                |
| ac_money | int(11)  | YES  |     | NULL    |                |
+----------+----------+------+-----+---------+----------------+
3 rows in set (0.09 sec)

mysql> insert into ac values (null,"lucy",5000);
Query OK, 1 row affected (0.05 sec)
mysql> insert into ac values (null,"tom",2000);
Query OK, 1 row affected (0.01 sec)//插入数据

mysql> select * from ac;
+----+---------+----------+
| id | ac_name | ac_money |
+----+---------+----------+
|  1 | lucy    |     5000 |
|  2 | tom     |     2000 |
+----+---------+----------+
2 rows in set (0.00 sec)

//转账  lucy --->tom 1000
update ac set ac_money=ac_money-1000 where id=1;
update ac set ac_money=ac_money+1000 where id=2;

//事务的四个特性(ACID)(掌握和理解):
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

//mysql 事务的操作
//1.开启事务
mysql> begin;
Query OK, 0 rows affected (0.05 sec)
//2.事务的提交(关闭)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
//3.事务的回滚(关闭)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
//4.保存点
mysql> savepoint c;
Query OK, 0 rows affected (0.00 sec)
//5.回滚到保存点
mysql> rollback to savepoint c;
Query OK, 0 rows affected (0.00 sec)
//6.自动提交的设置
mysql> set autocommit=0;//则需要commit操作提交
Query OK, 0 rows affected (0.05 sec)
mysql> set autocommit=1;//则不需要commit操作提交
Query OK, 0 rows affected (0.00 sec)

----------------------------存在的问题-----------
脏读:事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。
不可重复读:事务1第一次读 A,事务2修改A为B,事务1 第二次读到B 
幻读:事务B以插入或删除行等方式来修改事务A的结果集,然后再提交。

以上问题的解决//事务的隔离级别
read uncommitted | 0 未提交读      不解决问题
read committed   | 1 已提交读      可以解决脏读
repeatable read  | 2 可重复读      避免脏读,不可重复读,    
serializable     | 3 可序列化      解决一切问题(并发)
 
 
 
 
 
 

---恢复内容结束---

MYSQL 事务

标签:修改   回滚   enc   name   序列化   二次   ted   abi   char   

原文地址:http://www.cnblogs.com/luojun4061/p/8058032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!