相关推荐recommended
《MySQL数据库原理、设计与应用》课后习题及答案 黑马程序员编著
作者:mmseoamin日期:2023-12-19

《MySQL数据库原理、设计与应用》课后习题及答案 黑马程序员编著

答案有文档形式,但是csdn必须要下载,,需要的人就去那里下载吧。《MySQL数据库原理、设计与应用》课后习题及答案黑马程序员编著

第1章

一、 填空题

1.关系型数据库的标准语言是_SQL_。

2.数据库发展的3个阶段中,数据独立性最高的是_数据库系统_阶段。

3.概念模型中的3种基本联系分别是一对一_、一对多多对多

4.MySQL配置文件的文件名是_my.ini 或 my.cnf_。

5.在MySQL配置文件中,_datadir_用于指定数据库文件的保存目录。

二、 判断题

1.数据只包括普通意义上的数字和文字。(错)

2.关系模型的数据结构是二维表。( 对 )

3.概念模式是对数据库的整体逻辑结构的描述。( 对)

4.数据冗余度高是数据库系统的特点之一。( 错 )

5.SQL是指标准化查询语言。(错 )

三、 选择题

1.三级模式是对( C)的三个抽象级别。

 A. 数据库系统 B. 数据库 C. 数据 D. 数据库管理系统

2.数据的独立性包括( A、B )。

 A. 物理独立性 B. 逻辑独立性 C. 用户独立性 D. 程序独立性

3.数据库的完整性是指数据的( A、B、C )。

 A. 正确性 B. 一致性 C.相容性 D. 安全性

4.下列选项中,不属于DDL语句的是( D )。

 A. CREATE语句 B. ALTER语句 C. DROP语句 D. SELECT语句

5.下列选项中,哪个是MySQL默认提供的用户( C )。

 A. admin B. test C.root D. user

四、 简答题

1.请简述什么是数据模型。

  答:数据模型是数据库系统的核心和基础,它是对现实世界数据特征的抽象,用来描述数据,可以理解成一种数据结构。在数据库的发展过程中,出现了3种基本数据模型,分别是层次模型(Hierarchical Model)、网状模型(Network Model)和关系模型(Relational Model)。

2.请简述数据库、表和数据库服务器之间的关系。

 答:一个数据库服务器可以管理多个数据库,通常情况下开发人员会针对每个应用创建一个数据库,为保存应用中实体的数据,会在数据库中创建多个表(用于存储和描述数据的逻辑结构),每个表都记录着实体的相关信息。

第2章

一、 填空题

1.添加___IF NOT EXISTS___可在创建的数据库已存在时防止程序报错。

2.MySQL提供的___SHOW CREATE DATABASE 数据库名称;___可查看指定数据库的创建信息。

3.___#–___可在MySQL中添加注释内容,且在服务器运行时会被忽略。

4.语句__RENAME TABLE__可同时修改多个数据表名。

5.查询数据时,通配符___*__可表示数据表中的所有字段。

二、 判断题

1.临时表仅在当前会话可见,会话关闭时会自动删除。(对 )

2.仅修改数据表中的字段名称时,通常使用ALTER TABLE…MODIFY实现。( 错)

3.修改数据时若未带WHERE条件,则表中对应字段都会被改为统一的值。( 对 )

4.数据库目录中的db.opt用于保存该数据库下的所有数据表信息。( 错 )

5.插入数据前必须使用USE选择操作的数据库。( 错)

三、 选择题

1.下列选项中,( C )语句可查看数据表的创建时间。

 A.SHOW TABLES B.DESC 数据表名

 C.SHOW TABLE STATUS D.SHOW CREATE TABLE 数据表名

2.若数据库中存在以下数据表,语句“SHOW TABLES LIKE ‘sh_’”的结果为( C )。

 A.fish B.mydb C.she D. unshift

3.下面语法不能实现新增数据的是( D )。

 A.INSERT 表名 VALUE(值列表)

 B.INSERT INTO 表名 VALUE(值列表)

 C.INSERT INTO 表名 VALUES(值列表)

 D.INSERT INTO 表名(值列表)

4.语句( A )可以删除数据表中指定条件的数据。

 A.DELETE B. DROP C.ALTER TABLE D. 以上答案全部正确

5.语句ALTER TABLE…MODIFY添加( B)可将字段调整为数据表的第1个字段。

 A.FIRST 字段名 B. FIRST C.AFTER 字段名 D. AFTER

四、 实训题

1.按下列表结构,利用SQL语句在mydb数据库中创建topic表。

字段名数据类型备注
idINT专题编号
titleVARCHAR(255)专题名称
introVARCHAR(255)专题介绍
start_timeINT专题开始时间
end_timeINT专题结束时间
创建数据表的SQL语句
CREATE TABLE topic(
	id INT                     COMMENT '专题编号',
	title VARCHAR(255)         COMMENT '专题名称',
	intro VARCHAR(255)         COMMENT '专题介绍',
	start_time INT(11)         COMMENT '专题开始时间',
	end_time INT(11)           COMMENT '专题结束时间'
)DEFAULT CHARSET=utf8;

