内容正文:
编写说明:依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循"由浅入深、循序渐进"的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《数据库原理与应用技术-MySQL》(河北科学技术出版社)《一课一练》第64练,内容是查看、使用、修改和删除视图。
《数据库原理与应用技术-MySQL》(河北科学技术出版社)《一课一练》 第64练
查看、使用、修改和删除视图
一、单项选择题
1. 现有视图v_emp不存在,下列 SQL 语句执行后不会报错且能成功创建视图的是( )
A. ALTER VIEW v_emp AS SELECT ename, sal FROM emp;
B. CREATE OR REPLACE VIEW v_emp AS SELECT ename, sal FROM emp;
C. MODIFY VIEW v_emp AS SELECT ename, sal FROM emp;
D. UPDATE VIEW v_emp AS SELECT ename, sal FROM emp;
【答案】B
【解析】
选项 A:ALTER VIEW只能修改已存在的视图,视图不存在时会报错。
选项 B:正确,CREATE OR REPLACE VIEW的特性是:视图存在则替换,不存在则创建,执行永远不会因视图不存在而报错。
选项 C、D:MODIFY VIEW和UPDATE VIEW均为 MySQL 不支持的错误语法。
2.现有视图定义如下:
CREATE VIEW v_sal3000 AS
SELECT ename, sal, deptno FROM emp WHERE sal > 3000
WITH CHECK OPTION;
下列 SQL 语句能够成功执行的是( )
A. UPDATE v_sal3000 SET sal = 2500 WHERE ename = '张三';
B. INSERT INTO v_sal3000 VALUES ('李四', 2800, 10);
C. DELETE FROM v_sal3000 WHERE ename = '王五';
D. UPDATE v_sal3000 SET deptno = 20 WHERE sal = 2900;
【答案】C
【解析】
WITH CHECK OPTION仅约束INSERT 和 UPDATE操作,要求操作后的数据必须满足视图定义的WHERE sal > 3000条件,对DELETE操作无约束。
选项 A:更新后 sal=2500 不满足条件,被阻止。
选项 B:插入的 sal=2800 不满足条件,被阻止。
选项 C:正确,DELETE 操作不受 WITH CHECK OPTION 约束。
选项 D:WHERE 子句中的 sal=2900 本身不在视图范围内,无法更新。
3.现有视图定义如下:
CREATE VIEW v_distinct_dept AS
SELECT DISTINCT deptno FROM emp;
下列 SQL 语句能够成功执行的是( )
A. INSERT INTO v_distinct_dept VALUES (40);
B. UPDATE v_distinct_dept SET deptno = 50 WHERE deptno = 10;
C. DELETE FROM v_distinct_dept WHERE deptno = 20;
D. 以上语句都无法成功执行
【答案】D
【解析】
当视图定义包含DISTINCT 关键字时,该视图属于不可更新视图。因为 DISTINCT 会对结果集进行去重,MySQL 无法确定要更新 / 插入 / 删除的具体基表行。因此选项 A、B、C 均无法执行。
4.下列 SQL 语句中,能够查询当前数据库中所有视图的名称、创建时间和最后修改时间的是( )
A. SELECT table_name, create_time, update_time FROM information_schema.views WHERE table_schema = DATABASE();
B. SELECT view_name, create_time, modify_time FROM information_schema.views WHERE table_schema = DATABASE();
C. SELECT table_name, create_time, update_time FROM information_schema.tables WHERE table_type = 'VIEW';
D. SELECT table_name, create_time, update_time FROM information_schema.tables WHERE table_type = 'VIEW' AND table_schema = DATABASE();
【答案】D
【解析】
选项 A:information_schema.views表中没有 update_time 字段,该字段存储在information_schema.tables表中。
选项 B:系统表中字段名为table_name而非view_name,且无modify_time字段。
选项 C:未限定table_schema = DATABASE(),会查询所有数据库的视图,不准确。
选项 D:正确,视图在 MySQL 中被视为特殊的表(table_type='VIEW'),所有元信息都存储在information_schema.tables表中。
5.要同时删除视图v_emp1、v_emp2和v_emp3(可能部分不存在),下列 SQL 语句最安全且正确的是( )
A. DROP VIEW v_emp1, v_emp2, v_emp3;
B. DROP VIEW IF EXISTS v_emp1, v_emp2, v_emp3;
C. DROP VIEW IF EXISTS v_emp1; DROP VIEW IF EXISTS v_emp2; DROP VIEW IF EXISTS v_emp3;
D. DROP TABLE IF EXISTS v_emp1, v_emp2, v_emp3;
【答案】B
【解析】
选项 A:如果其中任何一个视图不存在,整个语句都会报错,已存在的视图也不会被删除。
选项 B:正确,IF EXISTS关键字可以避免因视图不存在而报错,且支持逗号分隔多个视图名,批量删除效率最高。
选项 C:虽然可以执行,但写法繁琐,不如选项 B 简洁规范。
选项 D:DROP TABLE用于删除表,会误删同名表(若存在)。
6.现有视图定义如下:
CREATE VIEW v_emp_dept10_20 AS
SELECT ename, deptno FROM emp WHERE deptno = 10
UNION
SELECT ename, deptno FROM emp WHERE deptno = 20;
下列 SQL 语句能够成功执行的是( )
A. INSERT INTO v_emp_dept10_20 VALUES ('赵六', 30);
B. UPDATE v_emp_dept10_20 SET deptno = 30 WHERE deptno = 10;
C. DELETE FROM v_emp_dept10_20 WHERE deptno = 20;
D. 以上语句都无法成功执行
【答案】D
【解析】
当视图定义包含UNION 或 UNION ALL 关键字时,该视图属于不可更新视图。因为 UNION 会合并多个结果集,MySQL 无法确定要操作的具体基表行。因此选项 A、B、C 均无法执行。
7.现有视图v_stu定义如下:
CREATE VIEW v_stu AS
SELECT sno, sname, sage FROM student;
要将视图的列名修改为学号、姓名、年龄,下列 SQL 语句正确的是( )
A. ALTER VIEW v_stu RENAME COLUMN sno TO 学号, sname TO 姓名, sage TO 年龄;
B. ALTER TABLE v_stu RENAME COLUMN sno TO 学号, sname TO 姓名, sage TO 年龄;
C. CREATE OR REPLACE VIEW v_stu (学号, 姓名, 年龄) AS SELECT sno, sname, sage FROM student;
D. MODIFY VIEW v_stu (学号, 姓名, 年龄) AS SELECT sno, sname, sage FROM student;
【答案】C
【解析】
选项 A:MySQL 不支持ALTER VIEW ... RENAME COLUMN语法,无法直接修改视图列名。
选项 B:ALTER TABLE会修改基表student的列名,而不是视图的列名,会造成严重后果。
选项 C:正确,要修改视图列名,必须使用CREATE OR REPLACE VIEW重新定义视图,并在视图名后显式指定新的列名列表。
选项 D:MODIFY VIEW为错误语法。
8.下列 SQL 语句中,能够查看视图v_course的字符集和排序规则的是( )
A. SHOW CREATE VIEW v_course;
B. DESC v_course;
C. SELECT table_collation FROM information_schema.tables WHERE table_name = 'v_course' AND table_schema = DATABASE();
D. SELECT character_set_name FROM information_schema.views WHERE table_name = 'v_course' AND table_schema = DATABASE();
【答案】C
【解析】
选项 A:SHOW CREATE VIEW显示的是视图的创建语句,不包含字符集和排序规则信息。
选项 B:DESC显示的是视图的列结构,不包含整个视图的字符集信息。
选项 C:正确,视图的字符集和排序规则存储在information_schema.tables表的table_collation字段中。
选项 D:information_schema.views表中没有character_set_name字段。
9.要将视图v_old重命名为v_new,下列 SQL 语句正确的是( )
A. RENAME VIEW v_old TO v_new;
B. ALTER VIEW v_old RENAME TO v_new;
C. RENAME TABLE v_old TO v_new;
D. CREATE OR REPLACE VIEW v_new AS SELECT * FROM v_old; DROP VIEW v_old;
【答案】C
【解析】
选项 A、B:MySQL 没有RENAME VIEW或ALTER VIEW ... RENAME TO语法。
选项 C:正确,MySQL 中视图被视为特殊的表,因此可以使用RENAME TABLE语句重命名视图。
选项 D:虽然可以实现重命名效果,但会重新创建视图并删除原视图,效率低且可能丢失原视图的权限信息,不是正确的重命名方法。
10.现有视图定义如下:
CREATE VIEW v_emp_dept AS
SELECT e.ename, e.sal, d.dname
FROM emp e JOIN dept d ON e.deptno = d.deptno
WITH CHECK OPTION;
下列 SQL 语句能够成功执行的是( )
A. UPDATE v_emp_dept SET sal = 5000 WHERE ename = '张三';
B. UPDATE v_emp_dept SET dname = '销售部' WHERE ename = '李四';
C. INSERT INTO v_emp_dept VALUES ('王五', 4000, '财务部');
D. DELETE FROM v_emp_dept WHERE ename = '赵六';
【答案】A
【解析】
多表连接视图只有在更新的列全部来自同一个基表时才可能可更新。
选项 A:正确,sal列来自基表emp,且更新后的数据仍满足视图的连接条件(隐含 WITH CHECK OPTION 约束)。
选项 B:dname列来自基表dept,但 MySQL 无法确定要更新dept表中的哪一行(多个员工可能属于同一个部门),因此无法执行。
选项 C:插入操作需要同时向两个基表插入数据,MySQL 不支持。
选项 D:删除操作需要同时从两个基表删除数据,MySQL 不支持。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$
编写说明:依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循"由浅入深、循序渐进"的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。
本卷是《数据库原理与应用技术-MySQL》(河北科学技术出版社)《一课一练》第64练,内容是查看、使用、修改和删除视图。
《数据库原理与应用技术-MySQL》(河北科学技术出版社)《一课一练》 第64练
查看、使用、修改和删除视图
一、单项选择题
1. 现有视图v_emp不存在,下列 SQL 语句执行后不会报错且能成功创建视图的是( )
A. ALTER VIEW v_emp AS SELECT ename, sal FROM emp;
B. CREATE OR REPLACE VIEW v_emp AS SELECT ename, sal FROM emp;
C. MODIFY VIEW v_emp AS SELECT ename, sal FROM emp;
D. UPDATE VIEW v_emp AS SELECT ename, sal FROM emp;
2.现有视图定义如下:
CREATE VIEW v_sal3000 AS
SELECT ename, sal, deptno FROM emp WHERE sal > 3000
WITH CHECK OPTION;
下列 SQL 语句能够成功执行的是( )
A. UPDATE v_sal3000 SET sal = 2500 WHERE ename = '张三';
B. INSERT INTO v_sal3000 VALUES ('李四', 2800, 10);
C. DELETE FROM v_sal3000 WHERE ename = '王五';
D. UPDATE v_sal3000 SET deptno = 20 WHERE sal = 2900;
3.现有视图定义如下:
CREATE VIEW v_distinct_dept AS
SELECT DISTINCT deptno FROM emp;
下列 SQL 语句能够成功执行的是( )
A. INSERT INTO v_distinct_dept VALUES (40);
B. UPDATE v_distinct_dept SET deptno = 50 WHERE deptno = 10;
C. DELETE FROM v_distinct_dept WHERE deptno = 20;
D. 以上语句都无法成功执行
4.下列 SQL 语句中,能够查询当前数据库中所有视图的名称、创建时间和最后修改时间的是( )
A. SELECT table_name, create_time, update_time FROM information_schema.views WHERE table_schema = DATABASE();
B. SELECT view_name, create_time, modify_time FROM information_schema.views WHERE table_schema = DATABASE();
C. SELECT table_name, create_time, update_time FROM information_schema.tables WHERE table_type = 'VIEW';
D. SELECT table_name, create_time, update_time FROM information_schema.tables WHERE table_type = 'VIEW' AND table_schema = DATABASE();
5.要同时删除视图v_emp1、v_emp2和v_emp3(可能部分不存在),下列 SQL 语句最安全且正确的是( )
A. DROP VIEW v_emp1, v_emp2, v_emp3;
B. DROP VIEW IF EXISTS v_emp1, v_emp2, v_emp3;
C. DROP VIEW IF EXISTS v_emp1; DROP VIEW IF EXISTS v_emp2; DROP VIEW IF EXISTS v_emp3;
D. DROP TABLE IF EXISTS v_emp1, v_emp2, v_emp3;
6.现有视图定义如下:
CREATE VIEW v_emp_dept10_20 AS
SELECT ename, deptno FROM emp WHERE deptno = 10
UNION
SELECT ename, deptno FROM emp WHERE deptno = 20;
下列 SQL 语句能够成功执行的是( )
A. INSERT INTO v_emp_dept10_20 VALUES ('赵六', 30);
B. UPDATE v_emp_dept10_20 SET deptno = 30 WHERE deptno = 10;
C. DELETE FROM v_emp_dept10_20 WHERE deptno = 20;
D. 以上语句都无法成功执行
7.现有视图v_stu定义如下:
CREATE VIEW v_stu AS
SELECT sno, sname, sage FROM student;
要将视图的列名修改为学号、姓名、年龄,下列 SQL 语句正确的是( )
A. ALTER VIEW v_stu RENAME COLUMN sno TO 学号, sname TO 姓名, sage TO 年龄;
B. ALTER TABLE v_stu RENAME COLUMN sno TO 学号, sname TO 姓名, sage TO 年龄;
C. CREATE OR REPLACE VIEW v_stu (学号, 姓名, 年龄) AS SELECT sno, sname, sage FROM student;
D. MODIFY VIEW v_stu (学号, 姓名, 年龄) AS SELECT sno, sname, sage FROM student;
8.下列 SQL 语句中,能够查看视图v_course的字符集和排序规则的是( )
A. SHOW CREATE VIEW v_course;
B. DESC v_course;
C. SELECT table_collation FROM information_schema.tables WHERE table_name = 'v_course' AND table_schema = DATABASE();
D. SELECT character_set_name FROM information_schema.views WHERE table_name = 'v_course' AND table_schema = DATABASE();
9.要将视图v_old重命名为v_new,下列 SQL 语句正确的是( )
A. RENAME VIEW v_old TO v_new;
B. ALTER VIEW v_old RENAME TO v_new;
C. RENAME TABLE v_old TO v_new;
D. CREATE OR REPLACE VIEW v_new AS SELECT * FROM v_old; DROP VIEW v_old;
10.现有视图定义如下:
CREATE VIEW v_emp_dept AS
SELECT e.ename, e.sal, d.dname
FROM emp e JOIN dept d ON e.deptno = d.deptno
WITH CHECK OPTION;
下列 SQL 语句能够成功执行的是( )
A. UPDATE v_emp_dept SET sal = 5000 WHERE ename = '张三';
B. UPDATE v_emp_dept SET dname = '销售部' WHERE ename = '李四';
C. INSERT INTO v_emp_dept VALUES ('王五', 4000, '财务部');
D. DELETE FROM v_emp_dept WHERE ename = '赵六';
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$