java面试题之MySql(1)
一、描述主键、外键、候选主键、超键是什么
- 主 键:用户选作元组标识的一个程序主键
- 外 键:在一个表中存在的另一个表的主键称此表的外键。
- 候选键:是最小超键,即没有冗余元素的超键。
- 超 键:在关系中能唯一标识元组的属性集称为关系模式的超键
二、数据库设计的三大范式
- 第一范式:每个列都不可以再拆分
- 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖与主键的一部分
- 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键
-
三、drop,delete与truncate的区别
- truncate和delete只删除数据不删除表的结构(定义),drop语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index)
- delete 语句是数据库操作语言(dml),事务提交之后才生效;truncate、drop 是数据库定义语言(ddl),操作立即生效。
- delete 语句不影响表所占用的extent,高水线(high watermark)保持原位置不动;显然drop语句将表所占用的空间全部释放; truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reusestorage;truncate 会将高水线复位(回到最开始)。
- 速度:一般来说: drop> truncate > delete
- 安全性:小心使用 drop 和 truncate,尤其没有备份的时候.,否则哭都来不及。
- 使用上:想删除部分数据行用delete,注意带上where子句. 回滚段要足够大。想删除表,当然用drop。想保留表而将所有数据删除,如果和事务无关,用truncate即可; 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
四、SQL UNION 和 UNION ALL 区别
- Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序。
- Union All:对两个结果集进行并集操作,包括重复行,不进行排序。
五、exists、in、any、all区别
- 使用exists的时候,不在对子查询的结果进行缓存,子查询的返回的结果并不重要。
- 使用in的时候,会把子句中的查询作为结果缓存下来,然后对主查询中的每个记录进行查询。
- any:表示满足一个条件即可
- all:要满足子查询中所有的情况
6.sql语句的执行顺序
- from
- where
- group by
- having
- select
- order by
- limit
七、count(*)和count(1)和count(id)区别
-
count(*)和count(1)其实并没有区别,这两者都会将表中所有行都算进来,也就是该表的总行数
-
count(**):扫描全表,但是不取值,按行累加。
-
count(1):扫描全表,但不取值,server层收到的每一行都是1,判断不可能是null,按值累加。
-
count(id):如果该列的值为null时,改行不计入count总数中,否则总数累计+1
-
性能速度:count(主键 id) < count(1) ≈ count(*)
八、SQL语句优化(不少于6条)
一.常规SQL语句优化
- 用TRUNCATE 代替DELETE
- 在确保完整性的情况下,多使用COMMIT语句。
- 尽量减少表的查询次数。
二.表连接优化
1.驱动表的选择:
- 驱动表是指被最先访问的表
2.where子句连接顺序
- 表连接最好都在where条件以前有。
三、尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描
四、尽量避免使用 or,会导致数据库引擎放弃索引进行全表扫描
十、SQL常用函数有哪些?
- AVG(col)返回指定列的平均值
- COUNT(col)返回指
- MIN(col)返回指定列的最小值
- MAX(col)返回指定列的最大值
- SUM(col)返回指定列的所有值之和
- GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果
十、左连接 右连接 内连接的区别
- left join (左连接,左外连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
- right join (右连接,右外连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
- inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
十一、Mysql三种常见引擎的区别
特性 | InnoDB | MyISAM | MEMORY |
---|---|---|---|
事物安全 | 支持 | 不支持 | 不支持 |
对外建的支持 | 支持 | 不支持 | 不支持 |
存储限制 | 64TB | 有 | 有 |
空间使用 | 高 | 低 | 低 |
内存使用 | 高 | 低 | 高 |
插入数据的速度 | 低 | 高 | 高 |