MySQL
一、事务
1.什么是事务
事务:是一组原子操作单元,要么全部执行成功,要么撤销不执行
2.事务的四大特性(ACDI)
原子性(atomicity):原子性表示事务中包含的操作要么都做,要么都不做。
一致性(consistency):一致性表示一个事务执行之前和执行之后都必须处于一致性状态。
隔离性(isolation):隔离性表示事务不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性(durability):持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的
3.不考虑隔离性会产生的三个问题
-
脏读:在一个事务处理过程里读取了另一个未提交的事务中的数据
-
不可重复读:一个事务两次读取同一行的数据,结果得到不同状态的结果
-
幻读(虚读):一个事务执行两次查询,第二次结果集包含第一次中没有或某些行已经被删除的数据,造成两次结果不一致
4.三个问题的解决方法(四种隔离性)
Read Uncommited(读取未提交内容)
读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据,
- 读未提交产生了脏读
Read Commited(读取提交内容)
读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据
-
读提交解决了脏读
-
读提交会产生不可重复读
Repeatable Read(重复读)
重复读,就是在开始读取数据(事务开启)时,不再允许修改操作
-
重复读解决了不可重复读
-
重复读会产生幻读
Serializable(可串行化)
Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行
-
可以避免脏读,不可重复读,幻读
-
效率低下,比较耗数据库性能,一般不使用
注意
1.大多数数据库默认的事务隔离级别是Read committed(Mysql的默认隔离级别是Repeatable read)
2.隔离级别的设置只对当前链接有效
3.设置数据库的隔离级别一定要是在开启事务之前
二、索引
1.索引的种类
-
唯一索引:加速查询 + 列值唯一(可以有null)
-
主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
-
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
-
全文索引:对文本的内容进行分词,进行搜索
2.索引的目的
-
快速访问数据表中的特定信息,提高检索速度
-
创建唯一性索引,保证数据库表中每一行数据的唯一性。
-
加速表和表之间的连接
-
使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间
3.什么时候使用索引
-
表中该字段中的数据量庞大
-
经常被检索,经常出现在where子句中的字段
-
经常被DML操作的字段不建议添加索引
4.索引的缺点
-
创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;
-
索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;
-
当对表进行增、删、改、的时候索引也要动态维护,这样就降低了数据的维护速度。
三、存储引擎
1.MySQL的存储引擎
其中三种比较重要
-
MyISAM:可压缩,设置为只读,节省空间。
-
INnoDB(默认使用):支持事务,外键的完整性,级联删除,级联更新。
-
MEMORY(记忆):数据存储在内存中,时临时的,数据查询非常快。
2.存储引擎的选择
-
Myisam:大量的读少量更新
-
InnoDB:支持事务和并发
-
Memory:非永久需要的数据
其他常见问题
1.LIMIT分页
select * from emp limit m,n;
- 从m+1开始,展示n条数据
2.order by 和 group by关键字
-
order by
排序采用order by子句,order by后面跟上排序字段,排序字段后面可以放多个,多个采用逗号间隔
order by默认采用升序asc,降序为desc
如果存在where子句,那么order by必须放在where 语句后面。
-
group by
分组查询采用order by子句,如果使用了order by,order by 必须放到group by后面。
在sql语句中,select语句后面只能跟分组函数+参与分组的字段。
如果想要对分组数据再进行过滤需要使用having子句。
3.MySQL常见约束
-
非空:not null
-
唯一约束:unique
-
主键约束: primary key,唯一标识一条记录,不能有重复,不能为空。
-
外键约束: foreign key,表的外键是另一个表的主键,外键可以为空,可以重复。
4.左连接和右连接的区别
-
左连接是显示左表的所有数据,没有匹配的以null值显示,以左表为主表。
-
右连接是显示右表的所有数据,没有匹配的以null值显示,以右表为主表。
5.数据库三范式的理解
-
第一范式(1NF):原子性 每个字段不可再分,否则就不是关系数据库;
-
第二范式(2NF):唯一性 一个表只说明一个事物,所有非关键字段都完全依赖于任一组候选关键字;
-
第三范式(3NF):每列都与主键有直接关系,不存在传递依赖;