MYSQL 事务

2018-06-18 00:38:58来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

 

事务(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 可序列化      解决一切问题(并发)
 
 
 
 
 
 

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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:关于sql(20171218)

下一篇:mysql实现简单的增删改查,放入xmapp自带数据库中