我的常用
SQL语句
#查询表格中性李的的数量
select count(*) from user where name like '李%'
#将两列合并为一列
select concat(first,last) name from user;
select * from table order by rand() limit 50;
select * from t_user limit 5,10;//6-10行
面试知识
-
5、存储引擎
存储引擎就是表的类型,保存数据文件后缀就会不一样,功能就是处理指令,对表的数据进行CURD;
show engines
可查看支持的存储引擎:InnoDB、MEMORY、CSV、MyISAM。区别
索引是某一列的或者几列的值进行排序的数据结构,这种结构可以提高查询效率,就像书的目录。
- 索引的优缺点
- 加快查询速度、降低磁盘的IO、唯一索引可以保障数据唯一、加速表与表的连接。
- 索引的创建和维护也需要额外的时间和空间;更新表格也需要要花费更多时间。
- 索引的方法:
- B+树:表格中必须有字段是自增的,一般为主键,没有就创建一个,一个数据页默认保存16KB数据,超过时就新增一个数据页面,并且生成目录(保存一千页)这个目录保存每一页最小的值。目录层数不会高于4层,为了减少IO。类似于二叉搜索树,但是节点变成了一个链表。所有的数据都存在最底层的叶子节点中。
- B-树:MyISam使用的方法。
- hash:
- 聚簇索引,只有一个
- 用主键进行排序:页内单链表、页间双链表、
- 叶子节点记录所有的数据
- 优点:查找块
- 缺点:插入有序,一般主键自增。
- 二级索引:
- 除主键,再用一个字段建立索引。只记录主键的值与字段值的映射。
- 回表:用新的字段的B+树搜索,只能找到主键,再利用主键的聚簇索引找到完整的记录。
- 联合索引:两个字段排序,先排第一个,第一个相同就排第二个。
- InnoDB注意
- 根页面万年不动。
- 二级索引也有主键值
- MyISam
- 添加不排序,索引存储的是指针指向每一行。
- 索引和数据分离。
- 所有的索引都是二级索引,但是回表块。
为什么用B+树
-
8、索引的创建与设计原则
索引的类型(不同的存储引擎有支持不同的索引类型)
- 唯一:索引的值是唯一的。
- 普通:字段没有任何约束条件。
- 主键:在唯一的基础上加入了不为空的条件。
- 全文fulltext:适合数据量大的字段。
- 空间:作用于空间类型的字段。
- 查看索引
show index FROM table
,建立索引的方法:- create table时,在primary、unique、外键字段上隐式自动创建。
- 建表的时候
[unique|key|fulltext]index 索引名字(字段)
,选择某个字段创建某种索引。 - 表创建好后:创建索引
create [unique|fulltext] index note_index on 表名(字段);
- 修改表的时候:
alter table 表名 add index 索引名字(字段)
- 使用索引场景:
- 字段有唯一的限制:主键、unique
- 频繁使用 where
索引失效:
数据库优化思路:
三大范式:每一列不能再分;每一列与主键相关;字段不能重复,用外键连接。
- 事务的特性ACID:
- 原子、
- 一致、
- 隔离、
- 一致。
- 脏读:A读取了B更新的数据,B又回滚了。
- 悲观锁和乐观锁:
- 悲观锁在操作数据前把数据锁住,在完成当前操作后才解开锁;
- 乐观锁在提交的时候判断是否有冲突。
体系知识
不要抄,记录官方文档或者视频的结构即可,和内容分布,方便下次查看官方文档
教学视频
MySQL数据库教程天花板,mysql安装到mysql高级,强!硬!
- 索引[115—134]