2.为mydb.goods表新增total(库存量)和add_time(发布时间)字段。

ALTER TABLE goods ADD (total INT,addtime INT);

第3章

一、 填空题

1.MySQL数据类型中存储整数数值并且占用字节数最小的是___TINYINT___。

2.数据表中字段的唯一性约束是通过__UNIQUE____关键字定义的。

3.设置数据表的字段值自动增加使用__AUTO_INCREMENT____属性。

4.在创建表时不允许某列为空,则可以使用__NOT NULL或PRIMARY KEY__约束。

5.使用INT类型保存数字1占用的字节数为___4___。

二、 判断题

1.一个数据表中可以定义多个主键。(错 )

2.一个数据表中可以定义多个非空字段。(对 )

3 .非空约束指的是字段的值不能为空字符串。( 错 )

4.TEXT类型存储的最大字节数为65535。(对 )

5.ENUM类型的数据只能从枚举列表中取,并且只能取一个。(对 )

三、 选择题

1.下列选项中,用于存储整数数值的是( C)。

A. FLOAT B. DOUBLE C. MEDIUMINT D. VARCHAR

2.下列选项中,适合存储文章内容或评论的数据类型是( C)。

A. CHAR B. VARCHAR C.TEXT D. VARBINARY

3.下列选项中,表示日期和时间的数据类型是(BCD )。

A. DECIMAL(6, 2) B. DATE C. YEAR D. TIMESTAMP

4.下面关于DECIMAL(6, 2)的说法中,正确的是(B )。

A. 它不可以存储小数

B. 6表示数据的长度,2表示小数点后的长度

C. 6表示最多的整数位数,2表示小数点后的长度

D. 总共允许最多存储8位数字

5.下列关于主键的说法中,正确的是(D )。

A. 主键允许为NULL值

B. 主键允许有重复值

C. 主键必须来自于另一个表中的值

D. 主键具有非空性,唯一性

四、 简答题

1. 请简述ENUM和SET数据类型的区别。

答:

(1)ENUM只能选一个值保存,SET可以选多个值保存。

(2)SET可以什么值都不选,ENUM必须选择一个值。

(3)ENUM的列表最多可以有65535个值,SET类型的列表最多可以有64个值。

2. 请简述CHAR、VARCHAR和TEXT数据类型的区别。

(1)CHAR是定长存储方式,适合保存长度固定的字符穿。

(2)VARCHAR是变长存储方式,适合保存长度不定的字符串。

(3)TEXT不能设置长度,速度比CHAR和VARCHAR慢,适合保存不经常查询的文本。

(4)TEXT类型不能设置默认值。

五、 实训题

1. 请设计一张学生表,选择合理的数据类型保存学号、姓名、性别、出生日期、入学日期、家庭住址信息。

CREATE TABLE mydb.student (
  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
  name VARCHAR(20) NOT NULL COMMENT '姓名',
gender ENUM('男', '女') NOT NULL COMMENT '性别',
  birth_date DATE NOT NULL COMMENT '出生日期',
  start_date DATE NOT NULL COMMENT '入学日期',
  address VARCHAR(255) NOT NULL DEFAULT '' COMMENT '家庭住址'
) DEFAULT CHARSET=utf8;

2. 请设计一张留言表,用于保存网站留言板中游客发表的留言。

CREATE TABLE mydb.commet (
  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '留言id',
  name VARCHAR(20) NOT NULL COMMENT '姓名',
  CONTENT TEXT NOT NULL COMMENT '留言内容',
  ip VARCHAR(15) NOT NULL DEFAULT '' COMMENT 'IP地址',
  add_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '发表时间'
) DEFAULT CHARSET=utf8;

第4章

一、 填空题

  1. 在E-R图中,实体使用__矩形____图形来表示。

  2. 实体所具有的某一特征称为实体的___属性___。

  3. 将E-R图转换到关系模式时,实体与联系都可以表示成__关系____。

  4. 设计数据库的存储结构属于数据库设计的____物理设计__阶段。

  5. 在E-R图中的联系可以与___一个或多个___个实体有关。

二、 判断题

  1. 数据的逻辑结构具体反映数据在计算机中的存储方式。(错 )

  2. 数据库正式投入运行标志着数据库运行和维护工作的开始。( 对)

  3. 在关系模型中,同一表中的不同属性命名可以相同。( 错)

  4. 消除了部分函数依赖的1NF的关系模式,必定是2NF。( 对)

  5. 任何由两个属性组成的关系不可能是3NF。( 错)

三、 选择题

  1. 绘制E-R图的3个基本要素是( B)。

A. 实体、属性、关键字 B. 属性、实体、联系

C. 属性、数据类型、实体 D. 约束、属性、实体

  1. 绘制E-R图属于数据库设计的(B )阶段。

A. 需求分析 B. 概念数据库设计

C. 逻辑数据库设计 D. 物理数据库设计

  1. 将E-R图转换为数据模型属于数据库设计的( C)阶段。

