1、数据库三大范式
- 第一范式:每个列都不可以再拆分
- 第二范式:在第一范式的基础上,非主键完全依赖于主键,而不能是依赖于主键的一部分
- 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其它非主键
2、Mysql存储引擎MyISAM与InnoDb区别
- Innodb引擎:Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。
- MyIASM引擎(原本Mysql的默认引擎):不提供事务的支持,也不支持行级锁和外键。
- MEMORY引擎:所有的数据都在内存中,数据的处理速度快,但是安全性不高。
- MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。
- Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键。比如OA自动化办公系统。
3、索引:是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
- 优点:可以大大加快数据的检索速度,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
- 缺点:创建索引和维护索引要耗费时间,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率;
- 索引需要占物理空间
- 主键索引:数据列不允许重复,不允许为NULL,一个表只能有一个主键
- 唯一索引:数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
- 可以通过alter table table_name add unique(column);创建唯一索引
- 可以通过alter table table_name add unique(column1,column2);床架唯一组合索引
- 普通索引:基本的索引类型,没有唯一性的限制,允许为null值
- 可以通过ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引
- 可以通过ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引
- 全文索引:是目前搜索引擎使用的一种关键技术
- 可以通过
ALTER TABLE table_name ADD FULLTEXT (column);
创建全文索引
4、InnoDB存储引擎索引实现为:B+树索引
5、索引失效的情况
- 前导模糊查询不能利用索引(like '%xx' 或者 '%xx%')
- 如果是组合索引的话,如果不按照索引的顺序进行查找,比如直接使用第三个位置上的索引而忽略第一二个位置上的索引时,则会进行全表查询。索引为c1,c2,c3,c4直接使用c3是全表查询,无法使用该索引的,所以c3字段使用索引的前提是c1,c2两字段均使用了索引。
- 条件中有or
- 索引无法存储null值,所以where的判断条件如果对字段进行了null值判断,将导致数据库放弃索引而进行全表查询。
- 索引无法存储null值得原因:索引时有序的,null 进入索引时,无法确定其应该在哪里,
- 应尽量避免在where子句中适应!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
- in和not in也要慎用,否则会导致全表扫描。
- 应避免在where字子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。substring(name,1,3)='abc'
- 应避免在where子句中对字段进行表达式操作。
6、Sql约束有哪几种?
- NOT NULL: 用于控制字段的内容一定不能为空(NULL)。
- UNIQUE: 控件字段内容不能重复,一个表允许有多个 Unique 约束。
- PRIMARY KEY: 也是用于控件字段内容不能重复,但它在一个表只允许出现一个。
- FOREIGN KEY: 用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
- CHECK: 用于控制字段的值范围。
7、关联查询
- 交叉连接(CROSS JOIN)
- 内连接(INNER JOIN)
- 外连接(LEFT JOIN/RIGHT JOIN)左外连接:LEFT OUTER JOIN, 以左表为主,先查询出左表,按照ON后的关联条件匹配右表,没有匹配到的用NULL填充,可以简写成LEFT JOIN
右外连接:RIGHT OUTER JOIN, 以右表为主,先查询出右表,按照ON后的关联条件匹配左表,没有匹配到的用NULL填充,可以简写成RIGHT JOIN - 联合查询(UNION与UNION ALL)
- 全连接(FULL JOIN)
- 交叉连接(CROSS JOIN)
8、子查询
-
条件:一条SQL语句的查询结果做为另一条查询语句的条件或查询结果
-
嵌套:多条SQL语句嵌套使用,内部的SQL查询语句称为子查询。