Mysql教程

11.4本章实例

在本小节中将在food表上插入数据、更新数据和删除数据。food表的定义如表11.1所示。

字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
id 编号 INT(10)
name 食品名称 VARCHAR(20)
company 生产厂商 VARCHAR(30)
price 价格(单位:圆) FLOAT
produce_time 生产年份 YEAR
validity_time 保质期(单位:年) INT(4)
address 厂址 VARCHAR(50)

按下列要求进行操作

(1)将表11.2的记录插入到food表中,表11.2的内容如下所示。

id name Company price produce_time validity_time address
1 AA饼干 AA饼干厂 205 2008 3 北京
2 CC牛奶 CC牛奶厂 3.5 2009 1 河北
3 EE果冻 EE果冻厂 1.5 2007 2 北京
4 FF咖啡 FF咖啡厂 20 2002 5 天津
5 GG奶糖 GG奶糖厂 14 2003 3 广东

(2)将"CC牛奶厂"的厂址(address)改为"内蒙古"并且将价格改为3.2。

(3)将厂址在北京的公司的保质期(validity_time)都改为5年。

(4)删除过期食品的记录。若当前时间-生产年份(produce_time ) >保质期 (validity_time),则视为过期食品。

(5)删除厂址为北京的食品的记录。

本实例的执行过程如下:

(1)创建food表SQL代码如下:

CREATE TABLE food(id INT(10) NOT NULL UNIQUE PRIMARY KEYAUTO_INCREMENT,name VARCHAR(20) NOT NULL, company VARCHAR(30) NOTNULL, price FLOAT, produce_time YEAR , validity_time INT(4),address VARCHAR(50));

(2)创建好food表以后,可以使用INSERT语句来插入记录。按照11.2表中的内容为food表增加记录。这里分别用了3种办法来插入这5条记录。第一种方法不指定具体的 段,该sql语句的代码如下:

INSERT INTO food VALUES(1,'AA饼干','AA饼干厂',2.5,'2008',3,'北京');

这个INSERT语句没有指定food表中的字段,数据库系统会依次将数据插入到每个字段中。

第二种方法是依次指定food表的字段。该INSERT语句的代码如下:

INSERT INTO food( id, name, company, price, produce_time, validity_time, address)VALUES(2,'CC牛奶','CC牛奶厂',3.5,'2009',1,'河北');

这个INSERT语句指定了food表的所有记录。数据库系统会按照指定字段的顺序将数据依次插入。

第3种方法是同时插入多条记录。该INSERT 语句的代码如下:

INSERT INTO food VALUES(NULL,'EE果冻','EE果冻厂',1.5,'2007',2,'北京'),(NULL,'FF咖啡','FF咖啡厂',20,'2002',5,'天津'),(NULL,'GG奶糖','GG奶糖厂',14,'2003',3,'广东');

插入完毕后执行SELECT语句,结果为:

mysql>SELECT * FROM food;
+-----+----------+------------+-------+------------+--------+-------+
|  id |  name    |  comapny   |  price|produce_time|validaty|address|
+-----+----------+------------+-------+------------+--------+-------+
|  1  |  A饼干   |  AA饼干厂  |  2.5  |    2008    |   3    | 北京  |
|  2  |  CC牛奶  |  CC牛奶厂  |  3.5  |    2009    |   3    | 河北  |
|  3  |  EE果冻  |  EE果冻厂  |  1.5  |    2007    |   1    | 北京  |
|  4  |  FF咖啡  |  FF咖啡厂  |  20   |    2002    |   5    | 天津  |
|  5  |  GG奶糖  |  GG奶糖厂  |  14   |    2003    |   3    | 广东  |
+-----+----------+------------+-------+------------+--------+-------+
5 rows set(0.00 sec)

三种插入方式均执行成功!

(3)将“CC牛奶”的厂址(address)改为“内蒙古”,并且将价格改为3.2。这通过 UPDATE语句来实现。

UPDATE food SET address8='内蒙古',price=3.2 WHERE name='CC牛奶1';

更新成功后执行SELECT语句查询结果如下:

mysql>SELECT * FROM food WHERE name='CC牛奶';
+-----+----------+------------+-------+------------+--------+-------+
|  id |  name    |  comapny   |  price|produce_time|validaty|address|
+-----+----------+------------+-------+------------+--------+-------+
|  2  |  CC牛奶  |  CC牛奶厂  |  3.5  |    2009    |   3    | 河北  |
+-----+----------+------------+-------+------------+--------+-------+
1 rows set(0.00 sec)

(4)将厂址在北京的公司的保质期(validity_time)都改为5年。UPDATE语句如下:

UPDATE food SET validity_time=5 WHERE address='北京’;

更新成功后,执行SELECT语句如下:

mysql>SELECT * FROM food WHERE address='北京';
+-----+----------+------------+-------+------------+--------+-------+
|  id |  name    |  comapny   |  price|produce_time|validaty|address|
+-----+----------+------------+-------+------------+--------+-------+
|  1  |  A饼干   |  AA饼干厂  |  2.5  |    2008    |   5    | 北京  |
|  3  |  EE果冻  |  EE果冻厂  |  1.5  |    2007    |   5    | 北京  |
+-----+----------+------------+-------+------------+--------+-------+
2 rows set(0.00 sec)

5)删除过期食品的记录。当前时间为2009年。用2009减去生产年份,若这个值大于保质期,则说明食品已经过期。先用SELECT语句来查看一下哪些食品已经过期。 SELECT语句执行结果如下:

+-----+----------+------------+-------+------------+--------+-------+
|  id |  name    |  comapny   |  price|produce_time|validaty|address|
+-----+----------+------------+-------+------------+--------+-------+
|  4  |  FF咖啡  |  FF咖啡厂  |  20   |    2002    |   5    | 天津  |
|  5  |  GG奶糖  |  GG奶糖厂  |  14   |    2003    |   3    | 广东  |
+-----+----------+------------+-------+------------+--------+-------+
2 rows set(0.00 sec)

查询结果显示,有两种食品已经过期。使用DELETE语句可以删除这两种食品的记录。 DELETE语句的代码如下:

DELETE FROM food WHERE 2009-produce_time>validity_time;

结果显示,记录已经删除。使用SELECT语句这两种食品的记录已经不存在。

(6)删除厂址为北京的食品记录。先用SELECT查看哪一些食品的厂址在北京。

mysql>SELECT * FROM food WHERE address='北京';
+-----+----------+------------+-------+------------+--------+-------+
|  id |  name    |  comapny   |  price|produce_time|validaty|address|
+-----+----------+------------+-------+------------+--------+-------+
|  1  |  A饼干   |  AA饼干厂  |  2.5  |    2008    |   5    | 北京  |
|  3  |  EE果冻  |  EE果冻厂  |  1.5  |    2007    |   5    | 北京  |
+-----+----------+------------+-------+------------+--------+-------+
2 rows set(0.00 sec)

执行删除语句

DELETE FROM food WHERER address='北京';

执行SELECT语句发现这两种食品的记录已经不存在。


关注微信获取最新动态