A. 数据库实施 B. 概念数据库设计

C. 逻辑数据库设计 D. 物理数据库设计

  1. 数据冗余可能会引起的问题有( B、C、D)。

A. 读取异常 B. 更新异常 C. 插入异常 D. 删除异常

  1. 下列关于数据库范式说法正确的是(B、C )。

A. 1NF遵从原子性和唯一性,且字段不可再分

B. 2NF要求非主键字段需要依赖主键

C. 3NF要求非主键字段不能相互依赖

D. 各个范式之间互不依赖,只需满足当前范式的要求即可

四、 简答题

1. 请简述数据库设计规范化的必要性。

答:数据库设计对数据的存储性能、数据的操作都有很大的关系。为了避免不规范的数据库出现数据冗余,造成插入、删除、更新操作异常等情况,就要进行数据库设计规范化。

2. 请分析数据库范式1NF、2NF、3NF的区别。

答:

(1)1NF:数据库表的每一列都是不可分割的基本数据项。

(2)2NF:在满足1NF基础上,遵从唯一性,非主键字段需完全依赖主键

(3)3NF:在满足2NF基础上,非主键字段不能相互依赖。

五、 实训题

1. 请完成电子商务网站用户等级的数据表设计。

CREATE TABLE sh_user_level (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '等级id',
name VARCHAR(20) NOT NULL DEFAULT '' COMMENT '等级名称',
config VARCHAR(255) NOT NULL DEFAULT '' COMMENT '满足条件'
) DEFAULT CHARSET=utf8;

2. 请完成电子商务网站用户订阅、用户收藏的数据表设计。

# 订阅
CREATE TABLE sh_user_subscribe (
  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '订阅id',
email VARCHAR(60) COMMENT '邮箱地址',
status INT COMMENT '是否确认,0未确认,1已确认',
code VARCHAR(10) COMMENT '邮箱确认的验证码',
add_time INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '开始订阅时间'
) DEFAULT CHARSET=utf8;
# 收藏
CREATE TABLE sh_user_favorite (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '收藏id',
  user_id INT UNSIGNED NOT NULL COMMENT '用户id',
  goods_id INT UNSIGNED NOT NULL COMMENT '商品id',
  add_time INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '收藏时间'
) DEFAULT CHARSET=utf8;

第5章

一、 填空题

  1. 多数据插入时,VALUE后的多个值列表之间使用____逗号或,__分割。

  2. “LIMIT 2,2”表示从第___3___条记录开始,最多获取2条记录。

  3. 表达式___FLOOR(3+RAND()*(11-3+1))或FLOOR(3+RAND()*9)___用于获取大于等于3且小于等于11之间的随机数。

  4. MySQL的除法运算中,除数为0的执行结果为__NULL____。

  5. 在INSERT语句中添加___ON DUPLICATE KEY___可在主键冲突时,利用更新的方式完成数据的插入。

二、 判断题

  1. 查询数据时,默认根据ORDER BY指定的字段进行降序排序。( 错 )

  2. UPDATE更新数据时可以通过LIMIT限制更新的记录数。(对 )

  3. “LIMIT 3”中的3表示偏移量,用于设置从哪条记录开始。( 错)

  4. 使用SELECT查看表达式“NOT 2 + !3”的执行结果为0。(对 )

  5. 对于分组数据的排序,只需在分组字段后添加ASC或DESC即可。( 对 )

三、 选择题

  1. 下面关于插入数据的语法错误的是( D)。

A.INSERT INTO 表 VALUE(值列表);

B.INSERT 表 SET 字段1=值1[,字段2=值2]…;

C.INSERT INTO 表1(字段列表) SELECT (字段列表) FROM 表2;

D.INSERT INTO 表1(字段列表) VALUES SELECT (字段列表) FROM 表2;

  1. 下列选项中与“WHERE (id,price)=(3,1999)”功能相同的是( B)。

A.WHERE id=3 || price=1999 B.WHERE id=3 && price=1999

C.WHERE (id,price)<>(3,1999) D.以上选项都不正确

  1. 以下可以用于比较运算的函数是( D)。

A.RAND() B.POW() C.CEIL() D.IN()

  1. 以下运算符中,优先级别最高的是( A )。

A.-(负号) B.-(减运算符)

C.=(赋值运算符) D.=(比较运算符)

  1. 下面关于分组的说法错误的是(C)。

A.SELECT语句中ORDER BY不能与回溯统计同时使用。

B.利用ANY_VALUE()可使分组统计后默认只保留每组中的第一条记录。

C.分组后的数据筛选可以使用WHERE或HAVING实现。

D.分组操作默认按分组字段(中文除外)升序排序。

四、 简答题

1. 请简述DELETE与TRUNCATE的区别。

答:

①实现方式不同:TRUNCATE本质上先执行删除(DROP)数据表的操作,然后再根据有效的表结构文件(.frm)重新创建数据表的方式来实现数据清空操作。而DELETE语句则是逐条的删除数据表中保存的记录。

