一、单选题 (题数:40,共 20.0 分)
1
【单选题】如果要回滚一个事务,则要使用( )语句。
A、
revoke
B、
rollback
C、
begin
D、
commit
正确答案: B 我的答案:D
答案解析:
2【单选题】假定有一张表用户表users,其中一身份证字段ID_car
D)为了维护数据的完整性,在设计数据库时,最好对ID_card字段添加约束,请问应该添加什么约束______
A、
check
B、
primary key
C、
default
D、
not null
正确答案: B 我的答案:B
答案解析:
3
【单选题】下列关于读锁和写锁的区别描述正确的是( )。
A、
-个读锁和一个写锁是不兼容的
B、
以上都正确
C、
两个写锁也是不兼容的
D、
两个读锁是兼容的
正确答案: B 我的答案:A
答案解析:
4【单选题】若要在基本表S中增加一列CN(课程名),可用( )
A、
ALTER TABLE S ADD(CN CHAR(8))
B、
ADD TABLE S(CN CHAR(8))
C、
ADD TABLE S ALTER(CN CHAR(8))
D、
ALTER TABLE S (ADD CN CHAR(8))
正确答案: A 我的答案:C
5【单选题】SELECT CONCAT("I","love","mysql")的结果是()。
A、
Ilovemysql
B、
love
C、
mysql
D、
I love mysql
正确答案: A 我的答案:A
6【单选题】下列说法错误的是______。
A、
SQL 程序用于触发器和存储过程中
B、
SELECT可以运算字符表达式
C、
游标只能顺序移动
D、
SELECT中的输出列可以是由字段组成的表达式
正确答案: A 我的答案:B
答案解析:
7【单选题】使用哪个命令可以从表的行中删除所有数据而不删除表自身?
A、
ALTER TABLE
B、
DELETE FROM
C、
MODIFY
D、
DROP TABLE
正确答案: B 我的答案:B
答案解析:
8【单选题】select * from student 该代码中的 * 号,表示的正确含义是:
A、
模糊查询
B、
错误信息
C、
普通的字符*号
D、
所有的字段名
正确答案: D 我的答案:D
答案解析:
9
【单选题】关于存储过程的说法,错误的是( )。
A、
存储过程提高了执行效率
B、
它可作为一个独立的数据库对象并作为一个单元供用户在应用程序中调用
C、
存储过程方便用户批量执行SQL命令
D、
存储过程必须带参数,要么是输入参数,要么是输出参数
正确答案: D 我的答案:D
答案解析:
10【单选题】建表语句中的 not null,该代码表示的含义是:
A、
允许空格
B、
非空约束
C、
不允许写入数据
D、
不允许读取数据
正确答案: B 我的答案:B
11
【单选题】在数据库设计中使用E-R图工具的阶段是( )。
A、
概念结构设计阶段
B、
需求分析阶段
C、
数据库物理设计阶段
D、
数据库实施阶段
正确答案: A 我的答案:A
答案解析:
12
【单选题】SELECT ROUND(45.953, -1) 的显示结果为( )。
A、
50
B、
45.93
C、
46
D、
45.9
正确答案: A 我的答案:A
答案解析:
13在Mysql的命令行中调用存储过程sp和函数fn的方法分别是( )。
A、
SELECT sp(),CALL fn();
B、
CALL sp(),CALL fn();
C、
SELECT sp(),SELECT fn();
D、
CALL sp(),SELECT fn();
正确答案: D 我的答案:D
14【单选题】下列哪些语句对主键的说明正确______
A、
主键可重复
B、
主键不唯一
C、
主键用foreign key修饰
D、
在数据表中的唯一索引
正确答案: D 我的答案:D
答案解析:
15
【单选题】以下聚合函数求平均数的是( )。
A、
COUNT
B、
SUM
C、
MAX
D、
AVG
正确答案: D 我的答案:D
答案解析:
16【单选题】SQL是一种______语言。
A、
高级算法
B、
函数型
C、
关系数据库
D、
人工智能
正确答案: C 我的答案:C
答案解析:
17【单选题】创建视图的命令是( )
A、
alter view
B、
create view
C、
create table
D、
alter table
正确答案: B 我的答案:B
18
【单选题】关于DATETIME与TIMESTAMP两种数据类型的描述,错误的是( )。
A、
TIMESTAMP可以自动记录当前日期时间
B、
两者值的范围不一样
C、
两者值的范围一样
D、
两者占用空间不一样
正确答案: C 我的答案:C
答案解析:
19【单选题】下列关于表和视图的说法正确的是______
A、
视图是表的一个镜像备份
B、
视图的数据全部在表中
C、
每个视图对应一个表
D、
对所有视图也可象表一样执行UPDATE操作
正确答案: B 我的答案:B
答案解析:
20【单选题】下面哪一个语句可以使用子查询( )
A、
UPDATE语句
B、
DELETE语句
C、
以上都是
D、
SELECT 语句
正确答案: C 我的答案:C
答案解析:
21
【单选题】数据库设计中的概念结构设计的主要工具是( )。
A、
数据模型
B、
概念模型
C、
E-R模型
D、
新奥尔良模型
正确答案: C 我的答案:C
答案解析:
22
【单选题】为数据表创建索引的目的是( )。
A、
创建唯一索引
B、
归类
C、
提高查询的检索性能
D、
创建主键
正确答案: C 我的答案:C
答案解析:
23
【单选题】使用( )语句可以删除触发器trig_Test。
A、
DROP trig_Test;
B、
DROP TRIGGER trig_Test;
C、
DROP * FROM trig_Test;
D、
DROP TRIGGER WHERE NAME=‘trig_Test’;
正确答案: B 我的答案:B
答案解析:
24【单选题】在MySQL中,下面用于限制分组函数的返回值的子句是______。
A、
ORDER BY
B、
无法限定分组函数的返回值
C、
HAVING
D、
WHERE
正确答案: C 我的答案:C
答案解析:
25【单选题】触发器不是响应以下哪一语句而自动执行的Mysql语句______
A、
delete
B、
update
C、
select
D、
insert
正确答案: C 我的答案:C
答案解析:
26
【单选题】如果对于实体集A中的每一个实体,实体集B中有可有多个个实体与之联系;反之,对于实体集B中的每一个实体,实体集A中也可有多个实体与之联系。则称实体集A与B具有( )。
A、
1:1联系
B、
N:M联系
C、
多种联系
D、
1:N联系
正确答案: B 我的答案:B
答案解析:
27【单选题】CREATE,DROP,ALTER等命令属于下列哪类命令______
A、
DML
B、
DCL
C、
DDL
D、
DQL
正确答案: C 我的答案:C
答案解析:
28
【单选题】返回字符串长度的函数是( )。
A、
length()
B、
long()
C、
left()
D、
len()
正确答案: A 我的答案:A
答案解析:
29
【单选题】下列关于局部变量和用户变量的描述中,错误的是 ( )。
A、
局部变量使用 DECLARE语句定义
B、
用户变量以 "@"开头,局部变量没有这个符号
C、
局部变量只在 BEGIN...END 语句块之间有效
D、
在存储函数中只能使用局部变量
正确答案: D 我的答案:A
答案解析:
30【单选题】delete from employee语句的作用是( )
A、
删除当前数据库中整个employee表,包括表结构
B、
删除当前数据库中employee表内的所有行
C、
删除当前数据库中employee表内的当前行
D、
由于没有where子句,因此不删除任何数据
正确答案: B 我的答案:B
31【单选题】为数据表创建索引的目的是______
A、
提高查询的检索性能
B、
归类
C、
创建唯一索引
D、
创建主键
正确答案: A 我的答案:A
答案解析:
32【单选题】按照姓名升序序排列______
A、
ORDER BY DESC NAME
B、
ORDER BY NAME DESC
C、
ORDER BY ?ASC NAME
D、
ORDER BY NAME ASC
正确答案: D 我的答案:D
答案解析:
33
【单选题】MySQL数据库四种特性,不包括( )。
A、
原子性
B、
隔离性
C、
一致性
D、
事务性
正确答案: D 我的答案:D
答案解析:
34【单选题】删除emp表中所有数据,且可以rollback,以下语句哪个命令可以实现( )
A、
truncate table emp
B、
delete from emp
C、
drop table emp
D、
delete * from emp
正确答案: B 我的答案:B
35
【单选题】如果要回滚一个事务,则要使用( )语句。
A、
commit
B、
revoke
C、
begin
D、
rollback
正确答案: D 我的答案:A
答案解析:
36【单选题】查询出EMP表中1982年及以后入职的员工信息(注:字段hiredate为入职日期,数据类型为DATE型)
A、
select * from emp where to_char(hiredate,'YYYYMMDD')>='19820101';
B、
select * from emp where hiredate>='19820101';
C、
select * from emp where to_date(hiredate,'YYYYMMDD')>='19820101';
D、
select * from emp where hiredate>=to_char('19820101','YYYYMMDD');
正确答案: B 我的答案:A
答案解析:
37【单选题】存储过程是一组预先定义并______的Transact-SQL语句
A、
编译
B、
保存
C、
编写
D、
解释
正确答案: A 我的答案:A
答案解析:
38【单选题】向数据表中插入一条记录用以下哪一项______
A、
INSERT
B、
SAVE
C、
CREATE
D、
UPDATE
正确答案: A 我的答案:A
答案解析:
39【单选题】一张表的主键个数为______
A、
至多1个
B、
没有限制
C、
至多3个
D、
至多2个
正确答案: A 我的答案:A
答案解析:
40【单选题】进入要操作的数据库TEST用以下哪一项______
A、
USE TEST
B、
SHOW TEST
C、
IN TEST
D、
USER TEST
正确答案: A 我的答案:A
答案解析:
二、填空题 (题数:10,共 10.0 分)
41
[填空题]在 MySQL 中,创建视图需要使用create ( )语句。
正确答案
第一空:
view;
我的答案:
第一空:
view
答案解析:
42
[填空题]MySQL 中提供了( )关键字,该关键字可以判断两个字符串是否相匹配,通常用它来实现模糊查询。
正确答案
第一空:
like;
我的答案:
第一空:
like
答案解析:
43
[填空题]在 MySQL 中,除了使用 CREATE OR REPLACE VIEW 语句修改视图外,还可以使用( )语句来修改视图。
正确答案
第一空:
alter;
我的答案:
第一空:
ALTER VIEW
答案解析:
44
[填空题]数据表中的字段默认值是通过( )关键字定义的。
正确答案:
default;DEFAULT
45
[填空题]在 MySQL 的整数类型中,占用字节数最大的类型是( )。
正确答案:
bigint;
46
[填空题]MySQL 是一种( )(多用户、单用户)的数据库管理系统。
正确答案:多用户;
47
[填空题]在存储过程中,用于定义变量的关键字是( )。
正确答案:
declare;
48
[填空题]MySQL 中用于实现事务提交的语句是( )语句。
正确答案: commit;
答案解析:
49
[填空题]MySQL 中的用户分为( )用户和普通用户。
正确答案:
root
50
[填空题]在 MySQL 中,除了使用 CREATE OR REPLACE VIEW 语句修改视图外,还可以使用( )语句来修改视图。
正确答案:
alter;
三、简答题 (题数:1,共 40.0 分)
51
已知某图书管理数据库有如下表格:
用户表user、部门表dept、角色表role、图书表book、图书分类表book_classify、图书借阅表book_borrow、还书表book_return、借阅预约表book_appoint、图书遗失表book_lose;
(1)用户表:包含用户编号id、姓名user_name、出生日期birth_date、身份证号id_card
、帐号login_name、密码password、手机号mobile、电子邮件email、部门编号dept_id、角色编号role_id信息。
(2)部门表:包含部门编号id、部门名称dept_name、部门创建时间create_date信息。
(3)角色表:包含角色编号id、角色名称role_name、备注信息remark。
(4)图书表:包含图书编号id、书籍名称book_name、作者author、定价price、有无光盘cd、出版社publish、图书分类编号book_classify_id、总数量account、图书ISBN编号isbn、图书创建时间create_time、备注信息remark。
(5)图书分类表:包含编号id、图书分类名称book_classify_name、父分类编号father_id、创建时间create_time。
(6)图书借阅表:包含编号id、图书编号book_id、用户编号user_id、借阅时间borrow_time、归还时间return_time、创建图书借阅状态create_time、备注信息remark。
(7)图书还书表:包含编号id、图书借阅编号borrow_id、归还时间return_time、创建时间create_time、备注信息remark。
(8)借阅预约表:包含预约流水编号id、图书编号book_id、用户编号user_id、预约时间appoint_time、创建时间create_time、备注信息remark。
(9)图书遗失表:包含遗失流水编号id、图书借阅流水编号borrow_id、创建时间create_time、备注信息remark。
对于图书管理数据库,请写出正确的SQL语句:
1)查询作者为“刘刚”的图书的数量。
2)查询出版单位为人民邮电出版社的图书明细。
3)检索2024年3月的借阅图书的读者人数。
4)图书管理系统里需要新增一本刚采购的医药方面的书籍:书名为《疑难杂病临证手册(第2版)》、作者为余孟学、定价为158元、出版社为河南科技出版社、ISBN编号为9787534989230。要把它添加到图书表book里,图书分类选择“R 医药、卫生”。
5)查询用户小影的借书记录,包括用户姓名、借阅图书名称、出版社、借书时间、归还时间。
6)针对用户表user、图书表book、图书借阅表book_borrow建立一个用户借阅图书信息查询视图user_book_borrow_view,查询用户编号、登录名称、姓名、图书名称、出版社、借阅时间、归还时间。
7)按book_name字段建立图书索引。索引名为:booknameindex;
8)按publish,book_name字段建立图书表复合索引。索引名为:bookpublishnameindex ;
9)更新小刚用户的部门为运维部。
10)删除图书名称包含:“经济学”的所有图书
11)删除用户小影的全部借书记录。
12)查询所有用户丢失的图书名称。
下面链接中放的是该题的数据库、基本表和初始数据,同学们自己下载。
正确答案:
1)查询作者为“刘刚”的图书的数量。
SELECT COUNT(*) AS 数量 FROM `book` WHERE `author`='刘刚'
2)查询出版单位为人民邮电出版社的图书明细。
SELECT `id`,`book_name`,`author`,`price`,`cd`,`publish`,`book_classify_id`,`account`,`isbn`,`create_time`,`remark` FROM `book` WHERE `publish`='人民邮电出版社';
3)检索2024年3月的借阅图书的读者人数。
SELECT COUNT( DISTINCT `user_id`) FROM `book_borrow`
WHERE YEAR(`borrow_time`)='2024' AND MONTH(`borrow_time`)='3';
4)图书管理系统里需要新增一本刚采购的医药方面的书籍:书名为《疑难杂病临证手册(第2版)》、作者为余孟学、定价为158元、出版社为河南科技出版社、ISBN编号为9787534989230。要把它添加到图书表book里,图书分类选择“R 医药、卫生”。
INSERT INTO`book`VALUES('5','疑难杂病临证手册(第2版)','余孟学','158','1','河南科技出版社','4','1000','9787534989230',NOW(),NULL);
5)查询用户小影的借书记录,包括用户姓名、借阅图书名称、出版社、借书时间、归还时间。
SELECT u.user_name,b.book_name,b.publish,w.borrow_time,w.return_time FROM USER u, book b, book_borrow w WHERE w.book_id = b.id AND w.user_id = u.id AND u.login_name = '小影';
6)针对用户表user、图书表book、图书借阅表book_borrow建立一个用户借阅图书信息查询视图user_book_borrow_view,查询用户编号、登录名称、姓名、图书名称、出版社、借阅时间、归还时间。
CREATE OR REPLACE VIEW user_book_borrow_view
AS
SELECT u.id,u.login_name,u.user_name,b.book_name,b.publish,w.borrow_time,w.return_time
FROM USER u, book b, book_borrow w
WHERE w.book_id = b.id AND w.user_id = u.id ;
7)按book_name字段建立图书索引。索引名为:booknameindex;
CREATE INDEX booknameindex ON `book`(`book_name`)
8)按publish,book_name字段建立图书表复合索引。索引名为:bookpublishnameindex ;
CREATE INDEX bookpublishnameindex ON `book`(`publish`,`book_name`)
9)更新小刚用户的部门为运维部。
UPDATE `user` SET `dept_id`=(SELECT `id` FROM `dept` WHERE `dept_name`='运维部')
WHERE `user_name`='小刚'
10)删除图书名称包含:“经济学”的所有图书
delete from `book` where `book_name` like '%经济学%'
11)删除用户小影的全部借书记录。
DELETE FROM `book_borrow` WHERE`user_id`=(SELECT `id` FROM `user` WHERE `user_name`='小影')
12)查询所有用户丢失的图书名称。
SELECT `user_name`,`book_name` FROM `book`,`book_borrow`,`user`,`book_lose`
WHERE `book_lose`.`borrow_id`=`book_borrow`.`id` AND `book_borrow`.`user_id`=`user`.id AND `book_borrow`.`book_id`=`book`.`id`
四、操作题 (题数:1,共 30.0 分)
52
按照要求实现员工管理数据库系统中的指定操作:
1、创建一个数据库 staff,并在数据库中创建以下四张表:
员工表 employee(员工编号id,姓名userName,出生日期birthDate,身份证号idCard,登录名称loginName,登录密码password,手机号mobile,电子邮件email,部门编号deptId,员工级别level,员工头像avatar,备注remark)
部门表 dept(部门编号id,部门名称deptName,部门经理编号managerId)
工资表payroll(工资编号id,员工编号empId,基本工资baseSalary,应发工资actualSalary,奖金bonus,缺勤扣钱deductMoney,薪资发放日期grantDate)
请假表ask_leave(请假编号id,员工编号empId,请假原因leaveReason,请假开始时间beginDate,请假结束时间endDate,提交时间submitDate,审核人编号auditId(该列有触发器维护),申请状态status,审核意见auditOpinion)
基础数据自己填写。
2、编写存储过程实现插入员工表:参数为:员工编号id,姓名userName,出生日期birthDate,身份证号idCard,登录名称loginName,登录密码password,手机号mobile,电子邮件email,部门编号deptId,员工级别level,员工头像avatar,备注remark。
存储过程名称为:insert_employee。
3、利用存储过程在员工表中插入5条记录。
4、创建触发器,当插入或修改工资表payroll时,应发工资自动为“基本工资+奖金-缺勤扣钱”。
5、在员工表中依据姓名userName建立索引。索引名为:index_userName。
6、建立员工部门工资视图(包含员工名称,部门名称,基本工资,应发工资,奖金,缺勤扣钱)视图名称:v_employee_dept_payroll。
7、利用触发器实现插入请假信息时,审核人编号自动填入请假人所在部门的部门经理编号。触发器名称为:insert_ask_leave。
8、备份数据库的结构和数据,导出SQL文件名为:staff_sjk.sql。
9、将staff_sjk.sql上传至服务器。
(30.0分)
正确答案
CREATE DATABASE staff;
USE staff
CREATE TABLE employee(
id INT NOT NULL AUTO_INCREMENT,
userName VARCHAR(255),
birthDate DATE,
idCard VARCHAR(255),
loginName VARCHAR(255),
PASSWORD VARCHAR(255),
mobile VARCHAR(255),
email VARCHAR(255),
deptId INT,
LEVEL INT,
avatar BLOB,
remark TEXT,
PRIMARY KEY(id)
);
CREATE TABLE dept(
id INT NOT NULL AUTO_INCREMENT,
deptName VARCHAR(255),
manageId INT,
remark VARCHAR(255),
PRIMARY KEY(id)
);
CREATE TABLE payroll(
id INT NOT NULL AUTO_INCREMENT,
empId INT,
baseSalary DOUBLE,
actualSalary DOUBLE,
bonus DOUBLE,
deductMoney DOUBLE,
grantDate DATE,
PRIMARY KEY(id)
);
CREATE TABLE ask_leave(
id INT NOT NULL AUTO_INCREMENT,
empId INT,
leaveReason TEXT,
beginDate DATE,
endDate DATE,
submitDate DATE,
auditId INT,
STATUS INT,
auditOpinion TEXT,
PRIMARY KEY(id)
);
其他答案略
我的答案
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_employee`(
IN `id` int,
IN `username` varchar(225),
IN `birthDate` date,
IN `idCard` varchar(225),
IN `loginName` varchar(225),
IN `password` varchar(225),
IN `mobile` varchar(225),
IN `email` varchar(225),
IN `deptId` int,
IN `level` int,
IN `avatar` blob,
IN `remark` text
)
BEGIN
DECLARE cnt INT;
SELECT COUNT(*) INTO cnt FROM employee WHERE employee.id = id;
IF cnt = 0 THEN
INSERT INTO employee(`id`,`username`,`birthDate`,`idCard`,`loginName`,`password`,`mobile`,`email`,`deptId`,`level`,`avatar`,`remark` )
VALUES(`id`,`username`,`birthDate`,`idCard`,`loginName`,`password`,`mobile`,`email`,`deptId`,`level`,`avatar`,`remark`);
END IF;
END
call insert_employee(1,'小红','2002-03-14','411423200203141510','xiaohong','123','15238790678','1625376859@qq.com',3,1,NULL,'新员工');
call insert_employee(2,'小橙','2002-02-14','411423200203241511','xiaocheng','123','15238790677','1625376858@qq.com',2,2,NULL,'新员工');
call insert_employee(3,'小黄','2002-01-14','411423200203341512','xiaohuang','123','15238790676','1625376857@qq.com',1,4,NULL,'老员工');
call insert_employee(4,'小绿','2001-12-14','411423200112141513','xiaolv','123','15238790675','1625376856@qq.com',2,5,NULL,'老员工');
call insert_employee(5,'小青','2001-11-14','411423200111141514','xiaoqing','123','15238790674','1625376855@qq.com',3,6,NULL,'老员工');
CREATE DEFINER = `root`@`localhost` TRIGGER `update_payroll` BEFORE UPDATE ON `payroll` FOR EACH ROW SET new.actualSalary = new.baseSalary + new.bonus - new.deductMoney;
CREATE INDEX index_userName ON employee(username);
CREATE VIEW v_employee_dept_payroll AS
SELECT username AS 姓名,deptName AS 部门名称,baseSalary AS 基本工资,actualSalary AS 应发工资,bonus AS 奖金,deductMoney AS 缺勤扣钱
FROM employee,dept,payroll
WHERE employee.id = payroll.empId AND employee.deptId = dept.id;
CREATE DEFINER = `root`@`localhost` TRIGGER `insert_ask_leave` BEFORE INSERT ON `ask_leave` FOR EACH ROW SET new.auditId = (SELECT manageId FROM employee,dept WHERE employee.deptid = dept.id AND new.empid = employee.id);
数据库
AI必读
发布于2024-05-10著作权归作者所有