「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」。
1.描述主键、外键、候选主键、超键是什么?
主 键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
外 键:在一个表中存在的另一个表的主键称此表的外键。
超 键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。
候选键:是最小超键,即没有冗余元素的超键。
2.数据库设计的三大范式
第一范式,数据库表中的所有字段值都是不可分解的原子值
第二范式,数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)
第三范式,数据表中的每一列数据都和主键直接相关,而不能间接相关
3.drop,delete与truncate的区别
-
1、drop (删除表):
删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表。 drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
-
2、truncate (清空表中的数据):
删除内容、释放空间但不删除定义(保留表的数据结构)。与drop不同的是,只是清空表数据而已。 注意:truncate 不能删除行数据,要删就要把表清空。再插入时自增长id又从1开始。
-
3、delete (删除表中的数据):
delete 语句用于删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。可以加where字句。
4、UNION 和 UNION ALL 区别
UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
1、对重复结果的处理:UNION在进行表连接后会筛选掉重复的记录,Union All不会去除重复记录。
2、对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
3、执行效率:从效率上说,UNION ALL 要比UNION快很多
5.exists、in、any、all区别
exists和in区别:(exists和in都适用于连接子查询的)
- 使用in的时候,会把子句中的查询作为结果缓存下来,然后对主查询中的每个记录进行查询。
- 使用exists的时候,不在对子查询的结果进行缓存,子查询的返回的结果并不重要。使用exists的时候,先对主查询进行查询,然后根据子查询的结果是否为真来决定是否返回。在使用exists的时候,如果子查询返回结果集的时候为真,主查询返回结果。 all 和 any区别:
- any:any和some一样表示满足一个条件
- all:要满足子查询中所有的情况