②执行效率不同:在针对大型数据表(如千万级的数据记录)时,TRUNCATE清空数据的实现方式,决定了它比DELETE语句删除数据的方式执行效率更高。

③对AUTO_INCREMENT的字段影响不同,TRUNCATE清空数据后,再次向表中添加数据,自动增长字段会从默认的初始值重新开始,而使用DELETE语句删除表中的记录时,则不影响自动增长值。

④删除数据的范围不同:TRUNCATE语句只能用于清空表中的所有记录,而DELETE语句可通过WHERE指定删除满足条件的部分记录。

⑤返回值含义不同:TRUNCATE操作的返回值一般是无意义的,而DELETE语句则会返回符合条件被删除的记录数。

⑥所属SQL语言的不同组成部分:DELETE语句属于DML数据操作语句,而TRUNCATE通常被认为是DDL数据定义语句。

2. 请简述WHERE与HAVING之间的区别。

答:

①WHERE操作是从数据表中获取数据,用于将数据从磁盘存储到内存中,而HAVING是对已存放到内存中的数据进行操作。

②HAVING位于GROUP BY子句后,而WHERE位于GROUP BY 子句之前。

③HAVING关键字后可以跟聚合函数,而WHERE则不可以。通常情况下,HAVING关键字与GROUP BY一起使用,对分组后的结果进行过滤。

五、 实训题

1. 依据sh_goods的结构与数据,在mydb数据库中创建一张tm_goods表,并将价格在20到50之间的商品价格减5元,库存量再新增300件。

# 第1步:依据sh_goods创建相同的表结构
mysql> CREATE  TABLE  mydb.mt_goods LIKE shop.sh_goods;
Query OK, 0 rows affected (0.07 sec)
# 第2步:依据sh_goods表中的数据,为tm_goods添加数据
mysql> INSERT INTO mydb.mt_goods SELECT * FROM shop.sh_goods;
Query OK, 10 rows affected (0.01 sec)
Records: 10  Duplicates: 0  Warnings: 0
# 第3步:将价格在20到50之间的商品价格减5元,库存量再新增300件
mysql> UPDATE mydb.tm_goods SET price=price-5, stock=stock+300
    -> WHERE price BETWEEN 20 AND 50;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

2. 在sh_goods表中查询评分小于4的商品的不同分类id。

mysql> SELECT DISTINCT category_id FROM sh_goods
    -> WHERE score < 4;
+-------------+
| category_id |
+-------------+
|           3 |
|          12 |
|           9 |
+-------------+
3 rows in set (0.00 sec)

第6章

一、 填空题

  1. 带有__ANY____关键字的子查询只要查询结果中有一个符合要求就返回真。

  2. 子查询根据位置的不同可分为WHERE子查询和___FROM子查询___。

  3. 含有5个字段的商品表(3条记录)与含有2个字段的分类表(4条记录)交叉连接查询后记录的总数为___12___。

  4. ___内连接___查询在不设置连接条件时与交叉连接等价。

  5. 在行子查询中表达式(a, b) <> (x, y)等价于含有逻辑运算符的___(a<>x)OR(b<>y)___。

二、 判断题

  1. 在表结构中,含有外键约束的表称为主表。( 错)

  2. WHERE的指定条件只要符合SOME子查询结果中的任何一个都表示成立。( 对 )

  3. 目前只有InnoDB引擎类型支持外键约束。( 对 )

  4. 默认情况下,联合查询会去除完全重复的记录。(对 )

  5. 建立外键约束的主表和从表数据类型必须完全相同。( 错 )

三、 选择题

  1. 下列不属于WHERE子查询的是(D )。

A.标量子查询 B.列子查询 C.行子查询 D.表子查询

  1. 添加外键约束时,设置( B )可同步更新主表和从表对应的记录。

A.ON UPDATE RESTRICT B.ON UPDATE CASCADE

C.ON UPDATE SET NULL D.以上答案都不正确

  1. 以下连接查询中,( C)仅会保留符合条件的记录。

A.左外连接 B.右外连接 C.内连接 D.自然连接

  1. 下列选项中数据FROM子查询的是( B )。

A.EXISTS子查询 B.表子查询 C.行子查询 D.以上答案都不正确

  1. 下面关于外键约束的说法错误的是( B )。

A.只有InnoDB存储引擎的数据表才支持外键约束

B.默认情况下,主表记录修改的同时修改从表的记录

C.从表外键字段插入的值必须选取主表中相关联字段已经存在的数据

D.默认情况下,从表含有关联记录则拒绝删除主表记录

四、 实训题

1. 结合本章出现的所有数据表,获取含有基本信息属性的商品id和name。

mysql> SELECT DISTINCT g.id,g.name FROM sh_goods g
    -> LEFT JOIN sh_goods_attr_value ga ON g.id= ga.goods_id
    -> LEFT JOIN sh_goods_attr a ON ga.attr_id= a.id
    -> WHERE ga.attr_id IN(SELECT id FROM sh_goods_attr 
    -> WHERE parent_id = (SELECT id FROM sh_goods_attr WHERE name="基本信息"));
