【题目】MySQL选择题

来源:MySQL专项练习选择题


1.有一个User用户表,要删除整张表(指完全删除表数据和结构),下面正确的MySQL语句是:

A.DELETE TABLE User;

B.DROP TABLE User;

C.TRUNCATE TABLE User;

D.DELETE FROM User ;

解析:选B。A选项错在DELETE后面应该是接FROM+表格名,而不是TABLE...;

           B选项是完全删除表数据和表结构。

           C和D选项仅可以删除表里的数据,但是无法删除表结构。

2.下列操作在视图上无法完成的是?

A.视图数据查询

B.更新视图数据

C.在视图中定义新的基本表

D.在视图中定义新视图

解析:选C。在视图中也可以定义新的视图,却无法创建表,因为视图是个虚表,视图在数据库中没有原本的物理存储,只是相当于临时表。

3.下面哪些字符最可能会导致sql注入?

A.'(单引号)

B./

C."(双引号)

D.$

解析:选A。单引号作为MySQL中的字段值封装方式,最容易被用作注入攻击。SQL注入的关键是单引号的闭合,双引号里不能再放双引号,但单引号里可以放双引号。

4.学生、书店和图书三个实体集之间的联系属于()

A.二元联系

B.多元联系

C.自反联系

D.一对一联系

解析:选B。参与联系的实体集个数大于2个时,为多元联系;A选项,二元联系指只有两个实体集参与的联系;C选项,自反联系描述了同一实体集内两部分实体之间的联系,是一种特殊的二元联系;D选项,是二元联系下的一种细分。

5.假设有一份绝密文件存于某台机器的secretData数据库中的某个表里面,现在出于数据安全的考虑,对于新创建的用户都只能拥有该机器的登录权限,而不能拥有数据库的其他权限,那么新创建tqhf用户满足这一要求的语句是()

A.grant usage on *.* with 'tqhf'@'%';

B.grant usage on secretData.* to 'tqhf'@'%';

C.grant usage on secretData.* with 'tqhf'@'%';

D.grant usage on *.* to 'tqhf'@'%';

解析:选D。数据库赋予登录权限的语句是grant usage on ... to。因此答案A、C都不正确。题目中只说secretData数据库中的某个表有绝密文件,但是对新创建的用户可拥有登录权限,而没有其他权限。并没有说只对secretData数据库,因此题目引入该数据库只是一个干扰信息,所以答案B错误。

6.在STUDENT表中按class_type统计数据行数分组情况后,筛选出数据行数为大于10行的组

A.SELECT class_type,COUNT(*) FROM STUDENT GROUP BY class_type HAVING COUNT(*)>10

B.SELECT class_type,COUNT(*) FROM STUDENT GROUP BY class_type WHERE COUNT(*)=10

C.SELECT class_type,COUNT(*) FROM STUDENT HAVING COUNT(*)>10 GROUP BY class_type

D.SELECT class_type,COUNT(*) FROM STUDENT WHERE COUNT(*) >10 GROUP BY class_type

解析:选A。由题意得,若要筛选出数据行数大于10的,第一时间肯定会想到WHERE子句,但是由于使用GROUP BY后COUNT应该写在HAVING后,因此选A,BCD均属于用法错误,故排除。WHERE不能接聚合函数(MAX、MIN、COUNT、SUM、AVG等)。HAVING后可以接聚合函数。WHERE用在GROUP BY前,先过滤后分组;HAVING用在GROUP BY之后,先分组后过滤。且使用HAVING一定要用到GRUOP BY,但用到GROUP BY不一定有HAVING。顺序:FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY

7.决定不再使用一张备份数据表waterinfo001表,需永久删除。选出符合要求的语句。

A.DELETE TABLE waterinfo001

B.DELETE FROM TABLE waterinfo001

C.DROP TABLE waterinfo001

D.DROP FROM TABLE waterinfo001

解析:选C。

1. drop是完全删除表,包括表结构

2. delete是删除表数据,保留表的结构,而且可以加where,只删除一行或者多行

3. truncate 只能删除表数据,会保留表结构,而且不能加where

8.在创建完一张数据表后,发现少创建了一列,此时需要修改表结构,应该用哪个语句进行操作?

