事务
事务的概念
事务就是对数据操作的一系列指令集合。
事务的四个特性
- 原子性
事务的操作要么全部成功,要么全部失败,如果有一个指令失败,那么事务回滚到初始状态。
- 一致性
事务的执行不能破坏数据的完整性和一致性,比如总额是2000,那么无论怎么转账,总额应该保持不变。
- 持久性
一旦事务被提交了,那么无论停电还是宕机,数据都应该永久保存在数据库中。
- 隔离性
事务的操作应该是独立的,不能被其他事务干扰。
事务的隔离级别
- 读未提交(Read uncommitted)
- 可能导致脏读
假如事务A修改了数据,此时并未提交,事务B读取数据之后事务A回滚了,那么事务B读取错误。
- 可能导致脏读
- 读已提交(READ_COMMITTED)
- 可能导致不可重复读
假如事务A在查询数据,此时事务B修改事务并提交,事务A又来查询数据,此时数据不一致。
- 可能导致不可重复读
- 可重复读(Repeatable read)
- 可能导致幻读
假如事务A将某张表的id从1变为2,此时事务B插入一条id为1的数据并提交,事务A再查询,发现没有全部修改,像是出了幻觉。
- 可能导致幻读
- 串行化(Serializable)
- 不会产生任何问题
MySQL支持四种级别,默认可重复读(Repeatable read)。
Oracle支持读已提交(READ_COMMITTED)和串行化(Serializable)两种类型,默认读已提交。
DQL、DML、DDL、DCL的概念与区别
DQL
Data query language 数据查询语言 select操作
DML
Data Manipulation language 数据操作语言 增删改操作
DDL
Data defination language 数据定义语言 建表,删表,修改表字段
DCL
data control language 数据控制语言 commit,revoke,grant之类
分页查询
下面这行查询语句查不到数据
select rownum,sid from student where rownum > 10;
因为rownum是结果集的一个伪列(也就是要先有结果集),结果集现在被默认编号,从1开始,查询第一条结果不满足条件删除,第二条结果又变成了编号1,又不满足被删除,最后就没有满足条件的了。
基本的方式
select *
from (select row_.*, rownum rownum_
from (select *
from student) row_
where rownum <= 10)
where rownum_>= 5;
select * from (select student.*,rownum rownum_ from student where rownum <=10) row_
where rownum_>=5;
Union与Union ALL
Union
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
Union ALL
UNION ALL 命令会列出结果集中所有的值