+----+---------+
| id | name    |
+----+---------+
|  5 | 智能手机 |
+----+---------+
1 row in set (0.00 sec)

2. 结合本章出现的所有数据表,查询属性不小于两个的商品信息(编号和名称)。

mysql> SELECT id, name FROM sh_goods WHERE id IN
    -> (SELECT goods_id FROM sh_goods_attr_value GROUP BY goods_id
    -> HAVING COUNT(id) >= 2);
+----+----------+
| id | name     |
+----+----------+
|  5 | 智能手机   |
+----+----------+
1 row in set (0.00 sec)

第7章

一、 填空题

  1. 函数__CURRENT_USER()___可获取通过MySQL服务器验证的账户。

  2. MySQL提供的___FLUSH PRIVILEGES__可用于刷新用户权限。

  3. 在mysql数据库中,列权限的所有信息存储在___columns_priv___表中。

  4. 在mysql.user表中___HostUser___用于区分MySQL中的用户。

  5. 语句___SHOW GRANTS FOR 账户___可以查看指定用户的权限。

二、 判断题

  1. GRANT创建用户时使用IF NOT EXISTS可避免用户存在而出错。( 错 )

  2. 授权时ALL PRIVILEGES包括为其他用户授予权限的特权。(错 )

  3. mysql.user表用于保存全局级别的权限。( 对 )

  4. ‘test’@‘127.0.0.1’中的IP地址’127.0.0.1’ 表示远程主机。( 错 )

  5. root用户密码丢失后不能再找回,只能重新安装MySQL。( 错)

三、 选择题

  1. 下列选项中可以重置用户密码的是( A )。

A.ALTER USER B.RENAME USER C.CREATE USER D. DROP UESR

  1. 以下不属于ALL PRIVILEGES的权限是( A )。

A.PROXY B.SELECT C.CREATE USER D. DROP

  1. 下列mysql数据库中用于保存用户名和密码的表是( D )。

A.tables_priv B.columns_priv C.db D. user

  1. 以下账户命名错误的是( C)。

A.‘’@‘’ B.‘ab c’@‘%’ C.mark-manager@% D. test@localhost

  1. 下列关于用户与权限的说法错误的是( D )。

A.具有空白用户名的帐户是匿名用户

B.通配符“%”和“_”都可以使用在用户的主机名中

C.REVOKE ALL回收的权限不包括GRANT OPTION

D.以上说法都不正确

四、 实训题

1. 请为用户名“xiaoming”密码“123abc”的用户授予查看shop数据库的权限。

# 第1步:创建用户
CREATE USER 'xiaoming'@'%' IDENTIFIED BY '123abc';
# 第2步:为用户授权
GRANT SELECT ON shop.* TO 'xiaoming'@'%';

2. 请创建“manager”用户并授予创建用户和删除用户的管理权限。

# 第1步:创建用户
CREATE USER 'manager'@'%' IDENTIFIED BY 'root';
# 第2步:为用户授权
GRANT CREATE USER ON *.* TO 'manager'@'%';

第8章

一、 填空题

  1. 视图是从一个或多个表中导出来的表,它的数据依赖于__基本表____。

  2. 在MySQL中,创建视图使用____CREATE VIEW__语句。

  3. 在MySQL中,删除视图使用___DROP VIEW___语句。

  4. 使用__SHOW CREATE TABLE____语句可以查看创建视图时的定义语句。

  5. 视图在数据库的三级模式中对应的是___外___模式。

二、 判断题

  1. 查看视图必须要有SHOW VIEW权限。( 对)

  2. CREATE OR REPLACE VIEW语句不会替换已经存在的视图。( 错)

  3. 视图中不能包含基本表中被定义为非空的列。(错 )

  4. 删除视图时,也会删除所对应基本表中的数据。(错 )

  5. DROP语句一次只能删除一个视图。(错)

三、 选择题

  1. 创建视图应当所具备的权限包括(A )。

A. CREATE VIEW B. USE VIEW

C. SHOW VIEW D. CREATE TABLE

  1. 下列选项中,用于查看视图的字段信息的语句是( A)。

A. DESCRIBE B. CREATE C. SHOW D. SELECT

  1. 下列选项中,可以对视图中数据的操作包括( BCD)。

A. 定义视图 B. 修改数据 C. 查看数据 D. 删除数据

  1. 下列关于视图优点的描述中,正确的是(ABCD )。

A. 实现了逻辑数据独立性

B. 提高安全性

C. 简化查询语句

D. 屏蔽真实表结构变化带来的影响

  1. 下列关于视图创建的说法中,正确的是(D )。

A. 可以建立在单表上

B. 可以建立在两张表基础上

C. 可以建立在两张或以上的表基础上

D. 以上都有可能

四、 简答题

1. 请简述视图和基本表的区别。

答:视图是从一个或多个表中导出来的表,它是一种虚拟存在的表,表的结构和数据都依赖于基本表。通过视图不仅可以看到存放在基本表中的数据,还可以像操作基本表一样,对数据进行查询、添加、修改和删除。

