第一单元题目
(Command窗口)不属于MySQL的图形管理工具
(Workbench,Navicat,PhpMyAdmin)属于MySQL的图形管理工具
MySQL有以下特点(开源软件,适用于OLTP场景,服务器数量大,主要应用于互联网行业)
MySQL是关系型数据库(正确)
MySQL默认使用TCP/IP的端口号是(   3306)
进行MySQL的配置,最重要的是修改(  my.ini )文件
可以通过( net start mysql57 )命令来启动MySQL服务
MySQL支持的存储引擎有哪些(  myisam,innodb,memory,engine )
完全卸载MySQL,需要执行以下哪几项( 删除目录C:\Program Files下的 MySQL文件夹,    点击控制面板→卸载程序,卸载掉所有相关的MySQL软件,    删除目录C:\ProgramData下下的MySQL文件夹,     删除注册表中HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\EventLog\Application下的MySQL文件夹)
如果要在数据表中正确地显示中文,必须将( default-character-set,character-set-server  )设置为UTF8。
为了避免不支持中文字符串查询或者发生中文字符串乱码等问题,不应该考虑使用以下(latin1 )字符集。
最彻底、最直接修改MySQL的字符集,是在my.ini文件中实现的(   正确)
MySQL是一款开源的软件。(   正确)
MEMORY是MySQL5.7.22默认的存储引擎。(错误)
MySQL的启动类型有(自动,手动,禁用)
可以用命令NET START启动MySQL的服务

第二单元题目
E-R图是数据库设计的工具之一,它一般适用于建立数据库的( 概念模型 )。
给定工程项目PROJ和职工EMP实体集,若一个职工可以参加多个项目,一个项目可以由多个职工参加,那么,PROJ与EMP之间应是一个( m:n )的联系。
在SQL语言中,删除基本表的命令是( drop table )
选择数据库course为当前数据库的命令是(use course; )
删除数据库db_student的命令是( drop database  db_student; )
数据库系统从广义的角度看,应该由(数据库、硬件、软件和人员  )组成。
(INT,FLOAT,DECIMAL)是对数值数据类型的定义
查看数据库中数据表列表的命令是( show tables; )。
若要在基本表S中增加一列Cn(课程名),可用( ALTER  TABLE  S  ADD Cn  CHAR(8); ).
将数据表student字段名称address修改为stuAddress,用( alter table student change address stuAddress varchar(50);)语句
关系的属性在数据表中称为字段(正确)
假设一个教师可以讲授多门课程,一门课程可以有多名教师讲授,则教师和课程之间的联系类型为( n:m )。
假设一个院系有多名教师,一个教师只属于一个院系,则院系和教师 之间的联系类型为(  1:n)。
某高校人事管理系统中,规定讲师每课时的教学酬金不能超过100元,副教授每课时的教学酬金不能超过130元,教授每课时的教学酬金不能超过160元。这种情况下所设置的数据完整性约束条件称之为(用户定义完整性  )。
商品关系P(商品名,条形码,产地,价格)中的( 条形码 )属性可以作为该关系的主键。
某银行信贷额度关系credit-in(C_no, C_name, limit, Credit_balance)中的四个属性分别表示用户号、用户姓名、信贷额度和累计消费额。该关系的 (  C_no )属性可以作为主键。
设有关系Students(学号,姓名,年龄,性别,系名,家庭住址),其中,属性“系名”是关系DEPT的主键,用户要求访问“家庭住址”的某个成分,如邮编、省、市、街道以及门牌号。关系Students的主键和外键分别是( 学号、系名 )。
为了避免不支持中文字符串查询或者发生中文字符串乱码等问题,应该考虑使用以下( gb2312,gbk, utf8)字符集。
数据完整性包括以下哪些(用户定义完整性,实体完整性,参照完整性  )
唯一性约束用于保证表中某个字段的值不重复,但是值可以为空( null),一个表能定义多个唯一性约束。(  正确)
默认值约束用于指定一个字段的默认值。插入记录时,如果没有给该字段赋值,数据库系统会自动为这个字段插入默认值。( 正确 )
外键约束用于保证外键字段值与父表中主键字段值的一致性,外键字段值要么是NULL,要么是父表中主键字段值的复制。(   正确)
“年龄在18-25之间”这种约束属于数据库系统的(完整性  )措施。
在人事管理系统中,规定工程师的职工编号不能为空,这样的数据完整性约束条件称之为( 实体完整性 )
设置了唯一键的字段不能插入重复的值(正确)
定义主键的关键字是PRIMARY KEY。(正确)

