Mysql 整理

发布时间: 2018-07-22 21:28:35

基础知识

  • 三范式 1.每一列不可拆分,比如地址,江西省南昌市,如果你认为,父母可以拆分为父亲与母亲.2.每一列都依赖与主属性所确定,比如学号可以确定学生姓名,但是不能确定课程号3.不能存在转递属性,比如学号系名称系主任,这样就存在转递属性
  • binlog级别 1.statement:记录sql语句2.row记录每一个变得的数据,mixted,将row和statement结合的方式

引擎

  • Myisam与Innodb区别
  • 储存方式:文件格式,myisam可以被压缩
  • myisam不支持事务和外键
  • Innodb是聚族索引,主键索引存储着行数据,聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据

索引

  • 索引就是在mysql中就是用B树或者B+树实现的快速查找数据的目录.数据都存储在树的叶子点上所有可以根据所有来遍历树进行快速查找.
  • 分类
  • 唯一索引:ALTER TABLE table_name ADD UNIQUE (column1,column2);
  • 普通索引:ALTER TABLE table_name ADD INDEX index_name (column);
  • 全文索引:ALTER TABLE table_name ADD FULLTEXT (column);
  • 原理
  • 对索引上的列的数据生成hash值,作为key,原始数据作为value.
  • 最左侧原则:
  • 联合索引是在最左边的索引基础上建立,索引必须包含最左侧的索引.

事务

  • 四个特性
  • 一致性,原子性,持久性,隔离性,
  • 出现的问题
  • 脏读:一个事务中更新某些数据,但是没有提交,另一个事务中读取这个更新的数据.
  • 不可重复读:一个事务中两次相同的查询的数据不一样
  • 幻读:一个事务中相同的查询得到的数据行数不一样.

  • 行级锁,InnoDB
  • 表级锁:InnoDb,MyISAM
  • 悲观锁:假定会发生冲突,查询数据的时候就进行加索
  • 乐观锁:修改数据的时候进行加锁,用在写比较多的场景

sql优化

  • where 语句
  • 避免与null值做判断,in,>=,!=,在=的左边进行函数相关操作

数据库优化

  • 读写分离,缓存,分库分表