1:什么是事务
举例银行转账:
update t_act set balance=balance -10000 where actno='act-001'
update t_act set balance=balance+10000 where actno='act-002
#以上保证以上2条只能成功不能失败
2:DML语句,事务只用(insert,delete,update)
它们是用来改变数据的。
事务的存在是为了保证数据的安全性和完整性。
3:事务如何操作的?(commit,rollback)
开启事务
输入1(记录到缓存里历史记录里)
输入2(记录到缓存里历史记录里)
savepoint a1(先设置保存点)
输入3(记录到历史记录里)
提交事务(commit)或者回滚事务(rollback)(提交事务是更新硬盘,回滚事务不更新硬盘,而是清除历史数据。
4:事务的4大特质(ACID)
A原子性 :atom
C一致性:consistance
I 隔离性:Isolation
D 持久性:duration
5:关于事务的隔离性
第一级别 read umcommitted(读未提交)也叫dirty read(所有数据都是二级别起步)
第二级别 read committed(读已提交)oracle默认
第三级别repeatable read(可重复读)解决了读已提交的问题。读取到的数据是幻想。mysql默认
第四级别序列化读/串行化读。
解决了所有问题,但是效率低。
6:显示事务
mysql事务默认是自动提交(任意一条DML语句都自动提交),但是如果引入事务,就能使用rollback.
start transction;
Query OK, 0 rows affected (0.00 sec)
mysql> insert t_user(username) values('li'),('wu');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
| 1 | zs |
| 2 | li |
| 3 | wu |
+----+----------+
3 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from t_user;
+----+----------+
| id | username |
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t_user(username) values('wangwu'),('rose'),('jack');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> commite;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'commite' at line 1
mysql> commit;
Query OK, 0 rows affected (0.04 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t_user;
+----+----------+
| id | username |
+----+----------+
| 1 | zs |
| 4 | wangwu |
| 5 | rose |
| 6 | jack |
+----+----------+
4 rows in set (0.00 sec)
7:使用2个事务演示隔离级别
1:read uncommited
2:read committed
3:repeatable read
4:set global transaction isolation level serializable;序列化,排序