351 lines
11 KiB
Markdown
351 lines
11 KiB
Markdown
创建一个空数据库名字为`book_store_db`,字符集使用UTF8
|
||
|
||
## 创建表
|
||
|
||
目的:
|
||
|
||
(1)熟练掌握创建表结构的方法。
|
||
|
||
(2)掌握查看表信息的方法。
|
||
|
||
内容:
|
||
|
||
(1)使用 MySQL 创建会员表(如表 3-9 所示)、图书表(如表 3-10 所示)的表结构。
|
||
|
||
```sql
|
||
#(1)会员表
|
||
CREATE TABLE `user`(
|
||
uid CHAR(4) PRIMARY KEY COMMENT '会员编号',
|
||
uname VARCHAR(20) COMMENT '会员昵称',
|
||
email VARCHAR(20) COMMENT '电子邮箱',
|
||
tnum VARCHAR(15) COMMENT '联系电话',
|
||
score INT COMMENT '积分'
|
||
);
|
||
|
||
#(1)图书表 (先创建图书类别表再创建图书表)
|
||
DROP TABLE book;
|
||
CREATE TABLE book(
|
||
bid INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
|
||
bname VARCHAR(50) NOT NULL COMMENT '图书名称',
|
||
author CHAR(8) COMMENT '作者',
|
||
price FLOAT COMMENT '价格',
|
||
publisher VARCHAR(50) COMMENT '出版社',
|
||
discount FLOAT COMMENT '折扣',
|
||
cid INT COMMENT '图书类别'
|
||
);
|
||
|
||
```
|
||
|
||
(2)使用 MySQL 创建图书类别表(如表 3-11 所示)、订购表(如表 3-12 所示)的表结构。
|
||
|
||
```sql
|
||
#(2)图书类别表
|
||
CREATE TABLE category(
|
||
cid INT PRIMARY KEY AUTO_INCREMENT COMMENT '类别编号',
|
||
cname VARCHAR(16) COMMENT '类别名称'
|
||
);
|
||
|
||
#(2)订购表
|
||
CREATE TABLE b_order(
|
||
bid INT NOT NULL COMMENT '图书编号',
|
||
uid CHAR(4) NOT NULL COMMENT '会员编号',
|
||
ordernum INT DEFAULT 1 COMMENT '订购量',
|
||
oderdate DATETIME COMMENT '订购日期',
|
||
deliverydate DATETIME COMMENT '发货日期'
|
||
);
|
||
```
|
||
|
||
(3)使用 DROP TABLE 语句删除上述创建的表,然后使用 CREATE TABLE 语句再次创建上述表。
|
||
|
||
```sql
|
||
#(3)删除上述所有的表
|
||
DROP TABLE `user`;
|
||
DROP TABLE book;
|
||
DROP TABLE category;
|
||
DROP TABLE b_order;
|
||
```
|
||
|
||
(4)查看会员表的信息。
|
||
|
||
```sql
|
||
#(4)查看会员表的信息
|
||
DESC `user`;
|
||
```
|
||
|
||
(5)修改会员表结构。添加字段「联系地址」,数据类型设置为 VARCHAR(50);更改「联系地址」为「联系方式」;删除添加的字段「联系地址」。
|
||
|
||
```sql
|
||
#(5)修改会员表结构
|
||
#添加联系地址字段
|
||
ALTER TABLE `user` ADD taddress VARCHAR(50);
|
||
|
||
#修改联系地址字段名为联系方式
|
||
ALTER TABLE `user` CHANGE taddress tmanner VARCHAR(50);
|
||
|
||
#删除联系方式字段
|
||
ALTER TABLE `user` DROP tmanner;
|
||
```
|
||
|
||
(6)使用创建表时添加约束和为已存在的表添加约束这两种方式给表添加约束。
|
||
|
||
```sql
|
||
#(6)添加外键
|
||
#1.创建表时添加外键
|
||
CREATE TABLE book(
|
||
bid INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
|
||
bname VARCHAR(50) NOT NULL COMMENT '图书名称',
|
||
author CHAR(8) COMMENT '作者',
|
||
price FLOAT COMMENT '价格',
|
||
publisher VARCHAR(50) COMMENT '出版社',
|
||
discount FLOAT COMMENT '折扣',
|
||
cid INT COMMENT '图书类别',
|
||
CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES category(cid)
|
||
);
|
||
|
||
#2.表创建之后添加外键
|
||
DROP TABLE IF EXISTS book;
|
||
CREATE TABLE book(
|
||
bid INT PRIMARY KEY AUTO_INCREMENT COMMENT '图书编号',
|
||
bname VARCHAR(50) NOT NULL COMMENT '图书名称',
|
||
author CHAR(8) COMMENT '作者',
|
||
price FLOAT COMMENT '价格',
|
||
publisher VARCHAR(50) COMMENT '出版社',
|
||
discount FLOAT COMMENT '折扣',
|
||
cid INT COMMENT '图书类别'
|
||
);
|
||
ALTER TABLE `book` ADD CONSTRAINT fk_cid FOREIGN KEY(cid) REFERENCES category(cid);
|
||
```
|
||
|
||
表 3-9 会员表(user)结构
|
||
|
||

