Mysql教程

8.7本章实例

在本小节中将在test数据库中work_info表上进行视图操作。work_info表的内容如表 8.1所示。

字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
id 编号 INT(10)
name 姓名 vatchar(20) 否、
sex 性别 vatchar(4)
age 年龄 INT(5)
address 家庭住址 vatchar(50)
tel 电话号码 VARCHAR(20)

按照下列要求进行操作:

(1)创建work_info表。

(2)向表中插入几条记录。需要插入的数据如表8.2所示。

id name sex age address tel
1 张三 M 18 北京市海淀区 1234567
2 李四 M 22 北京市昌平区 2345678
3 王五 F 17 湖南省永州区 3456789
4 赵六 F 25 辽宁省阜新区 4567890

(3)创建视图info_view。从work_info表中选出age>20的记录来创建视图。视图的字段包括 id、name、sex 和 address。ALGORTTHM 设置为 MERGE 类型。加上 WITH LOCAL CHECK OPTION 条件。

(4)查看视图info_view的基本结构和详细结构。

(5)查看视图info_view的所有记录。

(6)修改视图info_view使其显示age小于20的信息,其他条件不变。

(7)更新视图,将id为3的记录进行更新。设置其Sex为M。

(8)删除视图。

本实例的执行过程如下:

1.在test数据库中创建work_info表

在命令行中登录MySQL数据库管理系统。登录成功后选择test数据库,然后可以执行CREATE TABLE语句来创建work_info表。SQL代码如下:

CREATE TABLE work_info (id INT(10) NOT NULL UNIQUE PRIMARY KEY,name VARCHAR(20) NOT NULL , sex VARCHAR(4) NOT NULL, age INT(5),address VARCHAR(50), tel VARCHAR(20));

执行结果显示,ork_info表创建成功。

2.插入记录

