1.三范式
- 第一范式:强调列的原子性,每一列都不能再分。
- 实体的属性完全依赖于主关键字。
- 非主属性不依赖于其它非主属性。
2.innodb将自增主键存储在内存中,重启之后导致内存中最大自增id丢失。
3.ACID
- A:原子性------一个事物的所有操作,要么都完成,要么都不完成。
- C:一致性-----事物开启到事物结束,数据库的完整性不能被破坏。
- I:隔离性------多个事物同事对数据库读写不受影响。
- D:持久性----事物结束后,对数据库的修改是永久的。
4.char和varchar
- char:固定长度。优点:效率高,缺点:占用空间,使用场景:存储密码。
- varchar:可变长度。空间利用是优势
5.float和doouble
- float存储8位十进制数,内存中占4个字节。
- double存储16位十进制数,内存中占8个字节。
6.内连接,右连接,左连接
- 内连接:inner join ;右连接:right join; 左连接:left join
- 内连接把匹配的关联数据显示出来。
- 左连接左边的表全显示出来,右边的表显示符合条件的数据
- 右连接相反
7.索引实现
b+树 可以达到二分查找的性能
8.验证索引是否有效
explain select * from table where type = 1
9.事务
- read-uncommited:未提交,可被其它事务读取。最低级别。
- read-commited:一个事务提交后才能被其它事务读。(造成幻读,不可重复读)
- pepeatable-read:可重复读,多次读取同一数据,其值都和事务开始的内容一致。(造成幻读)
- serializable:序列化,最高级别。
脏读:一个事务能够读取另一个事务还未提交的数据。
不可重复读:在一个事务内,多次读同一数据。
幻读:同一事务内多次查询返回的结果集不一样。
10常用引擎
- INNoDB:提供事务支持,提供行级锁和外键约束,处理大数据容量。缺点:不支持全文检索,启动慢,写操作不锁全表。
- myiasm:不支持事物,不支持行级锁和外键,写操作锁全表,读操作多于写操作时首选。
11.行锁和表锁
- myisam只支持表级锁,INNoDB支持表锁和行锁,默认支持行锁。
- 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。
- 行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高
12.乐观锁和悲观锁
- 乐观锁:每次取数据时都认为别人不会修改,所以不会上锁。在提交数据更新时会判断有没有人去更新这个数据。
- 悲观锁:每次取数据时都认为别人会修改,每次都会上锁。别人要想拿这个数据就会被阻止,直到锁释放。
13.排查问题的手段
- 使用 show processlist 命令查看当前所有连接信息。
- 使用 explain 命令查询 SQL 语句执行计划。
- 开启慢查询日志,查看慢查询的 SQL。
14.性能优化
- 为搜索字段创建索引
- 避免使用 select *,列出需要查询的字段。
- 垂直分割分表。
- 选择正确的存储引擎。