18.事务(自动提交/手动提交)
1.一个语句就是一个事务,-----》默认的,也就是自动提交的
create table account(id int primary key auto_increment, name varchar(20) not null, money int ); insert into account(name,money) values('张三',2000),('李四',2000); update account set money=money-1000 where name='张三'; update account set money=money+1000 where name='李四';
1.在自动提交的前提下,张三和李四的钱会得到正确的变动,假如说不是自动提交,就会出现一些事故。
1.自动提交不会报错
2.模拟排错.......... 程序排除异常.... update account set money=money-1000 where name='张三'; update account set money=money+1000 where name='李四';
2.自动提交的情况下模拟转账出错
3.事务操作:(手动操作在当前的表中可变化,在另一个表中不变化) (1).查看事务的提交方式: select @@autocommit; (2).设置事务的提交方式: set @@autocommit=0; (手动) (3).手动提交事务: commit; (当sql见到这个语句的时候,才会从缓冲区提取出来执行,就相当于 自动提交时候的分号) (4).回滚事务: rollback: (当事务遇到异常的时候,就会实现数据的回滚)
1.设置为手动提交的时候,此窗口的数据是变化可见的,但其他窗口不变
()不提交的前提下
2.输入commit后,另一个窗口就会改变
3.手动提交并不能解决(转账问题),只有rollback回滚数据才可以
4.如果有异常就实现数据的回滚
19.事务(不修改事务提交方式,如何控制事务)
1.开启事务: start transaction或begin 2.提交事务: commit 3.回滚事务: rollback
1.不改变事务提交方式的前提下,进行控制事务
20.事务的四大特性(ACID)
1.原子性: 针对一个事务,这个事务要么一起成功,要么一起失败。 2.一致性: 无论数据怎么转(转钱),数据的最终数据都是一样的(比如800,200,最终数据是100)-《最终结果一致性》 3.持久性: 事务结束后的数据不会随着外部原因导致数据丢失。(断电、服务器崩溃) (1).事务没有提交就会自动回滚数据。 (2).事务如果已经提交那么数据就是提交后的结果。 4.隔离性: 针对多个用户同时操作,主要是排除其他事务对本次事务的影响; eg: A-->转钱B; C---->转钱B。 会有一个隔离级别,假如隔离成功就能同时运行,否则就会出现隔离级别问题
1.原子性:
2.一致性(最终结果一致)
3.持久性
4.隔离性
21.并发事务问题/事务隔离级别(解决事务并发问题)
1.事务的隔离级别: (1).胀读:指一个事务读取了另外一个未提交的事务。 (2).不可重复读:一个事务先后读取同一条记录,但两次读取的数据结果不同,称之为不可重复读 (3).幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了欢迎。
2.隔离级别:(四大隔离级别/解决事务并发问题) (1).read uncommitted (不可以解决:胀读 不可重复读 幻读) (2).read committed (不可以解决:不可重复读 幻读) (3).repeatable read(默认) (不可以解决:幻读) (4).serializable (都可解决)
3.查看事务的隔离级别: (1).select @@tx_isolation; 设置事务隔离级别 (2).set [session | global] transaction isolation level { 隔离等级};
1.模拟脏读的现象(read uncommitted) 读到未提交的数据
2.解决脏读(read committed)
3.模拟不可重复读的问题(readn committed)
4.解决不可重复读问题
5.模拟幻读的问题:
6.解决幻读的问题
22.组合查询(union)
- Union必须有两条或者两条以上的select 语句组成,语句之间用关键字Union分割,(因此,如果组合四条select 语句,将要使用三个union)
- union中的每个查询必须包含相同的列,表达式或聚集函数(不过,各个列不需要以相同的次序列出)
- 列数据类型必须兼容:类型不必完全相同,但必须时DBMS可以隐含转换的类型。
1. union: 组合查询,会查找全部信息(但不包括重复信息) 2. select name from student where id=1 union select name from student where id=1; 3. union all: 组合查询,会查找全部信息(包括重复信息) 4. select name from student where id=1 union all select name from student where id=1;