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语句发现这两种食品的记录已经不存在。