|
||
|
||
表 3-10 图书表(book)结构
|
||
|
||

|
||
|
||
表 3-11 图书类别表(category)结构
|
||
|
||

|
||
|
||
表 3-12 订购表(b_order)结构
|
||
|
||

|
||
|
||
## 插入、更新、删除数据
|
||
|
||
目的:熟练掌握使用 INSERT、DELETE、UPDATE 语句向表中添加、删除、修改记录。
|
||
|
||
内容:
|
||
|
||
(1)「网上书店」数据库中的数据分别如表 4-1 至表 4-4 所示。
|
||
|
||
表 4-1 user 表数据
|
||
|
||

|
||
|
||
表 4-2 book 表数据
|
||
|
||

|
||
|
||
表 4-3 category 表数据
|
||
|
||

|
||
|
||
表 4-4 b_order 表数据
|
||
|
||

|
||
|
||
(2)使用 SQL 语句分别向 user 表(表 4-1)、book 表(表 4-2)、category 表(表 4-3)、b_order 表(表 4-4)插入记录。
|
||
|
||
```sql
|
||
#(2)插入记录
|
||
INSERT INTO `user`()
|
||
VALUES
|
||
('1001', '何仙姑', 'Hxg18@163.com', 13320101991, 20),
|
||
('1002', '平平人生', 'Lp011@126.com', 13545158219, 300),
|
||
('1003', '四十不惑', '12345@qq.com', 18688168818, 10000),
|
||
('1004', '桃花岛主', '810124@qq.com', 13068011234, 600),
|
||
('1005', '水灵', 'zs123@371.com', 15838182503, 150),
|
||
('1006', '感动心灵', 'gandong@tome.com', 13641151234, 500);
|
||
|
||
INSERT INTO book()
|
||
VALUES
|
||
(1, '中国时代', '师永刚', 39.0, '作家出版社', 27.8, 1),
|
||
(2, '中国历史的屈辱', '王重旭', 26.0, '华夏出版社', 18.2, 2),
|
||
(3, '择业要趁早', '海文', 28.0, '海天出版社', 19.3, 3),
|
||
(4, '房间', '爱玛', 37.6, '人民文学出版社', 26.3, 4),
|
||
(5, '平凡的世界', '路遥', 75, '北京出版社', 63.75, 4),
|
||
(6, '心灵鸡汤', '关然', 27.0, '大豫出版社', 20.0, 3),
|
||
(7, '蜕', '赵婷', 32.0, '上海出版社', 28.5, 3);
|
||
|
||
INSERT INTO category()
|
||
VALUES
|
||
(1, '历史'),
|
||
(2, '家教'),
|
||
(3, '文化'),
|
||
(4, '小说');
|
||
|
||
INSERT INTO b_order()
|
||
VALUES
|
||
(1001, 1, 2, '2016-03-12', DEFAULT),
|
||
(1001, 3, 1, '2016-04-15', DEFAULT),
|
||
(1001, 1, 1, '2016-09-15', DEFAULT),
|
||
(1003, 7, 1, '2015-12-14', DEFAULT),
|
||
(1003, 3, 1, '2016-10-10', DEFAULT),
|
||
(1005, 5, 1, '2015-08-17', DEFAULT),
|
||
(1005, 7, 3, '2016-11-12', DEFAULT),
|
||
(1006, 5, 1, '2016-09-18', DEFAULT),
|
||
(1006, 1, 2, '2016-10-21', DEFAULT),
|
||
(1006, 7, 2, '2015-11-21', DEFAULT);
|
||
```
|
||
|
||
(3)使用 SQL 语句修改表中记录。
|
||
|
||
① 把 user 表中 uid 字段值为 1001 的记录的 uname 字段值修改为「何大姑」。
|
||
|
||
```sql
|
||
|
||
```
|
||
|
||
② 把 b_order 表中 uid 字段值为 1003 且 bid 字段值为 3 的记录的 ordernum 字段值改为「10」,并把该记录的 orderdate 字段值改为「2016-10-01」,deliverydate 字段值设为「2016-10-03」。
|
||
|
||
```sql
|
||
|
||
```
|
||
|
||
(4)使用 SQL 语句删除表中记录。
|
||
|
||
① 删除 2015 年的订单信息。
|
||
|
||
```sql
|
||
|
||
```
|
||
|
||
② 清空 book 表。
|
||
|
||
```sql
|
||
|
||
```
|
||
|
||
## 简单查询
|
||
|
||
目的:掌握 SELECT 语句中 DISTINCT 子句、LIMIT 子句、WHERE 子句以及 ORDER BY 子句的使用。
|
||
|
||
内容如下。
|
||
|
||
(1)查询会员表,输出积分高于 500 分的会员昵称和联系电话。
|
||
|
||
(2)查询会员表,输出积分低于 200 分的会员昵称和联系电话,分别用英文 username、telephone 指定别名。
|
||
|
||
(3)查询会员表,输出 E-mail 是 QQ 邮箱的会员昵称及其 E-mail。
|
||
|
||
(4)查询订购表,输出订购日期是 2016 年 10 月的订单的详细信息。
|
||
|
||
(5)查询订购表,输出订货的会员编号,要求删除重复行。
|
||
|
||
(6)查询图书表,输出图书的名称和价格,并把查询结果按价格降序排列。
|
||
|
||
(7)查询图书表,输出价格最高的三种图书的名称和价格。
|
||
|
||
## 分组查询
|
||
|
||
目的:掌握集合函数、GROUP BY 子句、HAVING 子句。
|
||
|
||
内容如下。
|
||
|
||
(1)查询图书表,输出所有图书的最高价格、最低价格、平均价格。
|
||
|
||
(2)查询图书表,输出每一类图书的数量。
|
||
|
||
(3)查询图书表,输出每一类图书的最高价格、最低价格、平均价格。
|
||
|
||
(4)查询订购表,输出订购数量超过 3 本的会员编号和订购数量。
|
||
|
||
## 多表连接查询、子查询
|
||
|
||
目的:掌握连接查询和子查询
|
||
|
||
内容如下。
|
||
|
||
(1)输出所有图书的图书名称、价格以及所属类别名称。
|
||
|
||
(2)输出订购了《平凡的世界》的会员昵称、联系电话、订购数量。
|
||
|
||
(3)输出订购了图书的会员昵称和联系电话。
|
||
|
||
(4)输出无人订购的图书名称和价格。
|
||
|
||
(5)输出详细订购信息,包括订购图书的会员呢称、联系电话、所订图书名称、数量、价格、折扣价。
|
||
|
||
## 存储过程
|
||
|
||
目的:掌握存储过程的创建和执行。掌握存储过程中输入、输出参数的使用。
|
||
|
||
内容:
|
||
|
||
(1)在「网上书店」数据库中创建一个名为 proc_1 的存储过程,实现查询所有会员信息的功能。
|
||
|
||
(2)在「网上书店」数据库中创建一个名为 proc_2 的存储过程,要求实现如下功能:根据会员昵称查询会员的积分情况。并调用存储过程,查询「平平人生」和「感动心灵」的积分。
|
||
|
||
(3)在「网上书店」数据库中创建一个名为 proc_3 的存储过程,要求实现如下功能:根据会员昵称查询会员的订购信息,如果该会员没有订购任何图书,则输出「某某会员没有订购图书」的信息;否则输出订购图书的相关信息。调用存储过程,显示会员「四十不惑」订购图书的情况。
|
||
|
||
## 视图
|
||
|
||
目的:掌握视图的定义、维护、使用。
|
||
|
||
内容:
|
||
|
||
(1)定义基于图书表的视图(包含图书编号、图书名称、作者、价格、出版社、图书类别)。
|
||
|
||
(2)查询图书表视图,输出图书的名称和价格,并把查询结果按价格降序排列。
|
||
|
||
(3)查询图书表视图,输出价格最高的三种图书的名称和价格。
|
||
|
||
## 触发器
|
||
|
||
### 创建
|
||
|
||
目的:掌握触发器的创建和执行。
|
||
|
||
内容:在「网上书店」数据库中创建一个名为 tri_1 的触发器,当向订购表中插入记录时,如果订购量 <=0,就将订购量设置为 1。
|
||
|
||
### 使用
|
||
|
||
目的:掌握触发器的使用。
|
||
|
||
内容:
|
||
|
||
(1)在「网上书店」数据库中创建一个名为 tri_2 的触发器,要求实现如下功能:当删除图书类别表中的某个图书类别时,将图书表中对应的图书类别的值设置为 NULL。
|
||
|
||
(2)在「网上书店」数据库中创建一个名为 tri_3 的触发器,要求实现如下功能:当删除某个会员的时候,自动删除该会员的订购信息。
|
||
|
||
### 删除
|
||
|
||
目的:掌握触发器的删除
|
||
|
||
内容:删除网上书店数据库中的触发器 tri_1。
|
||
|
||
## 用户管理
|
||
|
||
### 创建新用户
|
||
|
||
目的:掌握使用 SQL 语句进行用户的创建、查看和删除操作。
|
||
|
||
内容:
|
||
|
||
(1)使用 SQL 语句创建 test 用户。
|
||
|
||
(2)使用 SQL 语句查看创建的 test 用户的信息。
|
||
|
||
(3)使用 SQL 语句删除 test 用户。
|
||
|
||
### 用户权限授予和回收
|
||
|
||
目的:掌握使用 SQL 语句授予和收回用户权限。
|
||
|
||
内容:
|
||
|
||
(1)使用 SQL 语句授予 test 用户对「学生选课」数据库中 studentInfo 表、teacher 表的查询、插入、更新和删除数据的权限。
|
||
|
||
(2)使用 SQL 语句收回 test 用户的全部权限。 |