MySQL面试深度解析:触发器、约束与查询

需积分: 0 0 下载量 136 浏览量 更新于2024-08-03 收藏 21KB DOCX 举报
"MySQL 48道面试题及答案.docx" 在MySQL数据库中,触发器是一种重要的数据库对象,它允许预定义一段代码,在特定的事件(如INSERT、UPDATE或DELETE)发生时自动执行。触发器的主要作用是扩展SQL语言的功能,以实现更复杂的业务逻辑,比如数据验证、级联更新或审计跟踪等。使用场景包括但不限于: 1. 级联更改:当一张表中的数据发生变化时,可以触发相关联的其他表进行同步更新。 2. 实时监控:监控表中特定字段的变化,并根据变化执行相应操作。 3. 生成业务编号:在插入新记录时,自动为业务生成唯一的序列号。 4. 数据一致性维护:确保数据在事务中的完整性。 MySQL支持六种类型的触发器,对应于DML(数据操纵语言)操作之前或之后的执行时刻: 1. BeforeInsert:在插入新记录前触发。 2. AfterInsert:在插入新记录后触发。 3. BeforeUpdate:在更新记录前触发。 4. AfterUpdate:在更新记录后触发。 5. BeforeDelete:在删除记录前触发。 6. AfterDelete:在删除记录后触发。 超键、候选键、主键和外键是数据库理论中的关键概念: - 超键:一组列,其值能够唯一标识表中的每一行。 - 候选键:超键中最小的、没有冗余元素的集合,满足唯一标识行的条件。 - 主键:表的特殊候选键,被选为主键后,它的值必须唯一且非空,用以标识表中的每一行。 - 外键:一个表中引用另一个表主键的列,用于维护表间的关系,确保数据的一致性和完整性。 SQL约束是用来保证数据完整性的规则,主要包括: 1. NOT NULL:确保字段值不能为空。 2. UNIQUE:确保字段的值在整个表中是唯一的。 3. PRIMARY KEY:定义主键,确保其唯一性和非空性。 4. FOREIGN KEY:定义外键,关联两个表,防止非法数据插入。 5. CHECK:限制字段值的范围,确保符合特定条件。 关联查询是SQL中用来合并来自多个表的数据的方法: 1. 交叉连接:返回所有可能的行组合,不考虑任何条件。 2. 内连接:返回满足指定条件的两表交集。 3. 外连接:分为左连接、右连接和全连接,返回所有匹配或非匹配的行。 4. 联合查询(UNION):合并两个或更多SELECT语句的结果,去除重复行。 5. 全连接:返回所有左表和右表的行,即使没有匹配项。 字段类型如varchar(50)中的50表示该字段最大可存储50个字符。对于varchar,实际存储空间取决于字符串的实际长度,而不仅仅是声明的最大长度。相比之下,char(20)无论字符串多长,都会占用20个字符的空间,不足部分用空格填充。int(20)中的20是指显示长度,并不影响实际存储的整数值大小。 在数据清理操作中,`DROP`、`DELETE`和`TRUNCATE`各有不同: - `DELETE`:删除表中的行,可恢复,通常需要WHERE子句指定条件,支持事务。 - `TRUNCATE`:快速删除所有数据,不可恢复,不记录单行信息,不支持事务。 - `DROP`:删除整个表,不可恢复,释放所有相关空间。 `UNION`和`UNION ALL`用于合并多个SELECT语句的结果: - `UNION`:去除重复行,返回唯一结果。 - `UNION ALL`:保留所有行,包括重复行,执行效率通常高于`UNION`。 了解这些知识点对于理解MySQL数据库的设计和管理至关重要,有助于解决实际开发中遇到的问题,并提升数据库性能和数据安全性。