- 选择题
- 在MySQL中,通常使用( D )语句来指定一个已有数据库作为当前工作数据库。
- USING
- USED
- USES
- USE
- 下列( B )类型不是MySQL中常用的的数据类型。
- INT
- VAR
- TIME
- CHAR
- delete from student where s_id > 5 的代码 如果取消 where s_id > 5 ,执行 delete from student 语句后的结果意味着什么?( B )
- 删除表student
- 删除表student的所有记录
- 删除数据库student
- 语句不完整,不能执行
- 修改操作的语句 update student set s_name =N’王军’ 该代码执行后的结果是( C )
- 只把姓名叫王军的记录进行更新
- 只把字段名s_name 改成 N’王军’
- 表中的所有人姓名都更新为王军
- 更新语句不完整,不能执行
- 请把下划处的代码补充完整( C ):______ into student (s_name) ______(N’王大军’)
- update, values
- insert, value
- insert, values
- delete, like
- 数据库系统的核心是( B )。
- 数据模型
- 数据库管理系统
- 数据库
- 数据库管理员
- 以下的标识符中 符合标识符命名规则的有几个?( C )
3abc7, abc73, bc73a, c73ab,*73abc
- 1 个
- 2 个
- 3 个
- 4 个
- 标识符的第一个字符允许包括哪些符号?( D )
- _ 或者 @ 或者 # 或者 $
- _ 或者 * 或者 # 或者 $
- _ 或者 @ 或者 ^ 或者 $
- _ 或者 @ 或者 #
- create database MyDB; 该代码的功能是( B )
- 创建表 MyDB
- 创建数据库 MyDB
- 修改数据库 MyDB
- 删除数据库 MyDB
- 关系表达式运算的结果是( C )。
- 数值型
- 字符型
- 逻辑型
- 日期型
- 下面错误的说法是( B )
- 关键字只能由单个的属性组成
- 在一个关系中,关键字的值不能为空
- 一个关系中的所有候选关键字均可以被指定为主关键字
- 关键字是关系中能够用来惟一标识元组的属性
- 有订单表orders,包含用户信息userid、产品信息 productid两列, 以下语句能够返回至少被订购过两回的productid的语句是( D )
- SELECT productid FROM orders WHERE count(productid)>1
- SELECT productid FROM orders WHERE max(productid)>1
- SELECT productid FROM orders WHERE having count(productid)>1 GROUP BY productid
- SELECT productid FROM orders GROUP BY productid HAVING count(productid)>1
- 数据库(DB)、数据库系统(DBS)和数据库管理系统(DBMS)三者之间的关系是( B )
- DB包括DBMS和DBS
- DBS包括DB和DBMS
- DBMS包括DB和DBS
- 不能相互包括
- 索引可以显著提高哪一操作的效率( D )
- INSERT
- UPDATE
- DELETE
- SELECT
- E-R(实体-关系)图是数据库设计的工具之一,它一般适用于建立数据库的( A )。
- 概念模型
- 结构模型
- 物理模型
- 逻辑模型
- 储蓄所有多个储户,储户在多个储蓄所存取款,储蓄所与储户之间是( D )。
- 一对一的联系
- 一对多的联系
- 多对一的联系
- 多对多的联系
- 视图是一个“虚表”,视图的构造基于( A )
- 基本表
- 视图
- 基本表或视图
- 数据字典
- DB、DBMS和DBS三者之间的关系是( B )
- DB包括DBMS和DBS
- DBS包括DB和DBMS
- DBMS包括DB和DBS
- 不能相互包括
- 设有关系模式EMP(职工号,姓名,年龄,技能)。假设职工号唯一,每个职工有多项技能,则EMP表的主键是( A )
- 职工号
- 姓名,技能
- 技能
- 职工号,技能
- 在SQL语句中,与表达式"仓库号 NOT IN("wh","wh2")"功能相同的表达式是( D )
- 仓库号="wh" AND 仓库号="wh2"
- 仓库号!="wh" OR 仓库号!= "wh2"
- 仓库号="wh" OR 仓库号="wh2"
- 仓库号!="wh" AND 仓库号!="wh2"
- 在数据库设计中,将E-R图转换成关系数据模型的过程属于( B )
- 需求分析阶段
- 逻辑设计阶段
- 概念设计阶段
- 物理设计阶段
- MySQL中唯一索引的关键字是( C )
- FULLTEXT INDEX
- ONLY INDEX
- UNIQUE INDEX
- INDEX
- 只修改列的数据类型指令是( B )
- ALTER TABLE … … ALTER COLUMN
- ALTER TABLE … MODIFY COLUMN…
- ALTER TABLE … UPDATE …
- ALTER TABLE … UPDATE COLUMN…
- 执行 delete from student 语句后的结果是( B )
- 删除表student
- 删除表student的所有记录
- 删除数据库student
- 语句不完整,不能执行
- 以下聚合函数,用于求数据平均值的是( D )
- MAX
- SUM
- COUNT
- AVG
- 在SQL SELECT语句中用于实现关系的选择运算的短语是( C )
- FOR
- WHILE
- WHERE
- CONDITION
- 关系运算不包括下列中的( D )
- 联接运算
- 选择运算
- 投影运算
- 交运算
- 在概念设计阶段,最常使用的数据模型是( D )
- 对象模型
- 物理模型
- 逻辑模型
- 实体联系模型
- 使用SQL语句进行分组检索时,为了去掉不满足条件的分组,应当( B )
- 使用WHERE子句
- 在GROUP BY后面使用HAVING 子句
- 先使用WHERE子句,再使用HAVING子句
- 先使用HAVING 子句,再使用WHERE子句
- E-R图提供了表示信息世界中实体、属性和( B )的方法。
- 数据
- 联系
- 表
- 模式
- 在关系数据库设计中,设计关系模式属于数据库设计的( C )。
- 需求分析阶段
- 概念设计阶段
- 逻辑设计阶段
- 物理设计阶段
- mysql中,备份数据库的命令是( A )
- mysqldump
- mysql
- .backup
- copy
- 下面关于索引描述中错误的一项是( C )
- 索引可以提高数据查询的速度
- 索引可以降低数据的插入速度
- innodb存储引擎支持全文索引
- 删除索引的命令是dropindex
- 对事务的描述中不正确的是( C )
- 事务具有原子性
- 事务具有隔离性
- 事务回滚使用commit命令
- 事务具有可靠性
- 在语句“select * from student where s_name like '%晓%';”中,like 关键字表示的含义是( C )
- 条件
- 在哪里
- 模糊查询
- 逻辑运算
- drop database MyDB001; 该代码的功能是( B )
- 修改数据库名为 MyDB001
- 删除数据库 MyDB001
- 使用数据库 MyDB001
- 创建数据库 MyDB001
- use MyDB该代码的功能是( C )
- 修改数据库 MyDB
- 删除数据库 MyDB
- 使用数据库 MyDB
- 创建数据库 MyDB
- 把实体-联系模型转换为关系模型时,实体之间多对多联系在关系模型中是通过( C )
- 建立新的属性来实现
- 建立新的关键字来实现
- 建立新的关系来实现
- 建立新的实体来实现
- 对关系S和关系R进行集合运算,结果中既包含S中元组也包含R中元组,这种集合运算称为 ( A )
- 并运算
- 交运算
- 差运算
- 积运算
- 在数据库设计中,将ER图转换成关系数据模型的过程属于( B )
- 需求分析阶段
- 逻辑设计阶段
- 概念设计阶段
- 物理设计阶段
- 关系R1和R2,经过关系运算得到结果是S,则S 是( B )
- 一个关系
- 一个表单
- 一个数据库
- 一个数组
- 设有部门和职员两个实体,每个职员只能属于一个部门,一个部门可以有多名职员。则部门与职员实体之间的联系类型是 ( B )
- m:n
- 1:m
- m:1
- 1:1
- (@@error = 0) 该代码表示的含义是( C )
- 找到至少一个错误
- 没有任何一个错误
- 错误的编号是0
- 发生了除数为0的错误
- E-R图是数据库设计的工具之一,它一般适用于建立数据库的( A )。
- 概念模型
- 结构模型
- 物理模型
- 逻辑模型
- 将E.R图转换到关系模式时,实体与联系都可以表示成( B )。
- 属性
- 关系
- 键
- 域
- 函数 max() 表明这是一个什么函数?( D )
- 求总值函数
- 求最小值函数
- 求平均 值函数
- 求最大值函数
- 修改表记录的语句关键字是:( B )
- delete
- update
- insert
- select
- 表达式select (9+6*5+3%2)/5-3 的运算结果是多少?( C )
- 1
- 3
- 5
- 7
- delete from student where s_id > 5 该代码执行的是哪项操作?( C )
- 添加记录
- 修改记录
- 删除记录
- 查询记录
- 上一题中的代码含义正确的表述是( B ):
- 删除student表中所有s_id
- 删除student表中所有s_id 大于5的记录
- 删除student表中所有s_id 大于等于5的记录
- 删除student表
- 数据定义语言中的创建,修改,删除这三个英语单词,下列哪项才是完全正确的?( C )
- 创建(create) , 修改(alter) , 删除(update)
- 创建(alter) , 修改(modify), 删除(drop)
- 创建(create) , 修改(alter) , 删除(drop)
- 创建(alter) , 修改(create), 删除(drop)
- 建表语句中的 not null,该代码表示的含义是( B )
- 允许空格
- 非空约束
- 不允许写入数据
- 不允许读取数据
- select * from student 该代码中的 * 号,表示的正确含义是( C )
- 普通的字符*号
- 错误信息
- 所有的字段名
- 模糊查询
- 用户变量的声明应该使用哪个符号来表示?( D )
- _
- #
- @#
- @
- 声明变量的关键字是( C )
- dim
- decimal
- declare
- dealcre
- 唯一索引的关键字是( C )
- fulltextindex
- onlyindex
- uniqueindex
- index
- 对于现实世界中事物的特征,在实体-联系模型中使用 ( A )
- 属性描述
- 关键字描述
- 二维表格描述
- 实体描述
- 关系模型中,关系的每一个属性值( D )。
- 不能全同
- 可以全同
- 必须全同
- 是不可分割的
- SQL语言中,SELECT语句的执行结果是( A )
- 属性
- 表
- 元组
- 数据库
- 开始事务,提交事务,回滚事务的英语单词分别是( D )
- begin transaction , rollback transaction , commit transaction
- commit transaction , rollback transaction , begin transaction
- rollback transaction , begin transaction , commit transaction
- begin transaction , commit transaction , rollback transaction
- 学生关系模式 S( S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是( D )。
- UPDATE S Age
- DELETE Age from S
- ALTER TABLE S 'Age'
- ALTER TABLE S DROP Age
- 数据库中有A表,包括学生,学科,成绩三个字段,如何统计每个学科的最高分( B )
- select 学生,max(成绩) from A group by 学生;
- select 学生,max(成绩) from A group by学科;
- select 学生,max(成绩) from A order by学生;
- select 学生,max(成绩) from A group by 成绩;
- 下面的选项不是关系数据库基本特征的是( B )。
- 与列的次序无关
- 不同的列应有不同的数据类型
- 不同的列应有不同的列名
- 与行的次序无关
- SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能( C )
- 数据操纵
- 数据控制
- 数据定义
- 数据查询
- 以下插入记录正确的( A )
- insert into emp(ename,hiredate,sal) values (value1,value2,value3);
- insert into emp (ename,sal)values(value1,value2,value3);
- insert into emp (ename)values(value1,value2,value3);
- insert into emp (ename,hiredate,sal)values(value1,value2);
- 删除表中某列指令是( D )
- ALTER TABLE … DELETE …
- ALTER TABLE … DELETE COLUMN…
- ALTER TABLE … DROP …
- ALTER TABLE … DROP COLUMN…
- 根据关系模式的完整性规则,一个关系中的主键( C )。
- 不能由两列组成
- 不能成为另一个关系的外部键
- 不允许空值
- 可以有重复值
- 数据库系统的核心是( C )。
- 数据模型
- 数据库管理系统
- 数据库
- 数据库管理员
- 创建索引使用的语句是( B )
- CREATE TABLE
- CREATE INDEX
- CREATE EVENT
- CREATE TRIGGER
- 在SELECT语句中,可以使用( B )子句,将结果集中的数据行根据选择列的值进行逻辑分组,以便能汇总表内容的子集,即实现对每个组的聚集计算。
- LIMIT
- GROUP BY
- WHERE
- ORDER BY
- 在数据库概念设计阶段,最常使用的数据模型是( D )
- 对象模型
- 物理模型
- 逻辑模型
- 实体联系模型
- 从E-R图模型向关系模型转换,一个M:N(多对多)的实体联系转换成一个关系模式时,该关系模式的键是( C )。
- M端实体的键
- N端实体的键
- M端实体键与N端实体键的组合
- 重新选取其他属性
- 为数据表创建索引的目的是( A )
- 提高查询的检索性能
- 归类
- 降低存储空间占用
- 提高数据安全性
- 需要显示从2009年1月1日到2009年12月31日雇佣的所有职员的姓名和雇佣日期。职员信息表tblEmployees包含列Name和列HireDate,下面哪条语句能完成该功能 ( C )
- SELECT Name, HireDate FROM tblEmployees
- SELECT Name, HireDate FROM tblEmployees WHERE HireDate ='2009-01-01' OR '2009-12-31'
- SELECT Name, HireDate FROM tblEmployees WHERE HireDate BETWEEN '2008-12-31' AND '2010-01-01'
- SELECT Name, HireDate FROM tblEmployees WHERE HireDate ='2009-01-01' AND '2009-12-31'
- 在MySQL中,通常使用( D )语句来指定一个已有数据库作为当前工作数据库
- USING
- USED
- USES
- USE
- 设置表的默认字符集关键字是( D )
- DEFAULT CHARACTER
- DEFAULT SET
- DEFAULT
- DEFAULT CHARACTER SET
- 在存储过程中表示分支选择语句的是( A )
- IF
- WHILE
- SELECT
- SWITCH
- SQL语言又称( C )。
- 结构化定义语言
- 结构化控制语言
- 结构化查询语言
- 结构化操纵语言
- 变量的声明应该使用哪个符号来表示?( D )
- _
- #
- &
- @
- 在视图上不能完成的操作是( D )
- 查询
- 在视图上定义新的视图
- 更新视图
- 在视图上定义新的表
- 查询语句需要按照姓名name降序排列,下列语句正确的是( B )
- ORDER BY DESC name
- ORDER BY name DESC
- ORDER BY name ASC
- ORDER BY ASC nameE
- 从GROUP BY分组的结果集中再次用条件表达式进行筛选的子句是( C )
- FROM
- ORDER BY
- HAVING
- WHERE
- 数据库服务器、数据库和表的关系,正确的说法是( B )
- 一个数据库服务器只能管理一个数据库,一个数据库只能包含一个表
- 一个数据库服务器可以管理多个数据库,一个数据库可以包含多个表
- 一个数据库服务器只能管理一个数据库,一个数据库可以包含多个表
- 一个数据库服务器可以管理多个数据库,一个数据库只能包含一个表
- 下面检索结果最多只有一行的命令是( D )
- SELECT DISTINCT * FROM orders ;
- SELECT * FROM orders LIMIT 1,2;
- SELECT * FROM orders GROUP BY 1;
- SELECT * FROM orders LIMIT 1;
- “SHOW DATABASES LIKE 'student%'”命令无法显示出以下哪个数据库?( C )
- student_my
- studenty
- mystudent
- student
- 使用( C )命令可以查看视图创建语句。
- SHOW VIEW
- SELECT VIEW
- SHOW CREATE VIEW
- DISPLAY VIEW
- 3abc7、abc73、 bc73a、c73ab、*73abc,这几个用户自定义标识符中,符合标识符命名规则的有几个?( C )
- 1 个
- 2 个
- 3 个
- 4 个
- 在SELECT语句中,使用关键字( D )可以把重复行屏蔽
- TOP
- ALL
- UNION
- DISTINCT
- 有三个表,它们的记录行数分别是10行、2行和6行,三个表进行交叉连接后,结果集中共有( D )行数据
- 18
- 26
- 不确定
- 120
- 下列不是MySQL比较运算符的是( C )
- !=
- <=>
- ==
- >=
- 查找数据库中所有的数据表用以下哪一项( B )
- SHOW DATABASE
- SHOW TABLES
- SHOW DATABASES
- SHOW TABLE
- 触发器是由特定的表事件触发而自动执行的MySQL语句,以下哪个语句不能使触发器激活触发?( A )
- SELECT
- INSERT
- DELETE
- UPDATE
- 查找条件为:姓名为NULL的记录( B )
- WHERE NAME NULL
- WHERE NAME IS NULL
- WHERE NAME=NULL
- WHERE NAME ==NULL
- 例如数据库中有A表,包括学生,学科,成绩三个字段,如何查询最高分>80的学科?( C )
- SELECT MAX(成绩) FROM A GROUP BY学科 HAVING MAX(成绩)>80;
- SELECT学科 FROM A GROUP BY学科 HAVING成绩>80;
- SELECT学科 FROM A GROUP BY学科 HAVING MAX(成绩)>80;
- SELECT学科 FROM A GROUP BY学科 WHERE MAX(成绩)>80;
- 创建数据表时,下列哪种列类型的宽度定义是不可以省略的。 ( C )
- DATE
- INT
- CHAR
- TEXT
- 条件语句“BETWEEN 20 AND 30”表示在20到30之间,且( D )
- 包括20岁不包括30岁
- 不包括20岁包括30岁
- 不包括20岁和30岁
- 包括20岁和30岁
- 有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄, C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是“SELECT SNAME FROM S,C,SC WHERE……”。这里的WHERE子句的内容是( D )。
- SAGE>=20 and CNAME='ACCESS'
- S.S# = SC.S# and C.C# = SC.C# and SAGE in>=20 and CNAME in 'ACCESS'
- SAGE in>=20 and CNAME in 'ACCESS'
- S.S# = SC.S# and C.C# = SC.C# and SAGE>=20 and CNAME='ACCESS'
- 在MySQL中,备份数据库的命令是( A )
- MYSQLDUMP
- MYSQL
- BACKUP
- COPY
- 对于现实世界中事物的特征,在实体-联系模型中我们使用( A )来描述。
- 属性
- 关键字
- 二维表格
- 实体
- 在实际使用中,MySQL所支持的触发器不包括( A )。
- CREATE触发器
- INSERT触发器
- DELETE触发器
- UPDATE触发器
- 判断题
- AUTO INCREMENT 关键字可以指定列值自动增加,只能应用于整型字段。( √ )
- INSERT语句所插入的数据行数据可以来自另外一个SELECT语句的结果集。( √ )
- NULL表示值为0。( × )
- BOOLEAN型数据用于存储逻辑值,它只有两种状态TRUE和FALSE。( √ )
- 当一个表中所有行都被DELETE语句删除后,该表也同时被删除了。( × )
- 使用TRUNCATE命令清空表数据比使用DELETE命令执行速度要慢。( × )
- 在DELETE触发器中,可以引用一个名为new的虚拟表,访问被删除行的数据。( × )
- 当一个表中存在主键或唯一索引时,使用REPLAC语句插入数据时,会先把冲突的旧数据删除,然后插入新数据。( √ )
- 存储函数使用CALL语句调用。( × )
- 在创建表时,可以使用IF NOT EXISTS子句确保如果表不存在才创建它( √ )
- UNION关键字能够将两个或多个SELECT语句的结果连接起来。( × )
- 创建的数据库和表的名字,都可以使用中文。( × )
- SELECT语句的ORDER BY子句定义的排序表达式所参照的列甚至可以不出现在输出列表中。( × )
- 对于字符串型数据,空字符串’’就是NULL,对于数值型数据0就是NULL。( √ )
- !=和<>都代表不等于。=和<=>都代表等于。( √ )
- 在INSERT触发器中,可以引用一个名为old的虚拟表,访问被插入的数据。( √ )
- 存储过程可以使用RETURN语句返回值。( √ )
- 当一个表中存在主键或唯一索引时,使用INSERT语句插入数据时,会先把冲突的旧数据删除,然后插入新数据。( √ )
- TIMESTAMP类型可以自动记录当前日期时间。( × )
- 游标是一个被SELECT语句检索出来的结果集。在存储了游标后,应用程序或用户就可以根据需要滚动或浏览其中的数据。( × )
- 填空题,按要求完成语句
已知课程表kc有三个字段课程号、课程名、学分。学生选课表xs_kc有三个字段课程号、学号、成绩。
- 写出统计某门课选人数的存储过程count_stu,输入参数为课程号cid,输出参数为该门课的选课人数stu_num。
delimiter@@
create procedure count_stu (in cno char(3), ____out ___ stu_num int)
begin
select ____count_____(学号) into stu_num from xs_kc where 课程号=___ cid___ group by 课程号;
end@@
delimiter ;
- 现在要查询选修了“MYSQL数据库”这门课,并且考试成绩在60分以上(含60)的学生学号。
select sid
from kc inner join xs_kc
on ______kc.课程号=xs_kc.课程号____________
where ______课程名= 'MYSQL数据库' and 成绩>=60_________;
- 创建一个视图score_info,显示课程名以及该门课程的最高分、最低分和平均分。
_____create view__________ score_info
as
select 课程名,max(成绩),min(成绩),____ avg(成绩)________
from xk
____group______BY cid;
- 创建一个事件backup_score,每个月定时清空备份表backup,并将学生选课表的全部数据重新插入至备份表backup,于1星期后开启,一年后停止执行(提示:CURDATE()表示系统当前日期,并假设backup表已经存在,表结构和学生选课表一致。)
delimiter$$
create event backup_score
every 1 month_____________
interval 7 day____________
ends CURDATE() +interval 1 year
do
begin
truncate table backup;
insert into backup select * from xs_xk;
end$$
delimiter ;
TRUNCATE TABLE test;
- 查询产品表products,查询产品价格(prod_price)在10以上的且产品数量在2以上的数据,列出产品编号(vend_id)和产品数量。
SELECT vend_id,count(*)
FROM products
WHERE _______prod_price>=10_________
GROUP BY vend_id
HAVING_______count(*)>=2_________;
- 创建一个存储函数max_2,返回两个数中的最大值。
DELIMITER$$
____CREATE FUNCTION
______RETURNS ________ INT
BEGIN
num1>num2_______
THEN RETURN num1;
ELSE RETURN num2;
END IF;
END$$
DELIMITER ;
- 已知学生表xs有学号(id)、姓名(name)、性别(gender)、专业名(major)、学分(credit)四列。为xs表创建视图xs_view,内容是列出专业名(major)为“计算机”的学生学号(id)和姓名(name)。
CREATE VIEW xs_view
______AS_________
SELECT id,name
FROM xs
WHERE _________major='洗发水'________;
- 接上题。查询女生学分从大到小排名在五位的的学号和姓名
SELECT id,name
FROM xs
WHERE gender='女'
______ORDER _________ BY credit _______DESC_______
_______LIMIT________ 5;
- 简答题
- 什么是触发器?
触发器是一个被指定关联到一个表的数据对象,触发器不需要调用,当对一个表的特别事件出现时,它就会被激活。
- 主键的作用是什么?
数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。主键主要是用于其他表的外键关联,以及本记录的修改与删除。
- 写出删除数据库mydb的语句。
drop database mydb;
- 如何查看学生表xs的表结构?
describe xs; 或 show create table xs;
- 如果查询数据,出现中文乱码,猜测可能原因。以及该如何设置?
数据库字符集、数据库连接字符集、客户端字符集、显示结果字符集不支持gbk。set names gbk;
- 外键的作用是什么?
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值
- 创建一个新表x,表结构复制自表y。写出创建语句。
create table x like y;
- 什么是关系型数据库?
8. 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系型数据库是由多张能互相联接的二维行列表格组成的数据库。
- 存储过程有什么优点?
9. 存储过程或者函数可以重复使用,可以减少数据库开发人员,尤其是应用程序开发人员的工作量。使用存储过程或者函数可以增强数据的安全访问控制。可以设定只有某些数据库用户才具有某些存储过程或者函数的执行权。
- 事务的提交和回滚是什么意思?
10. 事务的提交:当确定数据更改加工完毕,需要进行存储时,此时,将数据传递出去,称为提交; 事务的回滚:当数据加工过程中出现错误,把数据和状态恢复到加工之前,这称之为回滚。
写出下列语句的含义:
ALTER TABLE xs
ADD COLUMN comment TEXT NOT NULL;
给XS表增加一个列“comment”,数据类型为TEXT,不允许为空
- SELECT AVG(工资) FROM雇员 GROUP BY 部门编号;
求每个部门的平均工资。
- SHOW CREATE DATABASE xscj;
显示数据库xscj的创建语句。
- SHOW INDEX FROM kc;
14. 显示kc表的索引
- DORP VIEW xs_score;
15. 删除视图xs_score
- SHOW CREATE PROCEDURE stu_info;
16. 显示存储过程stu_info的创建语句
ALTER DATABASE test
DEFAULT CHARACTER SET gb2312;
修改数据库test的默认字符集为gb2312
- CREATE TABLE student LIKE xs;
创建一个student表,结构与xs表一致。
- DESCRIBE xs;
查看xs表的结构。
- DROP DATABASE test;
删除数据库test
- 综合题,请使用MySQL命令行完成如下操作
(一)
- 创建一个企业员工管理的数据库,数据库名称为“userdb”。要求判断建库库时是否已存在。数据库字符集要求设置为支持中文字符的字符集“gbk”,字符集校验规则设置为gbi_chinese_ci。(3分)
1.
create database if not exists userdb
default character set gbk
default collate gbi_chinese_ci;
- 在userdb数据库中按照要求创建以下数据表,注意不要遗漏实体完整性和域完整性约束条件:
①部门表 Departments(3分)
字段名 | 类型 | 含义 | 约束 |
DepartmentID | 整型 | 部门编号 | 该字段自动增加,主键 |
DepartmentName | 字符型,长度50 | 系部名称 | 非空,唯一 |
Note | 文本型 | 部门介绍 | 可以为空 |
②雇员表 Employees(4分)
字段名 | 类型 | 含义 | 约束 |
EmployeeID | 整型 | 雇员编号 | 该字段自增,该字段为主键 |
DepartmentID | 整型 | 部门编号 | 可以为空 |
Name | 字符型,长度20 | 姓名 | 非空 |
Age | 整型 | 年龄 | 非空 |
Sex | 字符型 | 性别 | 非空,默认值“男” |
Edate | 日期型 | 入职日期 | 可以为空 |
③雇员薪水表 Salary(2分)
字段 | 类型 | 含义 | 约束 |
EmployeeID | 整型 | 雇员编号 | 非空,该字段为主键 |
Income | 浮点型 | 收入 | 可以为空 |
Outcome | 浮点型 | 各项扣款 | 可以为空 |
2.
create table Department
(
DepartmentID int primary key aoto_increment,
DepartmentNam char(50) unique not null,
Note text
);
create table Employees
(
EmployeeID int key aoto_increment,
DepartmentID int,
Name char(20) not null,
Age int not null,
Sex char not null default '男',
Edate date
);
create table Salary
(
EmployeeID int primary key,
Income float,
Outcome float
);
- 为雇员表创建外键fk_dm参照完整性约束,被参照的父表是部门表。定义参照约束操作策略为:删除操作置空值,更新操作级联。(3分)
alter table Employee
add constraint fk_dm foreign key (DepartmentID)
references Department((DepartmentID)
on delete set null
on update cascade;
- 为雇员薪水表增加一列实际薪资RealIncome,类型为整型,可以为空。(3分)
alter table Salary
add column RealIncome int;
- 向部门表 Departments中插入记录(3分):
1 | 销售部 | null |
2 | 采购部 | null |
3 | 生产部 | null |
- 员工王林岗位发生调动,由原本的销售部调入采购部。请修改数据以匹配他的新岗位。(3分)
insert into Department values(1,'销售部',null);
- 查询各部门员工的总收入,列出部门名和总收入。(3分)
select DepartmentName,sum(Income) as 总收入
from Department join Employee
on Department. DepartmentID=Employee. DepartmentID
group by DepartmentID;
- 为雇员薪水表创建触发器Salary_insert,要求在雇员薪水表插入新记录的之前,先自动根据雇员的收入和各项扣款,计算出雇员的实际薪资。(3分)
delimiter $$
create trigger dd_insert before insert
on Salary for each row
begin
declear x int;
select new.Income-new.Outcom into x from Salary;
set new.RealIncome=x;
end$$
delimiter ;
(二)
- 为了对超市中的各类商品进行有效管理,创建一个名为spgl的数据库(3分)
create database spgl;
- 为各类商品在spgl数据库中创建goods表,其中要求包含以下字段:(3分)
字段名称 | 类型 | 说明 |
商品编号 | 字符型,8位 | 主键 非空 |
商品名称 | 字符型,20位 | 非空 |
商品单价 | 整型 | |
商品数量 | 整型 |
create table goods
(
商品编号 char(8) not null primary key ,
商品名称 char(20) not null,
商品单价 int ,
商品数量 int
);
- 为客户创建custom表,其中要求包含以下字段:(4分)
字段名称 | 类型 | 说明 |
客户编号 | 字符型,8位 | 主键 非空 |
客户姓名 | 字符型,30位 | 非空 |
通讯地址 | 字符型,50位 | |
联系电话 | 字符型,15位 | |
客户等级 | 整型 |
create table custom
(
客户编号 char(8) not null primary key ,
客户姓名 char(20) not null,
通讯地址 char(50) ,
联系电话 char(15),
客户等级 int
);
- 为购买记录创建order表,其中要求包含以下字段:(2分)
字段名称 | 类型 | 说明 |
商品编号 | 字符型,8位 | 联合主键 非空 |
客户编号 | 字符型,8位 | 联合主键 非空 |
购买时间 | 时间戳 | 非空 |
购买数量 | 整型 | 非空 |
create table order
(
商品编号char(8) not null,
客户编号char(8) not null,
购买日期date not null ,
购买数量 date,
primary key(商品编号,客户编号)
- 为购买记录表order的“商品编号”列创建外键,使得购买记录表order作为子表,参照父表商品表goods的“商品编号”列,并都在更新、删除数据时设置restrict(拒绝)操作策略。(3分)
alter table order
add foreign key (商品编号)
references goods(商品编号)
on delete restrict
on update restrict;
- 为商品表goods插入一条数据,商品编号为01123456,商品名称为沙宣护发素,价格65元,数量有3个。(3分)
insert into goods values('01123456','沙宣护发素',65,3);
- 修改商品表goods中,将数量低于3本的商品,数量在原有基础上增加5本。(3分)
update goods set 商品数量=商品数量+5 where 商品数量<3;
- 查询每个客户购买商品的客户编号和购买数量,结果按照购买数量升序排列。(3分)
select 客户编号,count(*) as 购买数量
from order
group by 客户编号
order by 购买数量;
- 查询购买了商品名称带有“洗发水”的所有客户编号。(3分)
select 客户编号
from goods inner join order
on goods.商品编号=order.商品编号
where 商品名称 like '%洗发水%';
10.为购买记录表order创建触发器order_insert,要求order表插入新纪录之后,随即更新商品表custom的数量列,数值为原数量减去order表中该条记录的购买数量(3分)
delimiter $$
create trigger order_insert after insert
on order for each row
begin
declear order_count int;
declear js_old int;
select new.购买数量 into order_count from order where 客户编号=new.客户编号 and 商品编号=new.商品编号;
update goods set数量=数量-order_count where 商品编号=new.商品编号;
select count(*) into js_old from order where 客户编号=old.客户编号;
end$$
delimiter ;
(三)
- 为了对宾馆的客房、顾客、保洁人员进行有效管理,创建一个名为hotel的数据库。(3分)
create database hotel;
- 为顾客在hotel数据库中创建customer表,其中要求包含以下字段:(3分)
字段名称 | 含义 | 类型 | 说明 |
customer_no | 顾客编号 | 字符型,15位 | 主键 非空 |
id_no | 顾客证件号码 | 字符型,18位 | 非空 |
customer_name | 顾客姓名 | 字符型,10位 | 非空 |
contact | 顾客联系方式 | 字符型,11位 | |
vip | VIP等级 | 整型 | 默认值0 |
room_no | 入住房间号 | 字符型,4位 |
- 为客房创建room表,其中要求包含以下字段:(3分)
字段名称 | 含义 | 类型 | 要求 |
room_no | 客房编号 | 字符型,4位 | 主键 非空 |
price | 价格 | 浮点型 | 非空 |
type | 房间类型 | 字符型,6位 | 非空 |
check_in | 是否已入住 (0未入住1入住) | 整型 | 默认值0 |
clean | 是否已打扫 (0未打扫1已打扫) | 整型 | |
cleaner_no | 保洁员工号 | 字符型,4位 |
create table customer
(
customer_no char(15) primary key,
id_no char(18) not null,
customer_name char(10) not null,
contact char(11),
vip int default 0,
room_no char(4)
);
- 为保洁员创建cleaner表,其中要求包含以下字段:(3分)
字段名称 | 含义 | 类型 | 要求 |
cleaner_no | 保洁员工号 | 字符型,4位 | 主键 非空 自动增长 |
cleaner_name | 保洁员姓名 | 字符型,10位 | 非空 |
contact | 联系方式 | 字符型,11位 | |
remarks | 备注 | 文本型 |
create table borrow
(
cleaner_no char(4) auto_increment primary key,
cleaner_name char(10) not null,
contact char(11) ,
remarks text
);
- 新入职一个保洁员孙晓红,电话11223344556,备注为空。请在保洁员表cleaner中为她添加一条记录。(3分)
insert into cleaner (name,contact) values('孙晓红','11223344556');
- 假设8302号房间的顾客已经退房,请将客房表room对应的记录信息修改为未入住,未打扫。(3分)
update room set check_in=0,clean=0 where room_no='8302';
- 查询房间类型为“双人标准间”,已经打扫完毕,尚未入住的客房,列出客房编号,按房间价格升序排列。(3分)
select room_no
from room
where type='双人标准间' anc clean=1 and check_in=0
order by price;
- 查询已经退房但尚未打扫的房间,列出保洁员姓名和客房编号。(3分)
select cleaner_name,room_no
from cleaner inner join room
on cleaner.cleaner_no=room. cleaner_no
where clean=0 and check_in=0;
- 假设vip1级可以在原房价基础上打9折,vip2级可以打8折,vip3级可以打7折。请定义一个存储过程check_out,传入客户号、房号和入住天数,根据顾客的VIP等级计算房费并传出。并调用存储过程,查询“123456789088888”号在“8888”号房间住宿4天的房费。(3分)
delimiter $$
create procedure check_out(in cn char(15),in rn char(4),in days int,out money float)
begin
declare v int;
declare dc float defaul 1;
declare p float;
select vip into v from customer where customer_no=cn;
select price into p from room where room_no=rn;
case v
when 1 then set dc=0.9;
when 2 then set dc=0.8;
when 3 then set dc=0.7;
end case;
set money=p*days*dc;
end$$
delimiter ;
call check_out('123456789088888','8888',4,@bill);
select @bill;
10.为保洁员表cleaner创建一个触发器cleaner_delete,要求在保洁员表cleaner删除记录之后,自动根据清除客房表room中对应记录中的保洁员工号。(3分)
delimiter $$
create trigger cleaner_delete after delete
on cleaner for each row
begin
update room set cleaner_no=NULL where cleaner_no=old.cleaner_no;
end$$
delimiter ;
(四)
- 为了对图书馆中的各类书籍进行有效管理,创建一个名为tsgl的数据库(2分)
create database tsgl;
- 为各类书籍在ckgl数据库中创建book表,其中要求包含以下字段:(2分)
字段名称 | 类型 | 说明 |
图书编号 | 字符型,8位 | 主键 非空 |
图书名称 | 字符型,20位 | 非空 |
图书单价 | 整型 | |
图书数量 | 整型 |
create table book
(
图书编号 char(8) not null primary key ,
图书名称 char(20) not null,
图书单价 int ,
图书数量 int
);
- 为借书人员创建reader表,其中要求包含以下字段:(2分)
字段名称 | 类型 | 说明 |
读者编号 | 字符型,8位 | 主键 非空 |
读者姓名 | 字符型,30位 | 非空 |
通讯地址 | 字符型,50位 | |
联系电话 | 字符型,15位 | |
借书数量 | 整型 |
create table reader
(
读者编号 char(8) not null primary key ,
读者姓名 char(20) not null,
通讯地址 char(50) ,
联系电话 char(15),
借书数量 int
);
- 为借书记录创建borrow表,其中要求包含以下字段:(2分)
字段名称 | 类型 | 说明 |
图书编号 | 字符型,8位 | 联合主键 非空 |
读者编号 | 字符型,8位 | 联合主键 非空 |
借书日期 | 日期型 | 非空 |
归还日期 | 日期型 |
create table borrow
(
图书编号char(8) not null,
读者编号char(8) not null,
借书日期date not null ,
归还日期 date,
销售金额int,
primary key(图书编号,读者编号)
);
- 为借书记录表borrow的“图书编号”列创建外键,使得借书记录表borrow作为子表,参照父表图书表book的“图书编号”列,并都在更新、删除数据时设置restrict(拒绝)操作策略。(2分)
alter table borrow
add foreign key (图书编号)
references book(图书编号)
on delete restrict
on update restrict;
- 为图书表book插入一条数据,图书编号为01123456,图书名称为计算机组成原理,价格65元,数量有3本。(2分)
insert into book values('01123456','计算机组成原理',65,3);
- 修改图书表book中,将数量低于3本的图书,数量在原有基础上增加5本。(2分)
update book set 图书数量=图书数量+5 where 图书数量<3;
- 查询每个读者借阅图书的读者编号和借阅数量,结果按照借阅数量升序排列。(2分)
select 读者编号,count(*) as 借阅数量
from borrow
group by 读者编号
order by 借阅数量;
- 查询借了图书名称带有“计算机”的所有读者编号。(2分)
select 读者编号
from book inner join borrow
on book.图书编号=borrow.图书编号
where 图书名称 like '%计算机%';
- 为借书记录表borrow创建触发器borrow_update,要求borrow表更新之后,随即更新读者表reader的借书数量列,数值为borrow表中该条记录的借书人员所有归还日期列为空的记录总数。(2分)
delimiter $$
create trigger borrow_update after update
on borrow for each row
begin
declear js_new int;
declear js_old int;
select count(*) into js_new from borrow where 读者编号=new.读者编号 and 归还日期 is null;
update reader set 借书数量=js_new where 读者编号=new.读者编号;
select count(*) into js_old from borrow where 读者编号=old.读者编号 and 归还日期 is null;
update reader set 借书数量=js_old where 读者编号=old.读者编号;
end$$
delimiter ;
(五)
- 为了对仓库中的各类产品进行有效管理,创建一个名为kcgl的数据库。(2分)
create database ckgl;
- 为各类产品在ckgl数据库中创建cp表,其中要求包含以下字段:(2分)
字段名称 | 类型 | 说明 |
产品编号 | 字符型,8位 | 主键 非空 |
产品名称 | 字符型,20位 | 非空 |
产品单价 | 整型 | |
产品数量 | 整型 |
create table cp
(
产品编号 char(8) not null primary key ,
产品名称 char(20) not null,
产品单价 int ,
产品数量 int
);
- 为客户创建kh表,其中要求包含以下字段:(2分)
字段名称 | 类型 | 说明 |
客户编号 | 字符型,8位 | 主键 非空 |
客户名称 | 字符型,30位 | 非空 |
销售地区 | 字符型,10位 | |
联系人 | 字符型,10位 | |
联系电话 | 字符型,15位 |
create table kh
(
客户编号 char(8) not null primary key ,
客户名称 char(20) not null,
销售地区 char(10) ,
联系人 char(10),
联系电话 char(15)
);
- 为订单数据创建dd表,其中要求包含以下字段:(2分)
字段名称 | 类型 | 说明 |
产品编号 | 字符型,8位 | 联合主键 非空 |
客户编号 | 字符型,8位 | 联合主键 非空 |
销售日期 | 日期型 | 非空 |
销售数量 | 整型 | 非空 |
销售金额 | 整型 |
create table dd
(
产品编号char(8) not null,
客户编号char(8) not null,
销售日期date not null ,
销售数量 int not null,
销售金额int,
primary key(产品编号,客户编号)
);
- 为订单表dd的“产品编号”列创建外键,使得订单表dd作为子表,参照父表产品表cp的“产品编号”列,并都在更新、删除数据时设置cascade(级联)操作策略。(2分)
alter table dd
add foreign key (产品编号)
references cp(产品编号)
on delete cascade
on update cascade;
- 为产品表cp插入一条数据,产品编号为01123456,产品名称为空调压缩机,价格676元,数量有3件。(2分)
. insert into cp values('01123456','空调压缩机',676,3);
- 删除产品表cp中单价超过500元的记录。(2分)
delete from cp where 产品单价>500;
- 查询每个客户订购产品的客户编号和总数量,结果按照总数量降序排列。(2分)
select 客户编号,sum(销售数量) as 总数量
from dd
group by 客户编号
order by 总数量 desc;
- 查询所有订购了产品名称中带有'空调'这类产品的客户编号。(2分)
select 客户编号
from cp inner join dd
on cp.产品编号=dd.产品编号
where 产品名称 like '%空调%';
- 为订单表dd创建触发器dd_insert,要求在dd表插入新记录的之前,自动根据产品表cp中的产品单价,计算订单的总金额。(2分)
delimiter $$
create trigger dd_insert before insert
on dd for each row
begin
declear je int;
select 单价*new.数量 into je from cp where 产品编号=new.产品编号;
set new.金额=je;
end$$
delimiter ;