第60练 项目七 删除数据《数据库原理与应用技术-MySQL》(河北科学技术出版社)一课一练(河北省)

2026-05-07
| 2份
| 9页
| 41人阅读
| 0人下载

内容正文:

编写说明:依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循"由浅入深、循序渐进"的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《数据库原理与应用技术-MySQL》(河北科学技术出版社)《一课一练》第60练,内容是删除数据。 《数据库原理与应用技术-MySQL》(河北科学技术出版社)《一课一练》 第60练 删除数据 一、单项选择题 1. 关于MySQL中DELETE语句的说法,下列选项中正确的是( )。 A. DELETE语句属于DDL,用于删除整个表的结构 B. 执行DELETE语句时,若省略WHERE子句,系统会报错并拒绝执行 C. DELETE语句可以删除表中的部分行,也可以一次删除所有行 D. DELETE语句执行后,被删除的数据可以通过ROLLBACK命令恢复到任意历史状态 【答案】C 【解析】 A错误:DELETE属于DML(数据操纵语言),用于删除表中的数据行。DROP TABLE属于DDL,用于删除表结构。 B错误:在MySQL中,不带WHERE子句的DELETE语句可以执行(除非开启了SQL_SAFE_UPDATES模式且无主键条件),它会删除表中的所有行,但不会报错——这是常见的危险操作。 C正确:DELETE通过WHERE子句指定删除条件可实现部分删除;省略WHERE则为全表删除,删除所有行但保留表结构。 D错误:DELETE操作在事务中(InnoDB)可以通过ROLLBACK撤销,但前提是事务未提交;一旦COMMIT,数据即永久删除。并且无法恢复到“任意历史状态”,只依据事务日志回滚。 2.有学生表student(id INT PRIMARY KEY, name VARCHAR(20), age INT, class_id INT),执行以下语句: DELETE FROM student WHERE age < 18; 若表中存在多行age < 18的记录,关于该语句执行结果的描述,正确的是( )。 A. 仅删除第一条满足条件的记录 B. 删除所有age < 18的记录,并自动重置AUTO_INCREMENT计数器 C. 删除所有age < 18的记录,但不会重置AUTO_INCREMENT计数器 D. 因为缺少ORDER BY语句,该语句会执行失败 【答案】C 【解析】 A错误:DELETE不带LIMIT会删除所有满足WHERE条件的行,而不是只删除一条。 B错误:DELETE不会重置AUTO_INCREMENT计数器。即使删除表中所有行,下次插入新记录时,自增值仍在上次最大自增值基础上继续增加。 C正确:DELETE按条件删除对应行,不重置自增计数器。 D错误:DELETE语句不需要ORDER BY子句即可正常执行。 3.下列关于TRUNCATE TABLE与DELETE FROM(无WHERE子句)的区别,说法错误的是( )。 A. TRUNCATE TABLE是DDL操作,而DELETE FROM是DML操作 B. TRUNCATE TABLE会重置AUTO_INCREMENT计数器,而DELETE FROM不会 C. TRUNCATE TABLE不支持WHERE条件,而DELETE FROM支持 D. TRUNCATE TABLE执行后无法通过事务回滚恢复数据,而DELETE FROM无论在任何情况下都可以回滚 【答案】D 【解析】 A正确:TRUNCATE属于DDL,隐式提交事务无法回滚;DELETE属于DML,可在事务中回滚。 B正确:TRUNCATE会重置自增计数器从1开始;DELETE不会重置。 C正确:TRUNCATE清空整表,不可加WHERE;DELETE可以加条件筛选。 D错误:如果DELETE在事务中执行且尚未提交,可以通过ROLLBACK恢复;但如果已经COMMIT,则也无法回滚。同时,DELETE在自动提交模式下默认每条语句提交,也不能回滚。 4.设有部门表dept(dept_id INT PRIMARY KEY, name VARCHAR(20))和员工表emp(emp_id INT PRIMARY KEY, name VARCHAR(20), dept_id INT, FOREIGN KEY (dept_id) REFERENCES dept(dept_id) ON DELETE RESTRICT)。现有以下操作: DELETE FROM dept WHERE dept_id = 101; 假设dept_id = 101的部门下存在多名员工。关于该语句的执行结果,正确的是( )。 A. 删除部门表dept中dept_id=101的行,同时自动级联删除该部门下所有员工 B. 删除部门表dept中dept_id=101的行,同时将该部门下所有员工的dept_id设置为NULL C. 执行失败,因为子表中有引用记录,违反了RESTRICT约束 D. 删除部门表dept中dept_id=101的行,同时将该部门下所有员工的dept_id设置为默认值0 【答案】C 【解析】 A错误:级联删除对应ON DELETE CASCADE,题干中是RESTRICT。 B错误:自动设NULL对应ON DELETE SET NULL。 C正确:ON DELETE RESTRICT(MySQL中默认行为)会阻止删除父表中被子表引用的行,以确保引用完整性,因此语句执行失败并报错。 D错误:设定默认值对应ON DELETE SET DEFAULT,且不是标准默认行为。 5.在MySQL中,执行下列语句序列(假设InnoDB存储引擎,自动提交关闭): START TRANSACTION; DELETE FROM orders WHERE order_id = 1001; 此时,另一会话执行以下查询: SELECT * FROM orders WHERE order_id = 1001; 关于第二个会话查询结果的描述,正确的是( )。 A. 返回order_id=1001的行数据 B. 无返回行 C. 第二个会话被阻塞,直到第一个事务提交或回滚 D. 返回错误ORA-00054:资源忙 【答案】A 【解析】 在InnoDB的默认隔离级别REPEATABLE READ下,普通SELECT语句是非阻塞的快照读,读取的是事务开始时的数据快照。 A正确:第一个事务中执行了DELETE但未提交,第二个会话的SELECT读取的是该行删除前的版本。 B错误:未提交的删除对其他事务不可见,因此第二个会话仍能看到该行。 C错误:普通SELECT不会因为行被加锁而阻塞。本题为普通SELECT,读快照,不会被阻塞。 D错误:ORA-00054是Oracle的错误号,不适用于MySQL。 6.某MySQL数据库中,表student含有大量数据,需要清空表中所有行,并且要求立即释放数据文件占用的磁盘空间。下列两种操作方式中,效果上符合要求且风险较低的是( )。 A. DELETE FROM student; 然后 OPTIMIZE TABLE student; B. TRUNCATE TABLE student; C. DROP TABLE student; 然后 CREATE TABLE student ...; D. 不需要任何操作,MySQL会自动释放空间 【答案】B 【解析】 A方式:DELETE全表不会立即释放磁盘空间,仅将行标记为删除,需再运行OPTIMIZE TABLE重建表才能释放空间,且大量删除会产生大量undo日志,速度慢、风险高。 B正确:TRUNCATE TABLE是DDL操作,直接释放表的数据页,将磁盘空间归还操作系统,且速度极快,日志开销小。 C方式:DROP+CREATE也可释放空间,但需要重新定义表结构,若字段、约束较多,操作复杂且易出错,不如TRUNCATE简洁。 D错误:MySQL不会自动释放DELETE后占用的空间;Truncate才立即释放。 7.有商品表product(pid, pname, price, cid),以及类别表category(cid, cname)。现要删除“所有销售类别为‘电子产品’的商品记录”。下列SQL语句中,能正确实现该功能的是( )。 A. DELETE FROM product WHERE cid = (SELECT cid FROM category WHERE cname = '电子产品'); B. DELETE FROM product WHERE cid IN (SELECT cid FROM category WHERE cname = '电子产品'); C. DELETE p FROM product p INNER JOIN category c ON p.cid = c.cid WHERE c.cname = '电子产品'; D. 以上选项都正确 【答案】D 【解析】 选项A:如果cname='电子产品'对应的cid唯一,使用=子查询可以正确删除;若cid可能不唯一,但通常类别名称应唯一,该写法可行。 选项B:使用IN更稳妥,即使返回多个cid也适用,能删除所有对应产品。 选项C:多表DELETE语法(使用JOIN),关联category表筛选后删除product表的记录,功能正确。 因为A、B、C在一般场景(cid唯一)下均可正确执行,且题干没有排除任意一种方式,所以D“以上选项都正确”是本题的最佳答案。 注意:实际使用中,若子查询返回多行,A会报错,B和C安全。但考虑到命题通常限定cname唯一,三者均可视为正确。 8.在MySQL中,执行以下语句时: DELETE FROM scores WHERE score_id = 5 ORDER BY score_id LIMIT 3; 关于该语句的说法,正确的是( )。 A. 语法错误,DELETE语句中不能使用ORDER BY和LIMIT B. 删除表中score_id = 5的所有记录 C. 删除表中满足score_id = 5的记录,并按照score_id排序后删除前3行 D. 因为score_id是主键或唯一索引,无重复值,LIMIT 3作用无意义,但语句仍合法 【答案】D 【解析】 A错误:MySQL的DELETE语句确实支持ORDER BY和LIMIT子句,用于控制删除顺序和限制删除行数。 B、C不准确:WHERE score_id = 5仅筛选出score_id=5的行,LIMIT 3不会出错但也没有额外效果。 D正确:该语句语法合法,即使LIMIT大于符合条件的行数,也是安全的。虽然逻辑上冗余,但MySQL不会报错。 9.下列哪种情况下,DELETE语句在MySQL中会因为“安全更新模式”而拒绝执行? A. 使用了ORDER BY子句但没有使用LIMIT B. WHERE条件中使用了索引列,但该列存在NULL值 C. 执行DELETE语句时,WHERE条件中未使用索引键且未指定LIMIT,同时开启了sql_safe_updates=1 D. 删除的数据行数超过1000行 【答案】C 【解析】 A错误:ORDER BY单独使用并不触发安全模式拦截;拦截条件是同时WHERE无索引列且无LIMIT。 B错误:索引列为NULL不影响安全模式判定。 C正确:当sql_safe_updates=1(安全模式)时,DELETE语句要求要么WHERE条件中使用索引列,要么带LIMIT,否则拒绝执行,以防止误删全表。 D错误:安全模式与删除行数无关。 10.关于多表DELETE语句在MySQL中的行为,下列说法正确的是( )。 A. 多表DELETE只能删除一张表中的数据,其他表仅用于条件筛选 B. 多表DELETE可以同时从多张表中删除符合JOIN条件的行 C. 多表DELETE执行时,所有参与的表都必须出现在FROM子句中 D. 多表DELETE必须使用JOIN,不能使用逗号隐式连接 【答案】B 【解析】 A错误:多表DELETE可以从多张表中同时删除数据,例如DELETE t1, t2 FROM t1 INNER JOIN t2 ...。 B正确:语法上支持单次删除多张表的关联数据。 C错误:并非所有参与的表都必须出现在FROM子句,至少需指定要删除的表在DELETE关键字后,关联表可放在USING或FROM中。例如标准语法DELETE FROM t1 USING t1 JOIN t2 ...。 D错误:多表DELETE可以使用逗号隐式连接(旧式语法),也可使用JOIN。例如DELETE t1 FROM t1, t2 WHERE t1.id=t2.id是合法的。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 编写说明:依托三阶支架资源编写方案,《一课一练》明确基础层具象化支架定位,作为课堂同步配套资源,其内容与课堂教学深度绑定,并且精准匹配中职学生知识基础与学习特质,遵循"由浅入深、循序渐进"的认知规律,聚焦基础性与实效性核心,通过拆解知识点、简化认知难度,切实降低学习门槛,为后续知识巩固与能力提升筑牢根基,是优质课后作业首选。 本卷是《数据库原理与应用技术-MySQL》(河北科学技术出版社)《一课一练》第60练,内容是删除数据。 《数据库原理与应用技术-MySQL》(河北科学技术出版社)《一课一练》 第60练 删除数据 一、单项选择题 1. 关于MySQL中DELETE语句的说法,下列选项中正确的是( )。 A. DELETE语句属于DDL,用于删除整个表的结构 B. 执行DELETE语句时,若省略WHERE子句,系统会报错并拒绝执行 C. DELETE语句可以删除表中的部分行,也可以一次删除所有行 D. DELETE语句执行后,被删除的数据可以通过ROLLBACK命令恢复到任意历史状态 2.有学生表student(id INT PRIMARY KEY, name VARCHAR(20), age INT, class_id INT),执行以下语句: DELETE FROM student WHERE age < 18; 若表中存在多行age < 18的记录,关于该语句执行结果的描述,正确的是( )。 A. 仅删除第一条满足条件的记录 B. 删除所有age < 18的记录,并自动重置AUTO_INCREMENT计数器 C. 删除所有age < 18的记录,但不会重置AUTO_INCREMENT计数器 D. 因为缺少ORDER BY语句,该语句会执行失败 3.下列关于TRUNCATE TABLE与DELETE FROM(无WHERE子句)的区别,说法错误的是( )。 A. TRUNCATE TABLE是DDL操作,而DELETE FROM是DML操作 B. TRUNCATE TABLE会重置AUTO_INCREMENT计数器,而DELETE FROM不会 C. TRUNCATE TABLE不支持WHERE条件,而DELETE FROM支持 D. TRUNCATE TABLE执行后无法通过事务回滚恢复数据,而DELETE FROM无论在任何情况下都可以回滚 4.设有部门表dept(dept_id INT PRIMARY KEY, name VARCHAR(20))和员工表emp(emp_id INT PRIMARY KEY, name VARCHAR(20), dept_id INT, FOREIGN KEY (dept_id) REFERENCES dept(dept_id) ON DELETE RESTRICT)。现有以下操作: DELETE FROM dept WHERE dept_id = 101; 假设dept_id = 101的部门下存在多名员工。关于该语句的执行结果,正确的是( )。 A. 删除部门表dept中dept_id=101的行,同时自动级联删除该部门下所有员工 B. 删除部门表dept中dept_id=101的行,同时将该部门下所有员工的dept_id设置为NULL C. 执行失败,因为子表中有引用记录,违反了RESTRICT约束 D. 删除部门表dept中dept_id=101的行,同时将该部门下所有员工的dept_id设置为默认值0 5.在MySQL中,执行下列语句序列(假设InnoDB存储引擎,自动提交关闭): START TRANSACTION; DELETE FROM orders WHERE order_id = 1001; 此时,另一会话执行以下查询: SELECT * FROM orders WHERE order_id = 1001; 关于第二个会话查询结果的描述,正确的是( )。 A. 返回order_id=1001的行数据 B. 无返回行 C. 第二个会话被阻塞,直到第一个事务提交或回滚 D. 返回错误ORA-00054:资源忙 6.某MySQL数据库中,表student含有大量数据,需要清空表中所有行,并且要求立即释放数据文件占用的磁盘空间。下列两种操作方式中,效果上符合要求且风险较低的是( )。 A. DELETE FROM student; 然后 OPTIMIZE TABLE student; B. TRUNCATE TABLE student; C. DROP TABLE student; 然后 CREATE TABLE student ...; D. 不需要任何操作,MySQL会自动释放空间 7.有商品表product(pid, pname, price, cid),以及类别表category(cid, cname)。现要删除“所有销售类别为‘电子产品’的商品记录”。下列SQL语句中,能正确实现该功能的是( )。 A. DELETE FROM product WHERE cid = (SELECT cid FROM category WHERE cname = '电子产品'); B. DELETE FROM product WHERE cid IN (SELECT cid FROM category WHERE cname = '电子产品'); C. DELETE p FROM product p INNER JOIN category c ON p.cid = c.cid WHERE c.cname = '电子产品'; D. 以上选项都正确 8.在MySQL中,执行以下语句时: DELETE FROM scores WHERE score_id = 5 ORDER BY score_id LIMIT 3; 关于该语句的说法,正确的是( )。 A. 语法错误,DELETE语句中不能使用ORDER BY和LIMIT B. 删除表中score_id = 5的所有记录 C. 删除表中满足score_id = 5的记录,并按照score_id排序后删除前3行 D. 因为score_id是主键或唯一索引,无重复值,LIMIT 3作用无意义,但语句仍合法 9.下列哪种情况下,DELETE语句在MySQL中会因为“安全更新模式”而拒绝执行? A. 使用了ORDER BY子句但没有使用LIMIT B. WHERE条件中使用了索引列,但该列存在NULL值 C. 执行DELETE语句时,WHERE条件中未使用索引键且未指定LIMIT,同时开启了sql_safe_updates=1 D. 删除的数据行数超过1000行 10.关于多表DELETE语句在MySQL中的行为,下列说法正确的是( )。 A. 多表DELETE只能删除一张表中的数据,其他表仅用于条件筛选 B. 多表DELETE可以同时从多张表中删除符合JOIN条件的行 C. 多表DELETE执行时,所有参与的表都必须出现在FROM子句中 D. 多表DELETE必须使用JOIN,不能使用逗号隐式连接 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第60练 项目七 删除数据《数据库原理与应用技术-MySQL》(河北科学技术出版社)一课一练(河北省)
1
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。