第三单元题目
若课程域D1={数据库,操作系统,面向对象},教师域D2={王强,刘亦},学生域D3={刘海华,张刚,昊琨,梁谦},在关系代数运算中,D1×D2的结果有(  6 )个元组。
统计档案表中学生来自多少个城市,下面SQL语句是(SELCET COUNT(DISTINCT 家庭住址)  FROM  档案表)
信贷额度关系credit-in(C_name[用户姓名],limit[信贷额度],Credit_balance[到目前为止的花费])中。下表为关系credit-in的一个具体实例。若要查询每个用户还能花费多少,相应的SQL语句应为:Select(C_name,limit-Credit_balance) From credit-in。
SELECT后只能出现表的字段名,不能是表达式。(错误)
自连接SQL语句关键词为(JOIN…ON…)
时间差函数是(TIMESTAMPDIFF())
返回比子查询中最小的还要大于等于的数据记录使用的是(>=ANY)
in、exists之间是可以相互转换的(正确)
使用比较运算符“=”匹配每个表共有列的列值,查询结果仅包含符合连接条件与筛选条件的行的连接叫做(等值连接)
商品关系P(商品名,条形码,产地,价格),将价格小于50的商品上调5%的SQL语句应该是: UPDATE P  ( SET价格=价格*1.05  )  WHERE价格<50;
MySQL中,insert语句不能完成一次性向表中插入多条记录。(错误)
更新操作的关键字是update(正确)

第四单元题目
为数据表创建索引的目的是(提高查询的检索性能  )。
以下关于索引的描述正确的是( 索引需要额外的存储空间 )。
以下( 非空约束 )约束不是基于索引实现的。
以下哪一个关键字是用来创建唯一索引的(uniuqe index)
以下哪个字段可以实现删除视图( drop view )
根据创建索引的字段,索引可以分为以下几类(单列索引,多列索引  )
使用视图的原因主要有以下几种(  安全性,简单性,数据独立性)
经常在WHERE子句中出现的字段,适合创建索引。( 正确 )
设置唯一完整性约束的字段,不适合创建索引。(  错误)
创建索引的关键字为CREATE INDEX。(  正确 )
为已存在的表创建索引只能通过 ALTER TABLE方式实现。(  错误)
视图本质上是数据库中实际存在的物理表。(  错误)
数据库中只存放了视图的定义,而并没有存放视图中的数据。( 正确 )
创建视图需要使用SELECT语句( 正确 )
DESC view_name;可以实现查看视图。( 正确  )

第五单元题目
调用带一个输入参数的存储过程,正确的语句是(CALL p1(“101101”);   )
在创建触发器时,如果要创建在删除表中的数据后触发触发器,应该基于下面哪个事件(DELETE)
查看触发器的语句是(  show triggers)
删除触发器trigger_fg1的语句是(  DROP TRIGGER trigger_fg1)
在MySQL中存储过程对应的关键字是( procedure )
在MySQL中修改存储过程使用的命令是( ALTER PROCEDURE )
在MySQL中表示函数的关键字是( FUNCTION  )
以下( WHILE,REPEAT,LOOP )关键字可以创建循环结构
在MySQL的存储过程中提供的哪些程序控制结构(循环结构,顺序结构,分支结构  )
MySQL的触发器类型主要有哪几种( UPDATE,INSERT,DELETE  )
在MySQL的触发器中,Trigger_Time主要有那两个种( after,before)
在MySQL中使用关键字OUT表示输入参数(  错误)
在MySQL中可以定义没有参数的存储过程。(  正确)
在MySQL的存储过程的调用中,形式参数和实际参数要做到个数相同,类型要一一对应。(  正确)
在MySQL中函数体一般都是返回SELECT查询语句(  正确 )
在MySQL的函数的定义中RETURNS后面要书写函数的类型(  正确)
在MySQL的触发器创建时关键字ON后面跟的是触发器的名称。(  错误)
在MySQL的插入触发器中能使用的临时表是OLD表。(  错误)
在MySQL的更新触发器中只能使用NEW表,不能使用OLD表。(  错误)
在MySQL的删除触发器对应的临时表是NEW表。( 错误)
在MySQL中调用存储过程使用的命令关键字是(     call)
 在MySQL的存储过程中begin和end应该成对出现,表示一个完整的命令序列。