A.MODIFY TABLE

B.INSERT TABLE

C.ALTER TABLE

D.UPDATE TABLE

解析:选C。由题意得,通过ALTER TABLE进行表结构修改;INSERT是插入语句;MODIFY只是ALTER功能下的一个功能模块,只能修改字段属性;UPDATE是更新语句故不符合题意

9.现在有一个学生表student,需要回收所有机器的tqhf用户对学生表student所在数据库user的update和insert权限,则下列语句中能够实现这一功能的语句是()

A.revoke update,insert on user.* to 'tqhf'@'%';

B.revoke update,insert on *.* to 'tqhf'@'%';

C.revoke update,insert on user.* from 'tqhf'@'%';

D.revoke update,insert on *.* from 'tqhf'@'%';

解析:选C。回收表的操作功能语句revoke ... on ... from。因此答案A、B不正确。由于题目要求是回收所有机器的tqhf用户对user表的update和insert权限,而答案D是回收所有数据库的update和insert权限,因此答案D不正确。@'%' 是表示任何主机的通配符,@:划分用户名和主机,%:代表"任何"。

10.在MySql中进行数据查询时,如果要对查询结果的列名重新命名,将sno列重新命名为学号,则下列语句正确的是( )

A.select sno as 学号 from T

B.select 学号= sno from T

C.select sno 学号 from T

### 关于 MySQL选择题及其答案解析 以下是几道典型的 MySQL 选择题及相关解析: #### 题目一 **问题**: 下哪个函数返回当前日期和时间? A. NOW() B. CURRENT_DATE() C. CURDATE() D. DATE_FORMAT() **答案**: A **解析**: `NOW()` 函数返回当前的日期和时间,而 `CURRENT_DATE()` 只返回当前日期[^1]。 --- #### 题目二 **问题**: 哪种操作符用于模糊匹配字符串? A. IN B. BETWEEN C. LIKE D. REGEXP **答案**: C **解析**: `LIKE` 是用来进行模式匹配的操作符,其中 `%` 表示零个或多个字符,`_` 表示单个字符。虽然 `REGEXP` 也可以实现复杂模式匹配,但它并不属于标准 SQL 中的模糊匹配范畴[^2]。 --- #### 题目三 **问题**: 下面哪种数据类型适合存储大文本文件的内容? A. INT B. VARCHAR(255) C. TEXT D. BLOB **答案**: C **解析**: `TEXT` 数据类型专门设计用于存储较大的文本内容,而 `BLOB` 则更适合存储二进制数据。尽管两者都有不同的变体(如 `TINYTEXT`, `MEDIUMTEXT`, `LONGTEXT`),但它们的主要区别在于是否区分大小写以及适用场景的不同[^2]。 --- #### 题目四 **问题**: 在 MySQL 权限管理中,哪张表记录了用户的全局权限? A. db B. columns_priv C. user D. table_priv **答案**: C **解析**: `user` 表负责存储用户的全局权限信息,这是 MySQL 安全体系中的核心部分之一。其他表格则专注于更细粒度级别的权限设置,比如特定数据库 (`db`) 或者字段级权限 (`columns_priv`)[^3]。 --- #### 领域扩展——子查询优化 (附加思考) 考虑下面这个例子:假设我们需要找到所有薪资超过其所在部门平均薪资水平的员工名单。可以通过两种方式实现此目标—一种是利用嵌套子查询;另一种则是采用联接技术替代之。后者往往能够带来更高的执行效率因为减少了重复扫描次数[^4]。 ```sql -- 子查询版本 SELECT e.name, e.salary, d.department_name FROM employees AS e JOIN departments AS d ON e.dept_id = d.id WHERE e.salary > ( SELECT AVG(salary) FROM employees WHERE dept_id = e.dept_id); -- 转化为JOIN后的版本 WITH avg_salaries_per_dept AS( SELECT dept_id,AVG(salary) as avg_salary FROM employees GROUP BY dept_id ) SELECT e.name,e.salary,d.department_name,a.avg_salary FROM employees e INNER JOIN avg_salaries_per_dept a USING(dept_id),departments d; ``` 以上展示了如何通过重构SQL语句结构从而提升性能表现的一个实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天启和风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值