2. 请简述修改视图的两种方式,并写出其基本语法。

# ① 替换已有的视图
CREATE OR REPLACE VIEW 视图名 AS SELECT语句;
# ② 修改视图
ALTER VIEW 视图名 AS SELECT语句;

五、 实训题

1. 在shop数据库中创建view_goods视图,以spu为单位统计商品库存量。

CREATE OR REPLACE view_goods AS
SELECT spu_id, COUNT(stock) FROM sh_goods GROUP BY spu_id;

2. 在mydb数据库中创建student数据表,表中有id、name(学生姓名)、math(数学成绩)、chinese(语文成绩)和english(英语成绩) 字段。然后创建视图view_score,视图中包含math、chinese、english和total(总分数)字段。

USE mydb;
CREATE TABLE student (
  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT '学生id',
  name VARCHAR(20) NOT NULL DEFAULT '' COMMENT '学生姓名',
  math DECIMAL(4, 1) NOT NULL DEFAULT 0 COMMENT '数学成绩',
  chinese DECIMAL(4, 1) NOT NULL DEFAULT 0 COMMENT '语文成绩',
  english DECIMAL(4, 1) NOT NULL DEFAULT 0 COMMENT '英语成绩'
) DEFAULT CHARSET=utf8;
CREATE VIEW view_score AS
SELECT math, chinese, english, math+chinese+english total FROM student;

第9章

一、 填空题

  1. 事务是针对___数据库___的一组操作。

  2. 每个事务都是完整不可分割的最小单元是事务的____原子__性。

  3. 开启事务的语句是___START TRANSACTION___。

  4. 事务的自动提交通过____AUTOCOMMIT__变量来控制。

  5. 事务的4个隔离级别中性能最高的是__READ UNCOMMITTED____。

二、 判断题

  1. MySQL中默认操作是自动提交模式。(对 )

  2. 数据库的隔离级别越高,并发性能越低。(对 )

  3. 只有多条SQL语句才能组成事务。( 错)

  4. 已经提交的事务不能回滚。(对 )

  5. 事务执行时间越短,并发性能越高。(对 )

三、 选择题

  1. MySQL默认隔离级别为( C)。

A. READ UNCOMMITTED B. READ COMMITTED

C. REPEATABLE READ D. SERIALIZABLE

  1. 下列事务隔离级别中,可以避免脏读的有( BCD)。

A. READ UNCOMMITTED B. READ COMMITTED

C. REPEATABLE READ D. SERIALIZABLE

  1. 下列选项中会隐式提交事务的命令有( ABC)。

A.START TRANSACTION B. CREATE TABLE

C. ALTER TABLE D. SELECT

  1. 一个事务读取了另外一个事务未提交的数据,称为( B)。

A. 幻读 B. 脏读 C.不可重复读 D. 可串行化

  1. 下列关于MYSQL中事务的说法,错误的是( D)。

A. 事务就是针对数据库的一组操作

B. 事务中的语句要么都执行,要么都不执行

C. 事务提交后其中的操作才会生效

D. 提交事务的语句为SUBMIT

四、 简答题

1. 请简述什么是事务。

答:在MySQL中,事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,且每个SQL语句是相互依赖的。只要在程序执行过程中有一条SQL语句执行失败或发生错误,则其他语句都不会执行。也就是说,事务的执行要么成功,要么就返回到事务开始前的状态,这就保证了同一事务操作的同步性和数据的完整性。

2. 请简述什么是事务的ACID特性。

答:

①原子性是指一个事务必须被视为一个不可分割的最小工作单元。

②一致性是指在事务处理时,无论执行成功还是失败,都要保证数据库系统处于一致的状态,保证数据库系统从不返回到一个未处理的事务中。

③隔离性是指当一个事务在执行时,不会受到其他事务的影响。

④持久性是指事务一旦提交,其对数据库的修改就是永久性的。

五、 实训题

1. 请利用事务实现在用户下订单时,检查商品库存是否充足。

START TRANSACTION;
# 查询id为1的商品的库存
SELECT stock FROM sh_goods WHERE id = 1;
# 根据结果回滚或提交
COMMIT;

2. 请利用事务在用户下订单前,检测当前用户是否已被激活,若未激活,则需激活此用户后,才能再次下订单。

START TRANSACTION;
# 查询id为1的用户是否激活
SELECT is_active FROM sh_user WHERE id = 1;
# 根据结果回滚或提交
COMMIT;

第10章

一、 填空题

  1. 当前字符集为GBK时,函数LENGTH(‘美丽的jia’)的结果为__9____。

  2. 函数SUBSTRING(‘bread’,3)中的3表示截取的子串位置从__e___字母开始。

  3. MySQL用户定义的会话变量是由____@_ _变量名____组成的。

  4. MySQL中___REPEAT__循环语句会无条件执行一次语句列表。

  5. MySQL提供的____DELIMITER__可自定义新的语句结束符号。