MySQL的触发器类型主要有哪几种?update insert delete




第六单元题目
MySQL的事务控制语句中,以下哪个关键词表示“回滚”操作。(ROLLBACK  )
MySQL数据库的权限表中,以下哪张表用于存放用户的基本信息,如用户名、密码等。( User表 )
MySQL数据库中,用于事务授权控制的关键词是下面哪个(GRANT  )
以下哪种备份类型用于在数据库关闭状态下进行备份操作( 冷备份 )
某SQL语句,每次执行时,都要等很久才能返回结果,为了分析其性能,应从以下哪个日志下手检查(  慢查询日志)
MySQL的事务包含以下哪些特性(  隔离性,持久性,原子性,一致性)
对数据库有哪些权限设置( CREATE,SELECT,INSERT,UPDATE )
MySQL的事务隔离包括4种级别:读未提交、读提交、可重复读、可串行化(正确)
MySQL数据库中,将权限设为localhost,可允许所有ip访问(  错误)
使用MySQL自带的MYSQLDUMP备份工具,可以在业务不中断时,把表结构和数据从表中备份出来,生成SQL语句的文件(  正确)
数据库恢复的基础是利用转储的冗余数据(  正确)
MySQL数据库中,错误日志默认开启,可手动禁用(  错误)



第7单元
在PowerDesigner工具中,可根据概念模型生成物理模型(正确)
概念模型是对真实数据库的描述。数据库中的一些对象包括:表、视图、字段、数据类型、长度、主键、外键、索引等(错误)
物理模型是对现实世界中问题域内的事物的描述,其常用表示形式为“实体-关系”图。(错误)
在以下哪种程序结构中,不适合进行数据库连接操作(循环)
PHP中,以下哪个函数,用于将MySQL结果集返回到数组中(mysqli_fetch_array())
若数据库连接用完后,不使用mysqli_close()函数关闭连接,则会造成连接无法释放(正确)
在开发PHP网站页面时,应尽可能分离PHP后端代码和HTML前端代码到不用文件中(正确)
在HTML页面文件中,无法添加PHP动态代码(错误)
为了保证各页面格调统一并增强页面的可维护性,应在各页面中使用引用语句来包含相同效果的展示代码,如header、footer等(正确)
PHP中,以下哪个函数,用于将MySQL结果集返回到数组中( mysqli_fetch_array() )
PHP中,以下哪个函数,用于实现与MySQL数据库的连接( mysqli_connect() )
CDM是指以下哪种模型( 概念数据模型 )
实体与实体之间的联系包括以下哪几种(  多对多,一对一,一对多 )
以下哪些工具都可以操作MySQL数据库(  Navicat,phpMyAdmin,Workbench )
物理模型是对现实世界中问题域内的事物的描述,其常用表示形式为“实体-关系”图( 错误 )
概念模型是对真实数据库的描述。数据库中的一些对象包括:表、视图、字段、数据类型、长度、主键、外键、索引等。(  错误 )
利用PowerDesigner工具可将概念模型生成物理模型。( 正确 )
若数据库连接用完后,不使用mysqli_close()函数关闭连接,则会造成连接无法释放(  正确 )
为了保证各页面格调统一并增强页面的可维护性,应在各页面中使用引用语句来包含相同效果的展示代码,如header、footer等(  正确 )
在PowerDesigner工具中,可根据概念模型生成物理模型(对)
概念模型是对真实数据库的描述。数据库中的一些对象包括:表、视图、字段、数据类型、长度、主键、外键、索引等(错)
物理模型是对现实世界中问题域内的事物的描述,其常用表示形式为“实体-关系”图。(错)
在以下哪种程序结构中,不适合进行数据库连接操作(循环)
PHP中,以下哪个函数,用于将MySQL结果集返回到数组中【mysqli_fetch_array()】
若数据库连接用完后,不使用mysqli_close()函数关闭连接,则会造成连接无法释放(正确)
在开发PHP网站页面时,应尽可能分离PHP后端代码和HTML前端代码到不用文件中(正确)
在HTML页面文件中,无法添加PHP动态代码(错误)
为了保证各页面格调统一并增强页面的可维护性,应在各页面中使用引用语句来包含相同效果的展示代码,如header、footer等(正确)
第二单元作业
1.单表查询(每小题5分,总计15分)
(1)查询表t_student中所有学生的信息。

