MySql常见问题和描述

发布时间 2023-03-30 10:23:44作者: sun-sailing
1 数据库的三范式是什么
  第一范式:列不可再分
  第二范式:行可以唯一区分,主键约束
  第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束
  且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上。
 
2 数据库的事务
  什么是事务?: 多条sql语句,要么全部成功,要么全部失败。
  数据库事务特性ACID:原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabiliy)。
  原子性Atomic:组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有操作都成功,整个事务才会提交。任何一个操作失败,已经执行的任何操作都必须撤销,让数据库返回初始状态。
  一致性:事务操作成功后,数据库所处的状态和它的业务规则是一致的。即数据不会被破坏。如A转账100元给B,不管操作是否成功,A和B的账户总额是不变的。
  隔离性:在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对彼此产生干扰
  持久性:一旦事务提交成功,事务中的所有操作都必须持久化到数据库中。
 
3、索引问题
  主键索引(PRIMARY) 数据列不允许重复,不允许为NULL,一个表只能有一个主键。
  唯一索引(UNIQUE)数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
  普通索引(INDEX)
  全文索引(FULLTEXT)
 
4 SQL优化
  查询语句中不要使用select *
  尽量减少子查询,使用关联查询(left join,right join,inner join)替代
  减少使用IN或者NOT IN ,使用exists,not exists或者关联查询语句替代
  or 的查询尽量用 union或者union all 代替(在确认没有重复数据或者不用剔除重复数据时,union all会更好)
  应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
  应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0。