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