use db_studdent;
select * from t_student;
(2)查询t_course表中学分在1至3分之间的课程信息。

使用in的方法
select * from t_course where course_creait in (1,2,3);
使用between and的方法
select * from t_course where course_credit between 1 and 3;
(3)在数据表t_major中统计出不同的专业个数。
COUNT(*) 函数返回表中的记录数:
select count(*) from t_major;
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
select count(major_name) from t_major;
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
select count(distinct major_name) from t_major;
2.多表查询(每小题5分,总计15分)

(1)查询“云计算技术”专业的学生信息。
(1)创建表 t_student(学生)字段名称数据类型字段名称数据类型
思路:因为这两张表的相同字段是major_id,先获取到“云计算技术”的major_id,再通过major_id去筛选表t_student里面的数据:
select * from t_student where major_id=(select major_id where major_name="云计算技术")

(2)利用左外连接查询在t_student中有基本的学生信息但在t_score中却没有成绩信息的学生情况。
select a.* ,b.* from t_student a left join t_score b on a.stu_id=b.stu_id;
(3)利用IN子查询“移动互联应用开发”这门课程的成绩信息。

思路:选择显示结果为所有来自t_score表中的数据:

select t_score.* from t_score where score_name in (select * from t_score where major_name="移动互联应用开发");

3.数据表的增删改(每小题5分,总计15分)

(1)在表t_student中插入一条新的记录:stu_id:1831621103,stu_name:王明,stu_sex:女,stu_birthday:2003-07-01,stu_telephone:13983772010,major_id:31607。
答案:
insert into t_student stu_id,stu_name,stu_sex,stu_birthday,stu_telephone,major_id values("1831621103","王明","女","2003-07-01","13983772010","31607");

(2)在表t_student中将stu_name为“王洪”的major_id改为“31601”.
答案:
update t_student set major_id="31601" where stu_name="王洪";

(3)删除表t_student中stu_birthday为“1999-01-01”之前的所有记录。
答案:
在没有主键外键的时候是:
delect * from t_student where stu_birhday<="1999/01/01";
当有主键外键关联时,需要把主键或者外键删除,并且需把索引删除之后在进行数据的删除。
第三单元
1.单表查询(每小题5分,总计15分)
(1)查询表t_student中所有学生的信息。

use db_studdent;
select * from t_student;
(2)查询t_course表中学分在1至3分之间的课程信息。

使用in的方法
select * from t_course where course_creait in (1,2,3);
使用between and的方法
select * from t_course where course_credit between 1 and 3;
(3)在数据表t_major中统计出不同的专业个数。
COUNT(*) 函数返回表中的记录数:
select count(*) from t_major;
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
select count(major_name) from t_major;
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
select count(distinct major_name) from t_major;
2.多表查询(每小题5分,总计15分)

(1)查询“云计算技术”专业的学生信息。
(1)创建表 t_student(学生)字段名称数据类型字段名称数据类型
思路:因为这两张表的相同字段是major_id,先获取到“云计算技术”的major_id,再通过major_id去筛选表t_student里面的数据:
select * from t_student where major_id=(select major_id where major_name="云计算技术")