二、 判断题

  1. ITERATE语句可以在BEGIN…END中实现语句跳转。( 错 )

  2. 对于所有用户来说,系统变量只能读取不能修改。( 错 )

  3. 只有OPEN打开游标后,查询结果才会存到MySQL服务器内存中。(对 )

  4. MySQL5.7提供的预处理功能可以将SQL语句与数据分离。( 对)

  5. 触发器的使用会影响数据库的结构,同时增加了维护的复杂程度。(对 )

三、 选择题

  1. 以下不能在MySQL中实现循环操作的语句是(A )。

A.CASE B.LOOP C.REPEAT D.WHILE

  1. 下列选项中,触发器不能触发的事件是(D )。

A.INSERT B.UPDATE C.DELETE D.SELECT

  1. 以下选项(D )可以在预处理语句中表示动态改变的数据。

A.* B._ C.: D.?

  1. 函数(C )可以在字符串book中获取字母o第一次出现的位置。

A.INSERT() B.FIND_IN_SET() C.INSTR() D.SUBSTRING()

  1. 下面(B )函数可以获取动态的实时时间。

A.NOW() B.SYSDATE()

C.CURRENT_TIMESTAMP() D.以上答案全正确

四、 简答题

1. 请简述存储过程和函数的区别。

答:

(1)语法中实现的标识符不同,存储过程使用PROCEDURE,函数为FUNCTION。

(2)存储过程在创建时没有返回值,而函数在定义时必须设置返回值。

(3)存储过程没有返回值类型,且不能将结果直接赋值给变量;而函数定义时需要设置返回值类型,且在调用时除在SELECT中,必须将返回值赋给变量。

(4)存储过程必须通过CALL进行调用,不能使用SELECT调用;而函数则可在SELECT语句中直接使用。

2. 请简述触发器的基本语法以及其作用。

答:

概念:触发器可以看作是一种特殊类型的存储过程,在预先定义好的事件(如INSERT、DELETE等操作)发生时,才会被MySQL自动调用。

作用:

① 触发器可以通过数据库中的相关表实现级联无痕更改操作。

② 保证数据安全,进行安全校验

五、 实训题

1. 请在shop数据库中创建一个存储过程,以订单编号为参数,输出该订单的商品信息。

mysql> DELIMITER $$
mysql> CREATE PROCEDURE shop.order_proc(IN order_id INT )
    -> BEGIN
    ->   SELECT g.id,g.name FROM sh_goods g
    ->   LEFT JOIN sh_order_goods og ON g.id = og.goods_id
    ->   WHERE og.order_id = order_id;
    -> END
    -> $$
Query OK, 0 rows affected (0.01 sec)
mysql> DELIMITER ;

2. 请在shop.sh_order_goods表上创建一个触发器,当添加订单-商品信息时,修改sh_goods表中对应商品的库存量。

mysql> DELIMITER $$
mysql> CREATE TRIGGER shop.insert_tri BEFORE INSERT ON sh_order_goods FOR EACH ROW
    -> BEGIN
    ->   DECLARE old_num INT DEFAULT 0;
    ->   SELECT stock INTO old_num FROM sh_goods WHERE id = new.goods_id;
    ->   IF old_num <= new.goods_num THEN
    ->     SET new.goods_num := old_num;
    ->     UPDATE sh_goods SET stock=0 WHERE id = new.goods_id;
    ->   ELSE
    ->     UPDATE sh_goods SET stock=old_num-new.goods_num WHERE id = new.goods_id;
    ->   END IF;
    -> END;
    -> $$
Query OK, 0 rows affected (0.01 sec)
mysql> DELIMITER ;

第11章

一、 填空题

  1. MySQL5.7中默认的存储引擎是_InnoDB____。

  2. 若索引是从左开始截取数据表中字段值的一部分内容,这种索引可以统称为_前缀索引___。

  3. InnoDB表在添加行级锁前,服务器必须添加_意向锁___。

  4. MySQL中分区技术不适用于___MERGE___、CSV和FEDERATED存储引擎。

  5. ____OPTIMIZE TABLE__语句可以整理MyISAM表中的数据碎片。

二、 判断题

  1. 一张InnoDB数据表有且仅能有一个聚簇索引。(对 )

  2. 同一张表的所有分区使用的存储引擎可以不同。( 错)

  3. 系统变量query_cache_type用于设置是否开启查询缓存。( 对 )

  4. MyISAM表比InnoDB表数据写入速度快。( 对)

  5. LOCK TABLE锁定的数据表会在会话结束后自动释放。( 对 )

三、 选择题

  1. next-key锁是由记录锁和( C)组成的。

A.表锁 B.意向锁 C.间隙锁 D.以上选项都不正确

  1. 下面关于索引的说法正确的是( C)。

A.重复值较高的字段适合创建普通索引

B.数据更新频繁的字段适合创建索引

C.存储空间较小的字段合适创建索引

D.以上说法全部正确

  1. 下列选项中,( A)可实现多版本并发控制功能。

A.InnoDB B.MyISAM C.MEMORY D.CSV

  1. 下面关于分区的描述错误的是( C )。

