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语句执行如下:
结果显示,视图不存在。这说明视图已经删除成功。
通过本节的实例,希望读者对本章的内容有个更加具体的认识。能够真正掌握创建视 图、查看视图结构、修改视图、更新视图和删除视图的方法。