(2)利用左外连接查询在t_student中有基本的学生信息但在t_score中却没有成绩信息的学生情况。
select a.* ,b.* from t_student a left join t_score b on a.stu_id=b.stu_id;
(3)利用IN子查询“移动互联应用开发”这门课程的成绩信息。

思路:选择显示结果为所有来自t_score表中的数据:

select t_score.* from t_score where score_name in (select * from t_score where major_name="移动互联应用开发");

3.数据表的增删改(每小题5分,总计15分)

(1)在表t_student中插入一条新的记录:stu_id:1831621103,stu_name:王明,stu_sex:女,stu_birthday:2003-07-01,stu_telephone:13983772010,major_id:31607。
答案:
insert into t_student stu_id,stu_name,stu_sex,stu_birthday,stu_telephone,major_id values("1831621103","王明","女","2003-07-01","13983772010","31607");

(2)在表t_student中将stu_name为“王洪”的major_id改为“31601”.
答案:
update t_student set major_id="31601" where stu_name="王洪";

(3)删除表t_student中stu_birthday为“1999-01-01”之前的所有记录。
答案:
在没有主键外键的时候是:
delete * from t_student where stu_birhday<="1999/01/01";
当有主键外键关联时,需要把主键或者外键删除,并且需把索引删除之后在进行数据的删除。
单元4作业(总计20分)

作业要求:只需在作业中直接写出SQL语句即可,答题时务必写上题目编号。

1.创建索引(每小时5分,总计10分)

(1)用CREATE INDEX方法在已经创建好的表 t_student为其字段名 stu_id 创建普通降序索引。
方法一:
create index index_id on  t_student(stu_id desc);
方法二:
alter table t_student add index index_id(stu_id desc);

(2)创建表 t_teacher1,与 t_teacher 结构一致(不能复制表结构),在创建表的过程中创建索引,为 teacher_id 创建一个唯一升序索引。

create table t_teacher1(
teacher_id varchar(10),
unique index 
index_name(teacher_id asc)
);

2.创建视图(每小时5分,总计10分)

(1)建一个视图view_req_course,数据为必修课的课程信息。
create view view_req_course 
as
select * from <必修课表>
where <condition>;

注释<必修课表>:为必修课的课程表
<condition>:为选择的条件
(2)建一个视图view_optional,数据来源于女同学选修的课程信息。
create view view_optional
as
select * from <选修课程信息>
where <condition>;

注释<必修课表>:为必修课的课程表
<condition>:为选择的条件 [reader_sex="女"]

第五单元

1.创建存储过程(第小题5分,总计15分)

(1)创建一个存储过程,查询女同学选修的课程信息。

#创建学生表

create table st_table(

   id int auto_increment primary key,

   name varchar(10),

   sex varchar(1)

);

#创建学生选修课信息表

create table course_table(

   id int,

   course1 varchar(20) default null,

   course2 varchar(20) default null,

   course3 varchar(20) default null,

   course4 varchar(20) default null,

   course5 varchar(20) default null,

   course6 varchar(20) default null,

   course7 varchar(20) default null,

   course8 varchar(20) default null,

   course9 varchar(20) default null,

   course10 varchar(20) default null

);

#添加外键

alter table course_table add constraint fk_id foreign key(id) references st_table(id);



#向学生表里面插入数据

insert into st_table(name,sex)

values('张三','男'),

('李四','男'),

('小倩','女'),

('小青','女');

#学生选修课里面插入信息

insert into course_table(id,course1,course2) values(1,'搬砖',null),(2,'手劈榴莲',null),(3,'奶茶',null),(4,'手摇奶茶','手摇咖啡');


delimiter $

create procedure check_sex()

comment '学生名选修课信息'

   begin

   select * from(

   select a.name,a.sex,b.course1,b.course2,b.course3,b.course4,b.course5,b.course6,b.course7,b.course8,b.course9,b.course10 from

   st_table a left outer join course_table b on a.id=b.id) c#作为一个新的多表联合查询的派生表,必须要有一个别名

   where c.sex=st_sex;

end $

delimiter ;


#查看女学生的选修课信息