为了进行后面的视图操作,先向work_info表中插入几条记录。插入记录使用INSERT语句,第11章会详细讲解INSERT语句的内容。插入记录的30[代码如下:

INSERT INTO work_info VALUES( 1,'张三','M',18,'北京市海淀区','1234567');
INSERT INTO work_info VALUES( 2,'李四','M',22,'北京市昌平区','2345678');
INSERT INTO work_info VALUES( 3,'王五','P',17,'湖南省永州市','3456789');
INSERT INTO work_info VALUES( 4,'赵六','P',25,'辽宁省阜新市','4567890');

结果显示,数据插入成功。

3.创建视图info_view

在work_info表上创建视图,代码如下:

CREATE ALGORITHM=MERGE VIEW info_view (id,name, sex, address )AS SELECT id,name, sex, address FROM work_info WHERE age>20 WITH LOCAL CHECK OPTION;

执行结果显示,视图work_info创建成功。

4.查看视图info_view的基本结构和详细结构

执行DESC语句来查询视图info_view的基本结构。代码执行如下:

mysql> desc info_view;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(10)     | NO   |     | NULL    |       |
| name    | varchar(20) | NO   |     | NULL    |       |
| sex     | varchar(4)  | NO   |     | NULL    |       |
| address | varchar(50) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

执行DESC语句可以看到视图info_view的基本信息。包括字段名:(Fieid)数据类型(Type)等。如果要査看视图的详细信息,应该执行SHOW CREATE VIEW语句来查看。SHOW CREATE VIEW语句执行结果如下:

mysql> show create view info_view \G;
*************************** 1. row ***************************
                View: info_view
         Create View: CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `info_view` AS select
`work_info`.`id` AS `id`,`work_info`.`name` AS `name`,`work_info`.`sex` AS `sex`,`work_info`.`address` AS `address` from
 `work_info` where (`work_info`.`age` > 20) WITH LOCAL CHECK OPTION
character_set_client: gb2312
collation_connection: gb2312_chinese_ci
1 row in set (0.00 sec)

SHOW CREATE VIEW 语句可以看到视图的 ALGORITHM 值、WITH LOCAL CHECK OPTION条件等信息。

5.查看视图info_view的所有记录

执行SELECT语句查询info_view的所有记录。SELECT语句执行如下:

mysql> select * from info_view;
+----+------+-----+--------------+
| id | name | sex | address      |
+----+------+-----+--------------+
|  2 | 李四     | M   | 北京市昌平区           |
|  4 | 赵六     | P   | 辽宁省阜新市            |
+----+------+-----+--------------+
2 rows in set (0.01 sec)

因为,视图定义时,查询的记录的age都是大于20的,所以,视图中只有满足条件的这两条记录。视图中的字段都是在视图定义时设置的。

6.修改视图info_view

可以通过CREATE OR REPLACE VIEW语句和ALTER语句来修改视图。本实例中只使用ALTER语句来修改视图。代码如下:

ALTER ALGORITHM=MERGE VIEW info_view (id,name, sex, address )AS SELECT id,name, sex, address FROM work_info WHERE age<20 WITH LOCAl CHECK OPTION;

代码执行后,重新查看视图的详细结构。代码执行结果如下:

mysql> show create view info_view \G;
*************************** 1. row ***************************
                View: info_view
         Create View: CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `info_view` AS select
`work_info`.`id` AS `id`,`work_info`.`name` AS `name`,`work_info`.`sex` AS `sex`,`work_info`.`address` AS `address` from
 `work_info` where (`work_info`.`age` < 20) WITH LOCAL CHECK OPTION
character_set_client: gb2312
collation_connection: gb2312_chinese_ci
1 row in set (0.00 sec)

结果显示,视图中的条件己经变成age小于20了。执行SELECT语句,查询视图中的记录。SELECT语句执行结果如下:

mysql> select * from info_view;
+----+------+-----+--------------+
| id | name | sex | address      |
+----+------+-----+--------------+
|  1 | 张三     | M   | 北京市海淀区            |
|  3 | 王五     | P   | 湖南省永州市            |
+----+------+-----+--------------+
2 rows in set (0.00 sec)

因为,修改了视图的定义后,查询的记录的age都是小于20的,所以,只有id为1和3的记录才满足条件。

7.更新视图

更新id为3的记录。设置其sex为M。执行UPDATE语句更新视图。UPDATE语句 执行如下:

UPDATE info_view SET sex='M' WHERE id=3;

结果显示更新成功,执行SELECT语句查看视图中的记录。

mysql> select * from info_view;
+----+------+-----+--------------+
| id | name | sex | address      |
+----+------+-----+--------------+
|  1 | 张三     | M   | 北京市海淀区            |
|  3 | 王五     | M   | 湖南省永州市            |
+----+------+-----+--------------+
2 rows in set (0.00 sec)

结果显示,视图info_view中的数据已经更新。id为3的记录中,sex字段的值已经从F变成了M。在执行SELECT语句查看work_info表中记录是否发生改变。SELECT语句执行如下:

mysql> select * from work_info;
+----+------+-----+------+--------------+---------+
| id | name | sex | age  | address      | tel     |
+----+------+-----+------+--------------+---------+
|  1 | 张三     | M   |   18 | 北京市海淀区            | 1234567 |
|  2 | 李四     | M   |   22 | 北京市昌平区           | 2345678 |
|  3 | 王五     | M   |   17 | 湖南省永州市            | 3456789 |
|  4 | 赵六     | F   |   25 | 辽宁省阜新市            | 4567890 |
+----+------+-----+------+--------------+---------+
4 rows in set (0.00 sec)

8.删除视图

使用DROP语句可以删除视图。代码执行如下:

DROP VIEW info_view;

结果显示,视图删除成功。执行DESC语句来查看视图info_View,以确保视图已经从数据库中删除。DESC语句执行如下:

结果显示,视图不存在。这说明视图已经删除成功。

通过本节的实例,希望读者对本章的内容有个更加具体的认识。能够真正掌握创建视 图、查看视图结构、修改视图、更新视图和删除视图的方法。


关注微信获取最新动态