当前位置:   article > 正文

SQL频率低但笔试会遇到: 触发器、索引、外键约束_mysql 中触发器练习题

mysql 中触发器练习题

一. 前言

        在SQL面笔试中,对于表的连接方式,过滤条件,窗口函数等肯定是考察的重中之重,但是有一些偶尔会出现,频率比较低但是至少几乎会遇见一两次的题目,就比如触发器,索引和外键约束,此类题目实际操作过或者专门记忆过就会,否则肯定是无从下手,因为此类题目几乎就是背诵式的题目,那么接下来列举几道此类型的题目。

 

二. 经典案例

1. 牛客SQL121 创建索引

        现有一张试卷信息表examination_info,其中包含各种类型试卷的信息。为了对表更方便快捷地查询,需要在examination_info表创建以下索引,规则如下:
在duration列创建普通索引idx_duration、在exam_id列创建唯一性索引uniq_idx_exam_id、在tag列创建全文索引full_idx_tag。

根据题意,将返回如下结果:

  1. drop table if exists examination_info;
  2. CREATE TABLE IF NOT EXISTS examination_info (
  3. id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
  4. exam_id int UNIQUE NOT NULL COMMENT '试卷ID',
  5. tag varchar(32) COMMENT '类别标签',
  6. difficulty varchar(8) COMMENT '难度',
  7. duration int NOT NULL COMMENT '时长',
  8. release_time datetime COMMENT '发布时间'
  9. )CHARACTER SET utf8 COLLATE utf8_bin;
题目解答
  1. create index idx_duration on examination_info(duration);
  2. create unique index uniq_idx_exam_id on examination_info(exam_id);
  3. create fulltext index full_idx_tag on examination_info(tag);
题目相关
1.创建索引

create方式创建索引:

  1. CREATE
  2. [UNIQUE -- 唯一索引
  3. | FULLTEXT -- 全文索引
  4. ] INDEX index_name ON table_name -- 不指定唯一或全文时默认普通索引
  5. (column1[(length) [DESC|ASC]] [,column2,...]) -- 可以对多列建立组合索引

alter方式创建索引:

  1. ALTER TABLE tb_name ADD [UNIQUE | FULLTEXT] [INDEX] index_content(content)
2.删除索引

drop方式删除索引:

DROP INDEX <索引名> ON <表名>

alter方式删除索引:

ALTER TABLE <表名> DROP INDEX <索引名>

2. 牛客SQL240 在audit表上创建外键约束,其emp_no对应employees_test表的主键id

在audit表上创建外键约束,其emp_no对应employees_test表的主键id。
(以下2个表已经创建了)

  1. CREATE TABLE employees_test(
  2. ID INT PRIMARY KEY NOT NULL,
  3. NAME TEXT NOT NULL,
  4. AGE INT NOT NULL,
  5. ADDRESS CHAR(50),
  6. SALARY REAL
  7. );
  8. CREATE TABLE audit(
  9. EMP_no INT NOT NULL,
  10. create_date datetime NOT NULL
  11. );

后台会判断是否创建外键约束,创建输出1,没创建输出0 

  1. drop table if exists audit;
  2. drop table if exists employees_test;
  3. CREATE TABLE employees_test(
  4. ID INT PRIMARY KEY NOT NULL,
  5. NAME TEXT NOT NULL,
  6. AGE INT NOT NULL,
  7. ADDRESS CHAR(50),
  8. SALARY REAL
  9. );
  10. CREATE TABLE audit(
  11. EMP_no INT NOT NULL,
  12. create_date datetime NOT NULL
  13. );
  14. 输出:
  15. 1
 题目解答
  1. alter table audit
  2. add constraint foreign key (emp_no)
  3. references employees_test (id);
 题目相关
  1. 创建外键语句结构:
  2. ALTER TABLE <表名>
  3. ADD CONSTRAINT FOREIGN KEY (<列名>)
  4. REFERENCES <关联表>(关联列)

 

3. SQL235 构造一个触发器audit_log

构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。

  1. CREATE TABLE employees_test(
  2. ID INT PRIMARY KEY NOT NULL,
  3. NAME TEXT NOT NULL,
  4. AGE INT NOT NULL,
  5. ADDRESS CHAR(50),
  6. SALARY REAL
  7. );
  8. CREATE TABLE audit(
  9. EMP_no INT NOT NULL,
  10. NAME TEXT NOT NULL
  11. );
  1. 后台会往employees_test插入一条数据:
  2. INSERT INTO employees_test (ID,NAME,AGE,ADDRESS,SALARY)VALUES (1, 'Paul', 32, 'California', 20000.00 );
  3. 然后从audit里面使用查询语句:
  4. select * from audit;
  1. drop table if exists audit;
  2. drop table if exists employees_test;
  3. CREATE TABLE employees_test(
  4. ID INT PRIMARY KEY NOT NULL,
  5. NAME TEXT NOT NULL,
  6. AGE INT NOT NULL,
  7. ADDRESS CHAR(50),
  8. SALARY REAL
  9. );
  10. CREATE TABLE audit(
  11. EMP_no INT NOT NULL,
  12. NAME TEXT NOT NULL
  13. );
 题目解答
  1. create trigger audit_log after insert on employees_test
  2. for each row
  3. begin
  4. insert into audit values(NEW.ID,NEW.NAME);
  5. end
 题目相关
  1. 在MySQL中,创建触发器语法如下:
  2. CREATE TRIGGER trigger_name
  3. trigger_time trigger_event ON tbl_name
  4. FOR EACH ROW
  5. trigger_stmt
  6. 其中:
  7. trigger_name:标识触发器名称,用户自行指定;
  8. trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
  9. trigger_event:标识触发事件,取值为 INSERTUPDATEDELETE
  10. tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
  11. trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGINEND 包含的多条语句,每条语句结束要分号结尾。
  12. NEWOLD 详解】
  13. MySQL 中定义了 NEWOLD,用来表示
  14. 触发器的所在表中,触发了触发器的那一行数据。
  15. 具体地:
  16. INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;
  17. UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;
  18. DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据;
  19. 使用方法: NEW.columnName (columnName 为相应数据表某一列名)

 

参考来源Ref.

[1] 牛客 webary 题解 | #SQL 12.创建索引#

[2] 牛客 webary高质量搬砖人 SQL 46) -ADD CONSTRAINT FOREIGN KEY 创建外键约束

[3] CSDN 白色爬虫 MySQL数据库触发器讲解与案例

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/240968?site
推荐阅读
相关标签
  

闽ICP备14008679号