call check_sex();


#需要注意的是,这两个表里面时有同字段名字的存在(id),所以在选择显示的时候应该区分a表的id与b表的id

#(如果字段是不一样的则可以使用select *来进行简写)

#使用到的左外连接:select * from st_table a left outer join course_table b on a.id=b.id;

(2)创建一个带输入参数的存储过程,输入t_course表中某个老师的姓名,输出该老师讲授的课程course_id与course_name。

一个老师按实际生活中是可以进行多个选修课的教学的

#创建一个教师表

create table t_t(

   id int auto_increment primary key,

   name varchar(20)

);

#创建一个t_course表

create table t_course(

   id int,

   name varchar(20),

   course_id int,

   course_name varchar(20)

);

#添加外键

alter table t_course add constraint fk_tid foreign key(id) references t_t(id);

#插入教师的信息

insert t_t(name) values('张三'),('李四');

#插入教师的授课信息

insert t_course values(1,'张三',101,'手摇奶茶'),

(1,'张三',102,'脚摇奶茶'),

(2,'李四',103,'手摇榴莲'),

(2,'李四',104,'脚摇榴莲');


#创建带一个输入参数的存储过程

delimiter $

create procedure t_check(in t_name varchar(20))

begin

select course_id,course_name from t_course where name=t_name;

end $

delimiter ;

call t_check('张三');

(3)创建一个带输出参数的存储过程,输出教师的总人数。

# 创建一个教师表

create table t_k(

   id int auto_increment primary key,

   name varchar(20)

);

#插入教师的信息

insert t_k(name) values('张三'),('李四');

#创建带一个输出参数的存储过程

delimiter $

create procedure c_check(out ccheck int)

begin

   # declare ccheck int default 0;

   set ccheck=(select count(*) from t_k);

end $

delimiter ;

#通过传入一个变量来接受输出参数

call c_check(@ccheck);

#查看变量被赋值多少

select @ccheck;

2.创建触发器(第小题5分,总计15分)

(1)创建Insert触发器,每向t_student中插入一条记录后,则向t_log(tname,logtime)表中插入该表的表名t_student和插入的时间。

#创建t_student表

create table t_student(id int,name varchar(20));

#测试插入数据

insert into t_student values(1,'张三'),(2,'李四');

#创建t_log表

create table t_log(tname varchar(30),logtime datetime);

#创建爱你触发器

delimiter $

create trigger luichun

after insert

on t_student for each row

begin

   insert into t_log(tname,logtime) values('t_student',now());

end $

delimiter ;

#测试插入

insert into t_student values(3,'张三'),(4,'李四');

(2)创建一个t_course表的更新触发器,当更新t_course表中某一条记录后,分别查看更新前后的课程名称。

#创建t_course表

create table t_course(id int auto_increment primary key,course varchar(20));

#向表内插入数据

insert into t_course values(1,'手摇奶茶'),(2,'手摇榴莲');

#更新测试

update t_course set course='手摇开水' where id='1';


#创建触发器

delimiter $

create trigger luichun1

after update

on t_course for each row

begin

   set @oldcourse=old.course;

   set @newcourse=new.course;

   select old.course into @oldcourse;

   select new.course into @newcourse;

end $

delimiter ;

#查看更新前后课程名称

select @oldcourse,@newcourse;

(3)创建一个delete触发器,删除t_student表中的数据时,将对应的t_score表中的数据删除。

#t_student表的创建

create table t_student(

   id int auto_increment primary key,

   name varchar(20)

);

#创建t_score表

create table t_score(

   id int,

   name varchar(20)

);

#创建外键

alter table t_score add constraint fk_score_id foreign key(id) references t_student(id);


#创建触发器

delimiter $

create trigger luichun2

before delete

on t_student for each row

begin

   delete  from t_score where t_score.id=old.id;

end $

delimiter ;

#插入数据

insert into t_student(id,name) values(1,'张三'),(2,'李四');

insert into t_score(id,name) values(1,'100'),(2,'200');

#删除数据

delete from t_student where id='1';

#删除触发器

drop trigger luichun2;