A.一张数据表最多仅可以创建1024个分区

B.分区名称不区分大小写

C.子分区算法可以是LIST、RANGE、HASH和KEY中的任意一种

D.以上说法都不正确

  1. 以下选项中,(D )用于设置单个查询缓存结果集占用的最小内存。

A.query_cache_limit B.query_cache_type

C.query_cache_size D.query_cache_min_res_unit

四、 简答题

1. 请说出MyISAM与InnoDB存储引擎至少5点区别。

答:

①InnoDB存储引擎支持外键,而MyISAM存储引擎不支持。

②InnoDB存储引擎支持行级锁和表级锁,而MyISAM存储引擎仅支持表级锁。

③InnoDB存储引擎支持事务,而MyISAM存储引擎不支持。

④InnoDB存储引擎支持多版本并发控制,而MyISAM存储引擎不支持

⑤InnoDB存储引擎的数据索引文件都保存一个表空间中(后缀为idb),而MyISAM存储引擎中的数据和索引文件分别存储到后缀为myd和myi的文件中。

⑥InnoDB存储引擎是索引组织表,而MyISAM存储引擎是堆表。

2. 请简述profile机制的意义以及使用场景。

答:

profile机制可用于分析SQL性能消耗的分布情况,当使用EXPLAIN无法积极查询缓慢的SQL语句时,可以使用profile机制对SQL进行更加细致的分析,获取SQL语句执行的更加详细的时间,找出SQL所花的时间大部分消耗在哪个部分,确认 SQL的性能瓶颈,从而指定相关的解决办法。

五、 实训题

1. 为shop. sh_order_goods数据表在order_id和goods_id字段上创建一个唯一性的复合索引。

mysql> ALTER TABLE shop.sh_order_goods
     -> ADD UNIQUE INDEX order_goods(order_id,goods_id);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

2. 创建一个与shop.sh_user表相同结构的数据表mydb.p_user,使用HASH算法将数据分到5个区中存储。

mysql> CREATE TABLE mydb.p_user LIKE shop.sh_user;
Query OK, 0 rows affected (0.06 sec)mysql> ALTER TABLE mydb.p_user PARTITION BY HASH(id)PARTITIONS 5;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

第12章

一、 填空题

  1. 在CentOS7.5中启动MySQL服务的命令是____systemctl start mysqld.service___。

  2. MySQL配置文件中关于服务器的配置写在_____[mysqld]___区段中。

  3. MySQL服务器默认字符集的配置是____character_set_server____。

  4. MySQL允许客户端最大同时连接数的配置是___max_connections___。

  5. MySQL开启二进制日志的配置是___log-bin___。

二、 判断题

  1. Windows和Linux系统中数据库名都不区分大小写。( 错 )

  2. MySQL配置文件的路径是/etc/mysql.cnf。( 错)

  3. 查看二进制日志使用mysqlbinlog命令。( 对 )

  4. 使用mysqld --initialize初始化数据库后root用户的密码为空。( 错)

  5. 开启二进制日志后,执行FLUSH LOG会生成新的日志文件。( 对)

三、 选择题

  1. 在Linux系统中,远程下载的命令是( C)。

A.download B.get C.wget D. load

  1. 在Linux系统中,表示输入重定向的符号是(B )。

A.| B.< C.> D. -

  1. 查看二进制日志状态使用(CD )语句。

A.PURGE BINARY LOGS

B.SHOW BINARY STATUS

C.SHOW MASTER STATUS

D. SHOW MASTER LOGS

  1. 指定二进制日志缓存大小的配置是( B)。

A.binary_cache_size B.binlog_cache_size

C.max_binlog_size D. binlog_max_size

  1. 在遇到(ABC )情况下,二进制日志文件会递增。

A.MySQL服务重新启动

B.达到max_binlog_size的上限

C.执行FLUSH LOG语句

D.执行FLUSH PRIVILEGES语句

四、 简答题

1. 请简述常规日志和二进制日志的区别。

答:

常规日志用于记录MySQL服务运行信息和SQL语句,二进制日志用于记录MySQL数据库的变化。二进制日志可以用于多服务器复制、数据恢复,常规日志则不能。

2. 请简述备份MySQL数据库有几种方案,优缺点是什么。

方案1:直接备份data目录。优点:操作简单。缺点:不支持热备,可移植性差。

方案2:使用mysqldump。优点:使用方便。缺点:备份速度慢,不灵活。

方案3:使用二进制日志。优点:备份更灵活,支持增量备份。缺点:对存储引擎等有要求。

五、 实训题

1. 请动手实现,利用二进制日志备份和恢复数据。

# 在my.cnf的[mysqld]中开启二进制日志
log-bin=binlog
server-id=1
# 使用二进制日志恢复数据
./mysqlbinlog /var/lib/mysql/binlog.000001 | mysql -uroot -p123456

2. 请动手实现,将sh_goods表中的数据导出成XML格式。

mysql -X -uroot -p123456 -e "USE shop; SELECT * FROM sh_goods;" > goods.xml