## MySQL数据库基础

### 创建数据库和表

创建数据库BookDB。为数据库创建两张表:图书类型表BookType和图书信息表Book,并添加相应约束。见表上机2.1、表上机2.2。

表上机2.1 BookType图书类型表

![image-20250112210139901](https://yp.smallkun.cn/markdown/image-20250112210139901.png!compress)

表上机2.2 Book图书信息表

![image-20250112210152226](https://yp.smallkun.cn/markdown/image-20250112210152226.png!compress)

### 表的数据操作

向数据库中的BookType和Book表插入数据,效果如图上机2.4和图上机2.5所示。由于录入数据出现错误,现在需要如下的修改:将《杜拉拉升职记》的发布时间改为“2010-07-2”。


图上机2.4 BookType表的数据

![image-20250112210640058](https://yp.smallkun.cn/markdown/image-20250112210640058.png!compress)

图上机2.5 Book表的数据

![image-20250112210716052](https://yp.smallkun.cn/markdown/image-20250112210716052.png!compress)

**删除图书信息**

由于业务的需要,发布时间在2010年以前的不再出售,需要全部清理。

**删除图书类型**

由于业务变化,图书馆不再需要文学类的图书,现要求删除类型文学类产,并将对应的图书一并删除。

## MySQL查询

### 使用内连接显示图书详细信息

使用内连接,查询出图书编号、图书名、作者、出版时间、图书类别名称、图书备注,查询结果如图上机3.1所示。

图上机3.1 图书详细信息

![image-20250112211152271](https://yp.smallkun.cn/markdown/image-20250112211152271.png!compress)

### 使用子查询显示计算机类的图书详细信息

先使用内连接,查询出图书编号、图书名、作者、出版时间、图书类别名称、图书备注等信息;然后根据计算机类的图书类别编号,筛选出计算机类的图书,查询结果如图上机3.2所示。

图上机3.2 计算机类的图书详细信息

![image-20250112211214148](https://yp.smallkun.cn/markdown/image-20250112211214148.png!compress)

### 使用集合显示图书编号为2和3的图书信息

根据客户要求,现在需要查看图书编号为2和3的图书名称和作者,查询结果如图上机3.3所示。

图上机3.3 指定图书信息

![image-20250112211300007](https://yp.smallkun.cn/markdown/image-20250112211300007.png!compress)

### 数据的高级查询

查询出类型为文学类的所有图书。查询出李可所有发布时间大于2010年1月1日的小说书集。查询出所有的文学书和计算机书并追加备注说明是翻新书。

## 存储过程

### 创建存储过程完成图书添加

创建存储过程,完成对上机2中book表的数据添加。

传入图书相关信息后,执行INSERT 语句将值插入的表中,并自动生成主键值

### 创建存储过程完成图书修改

创建存储过程,完成对上机2中book表的数据修改。

传入图书相关信息,实现对指定编号的图书进行修改

### 创建存储过程完成图书删除

创建存储过程,根据图书名称将图书信息删除。

传入图书编号,实现对指定编号的图书进行删除

## 视图

### 查询book表数据

为上机2中book表建立视图,查询book表中所有数据,视图名为v_book。

### 根据条件查询book表数据

在上一题的基础上,传入查询条件进行查询,例如查询指定指定作者、类型的图书

## 触发器

### 记录添加总字符数

首先建立两个单域的表格。一个表格中为姓名列表(表格名:data),另一个表格中是所插入字符的字符数(表格名:chars)。希望在data表格中定义一个触发器,每次在其中插入一个新姓名时,chars表格中运行的总数就会根据新插入记录的字符数目进行自动更新。

分析:要记录总共插入了的多少字符,先要得到每次插入的字符数和原字符数。

### 记录数据的插入和更新时间

记录表category中数据的插入和更新时间。category表的内容如下:编号、名称、创建时间、修改时间。

分析:创建两个触发器,一个管理添加,一个管理修改。

(1) 创建表catagory。

(2) 创建触发器create_time用于记录用户往catagory表插入数据的时间

(3) 创建触发器update_time用于记录用户更新catagory表数据的时间

### 修改记录时,检查是否备注,没有自动添加当前时间

book表修改记录时,检查在修改时是否有备注,如果没有自动添加当前时间为备注。

## 存储函数

### 使用函数根据用户传入的类型名称和类型备注获取刚插入的类型编号

使用函数根据用户传入的类型名称和类型备注。该函数包含类型名称和类型备注2个输入参数,类型编号为函数的返回值,函数名命名为AddType

分析:在函数中根据用户传入的类型名称和类型备注进行插入数据。再通过系统函数得到最后插入的id值将其返回。最后调用函数,测试函数是否正确。

### 使用函数根据用户传入图书信息获取刚插入的图书编号

创建一个函数实现图书作者的显示。该函数有一个输入参数,根据用户传入的图书名字,可以返回查询到图书作者信息。

### 使用函数根据用户传入图书名称,查询图书的作者信息

图书管理员想要得到刚刚插入的图书编号。现要求系统实现一个图书添加的功能:使用函数,根据用户传入的图书名称、作者、出版日期、类型编号、图书备注,得到现在最新的图书id 下面创建函数来实现该查询功能。