MySQL视图
Posted chromer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL视图相关的知识,希望对你有一定的参考价值。
1. 创建视图
1.1 创建视图的语法形式
CREATE [OR REPALCE][ALGORITHM = {UNSIGNED|MERGE|TEMPTABLE}] VIEW view_name[(column_list)] AS SELECT_statement [WITH[CASCADED|LOCAL|CHECK OPTION]] #CREATE 创建新的视图; #REPLACE 替换已经创建的视图 #ALGORITHM表示视图选择的算法; #view_name:视图的名称 #column_list:属性列 #SELECT_statement:SELECT语句 #WITH[CASCADED|LOCAL] CHECK OPTION:视图更新时保证在视图的权限范围之内
1.2 在单表上创建视图
例1:在t表格上创建一个名为view_t的视图:
#创建基本表并插入数据 create table t(quantity int,price int); insert into t values(3,50); #创建视图语句为: create view view_t as select quantity,price,quantity*price from t;
quantity | price | quantity*price |
3 | 50 | 150 |
默认情况下创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称还创建视图。
例2:在t表格上创建一个名为view_t2的视图:
1 create view view_t2(qty,price,total) as select quantity,price,quantity*price from t; 2 select * from view_t2;
qty |
price | total |
3 | 50 | 150 |
1.3 在多表上创建视图
mysql中也可以在两个或者两个以上的表上创建视图,可以使用CREATE VIEW语句实现。
1 #在表student和表stu_info上创建视图stu_glass,代码如下: 2 insert into student values(1,‘wanglin1‘),(2,‘gaoli‘),(3,‘zhanghai‘); 3 insert into stu_info values(1,‘wuban‘,‘henan‘),(2,‘liuban‘,‘hebei‘),(3,‘qiban‘,‘shandong‘); 4 #创建视图stu_glass,语句如下: 5 CREATE VIEW stu_glass ( id, name, glass ) AS SELECT 6 student.s_id, 7 student.name, 8 stu_info.glass 9 FROM 10 student, 11 stu_info 12 WHERE 13 student.s_id = stu_info.s_id; 14 #查看视图 15 select * from stu_glass;
这个例子就解决了刚开始提出的那个问题,通过这个视图可以很好的保护基本表中的数据。这个视图中的信息很简单,只包含了id,姓名和班级,id字段对应student表中的s_id字段,name对应student表中的name字段,glass对应sttu_info表中的glass字段。
2. 查看视图
2.1 DESCRIBE 语句查看视图的基本信息
1 #通过DESCRIBE语句查看视图view_t的定义 2 DESCRIBE view_t;
结果显示出了视图的字段定义、字段的数据类型、是否为空、是否为主/外键、默认值和额外信息。
DESCRIBE一般情况下都简写为DESC,输入这个命令的执行结果和输入DESCRIBE的执行结果是一样的。
2.2 SHOW TABLE STATUS 语句查看视图基本信息
1 #通过SHOW TABLE STATUS命令查看视图信息 2 show table status like ‘view_t‘;
2.3 SHOW CREARE VIEW 语句查看视图详细信息
1 #SHOW CREATE VIEW 语句可以查看视图详细定义 2 show create view view_t;
2.4 在views表中查看视图详细信息
1 #在MySQL中,information_schema数据库下的views表中存储了所有视图的定义。通过对views表的查询,可以查看数据库中的所有视图的详细信息,查询语句如下: 2 SELECT * FROM information_schema.VIEWS;
3. 修改视图
3.1 CREATE OR REPLACE VIEW 语句修改视图
1 #MySQL中如果要修改视图,使用CREATE OR REPLACE VIEW语句: 2 CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}] 3 VIEW view_name[(column_list)] 4 AS SELECT_statement 5 [WITH[CASCADED|LOCAL]CHECK OPTION]
3.2 ALTER 语句修改视图
1 ALTER[ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}] 2 VIEW view_name[(column_list)] 3 AS SELECT_statement 4 [WITH[CASCADED|LOCAL]CHECK OPTION]
4. 更新视图
#使用UPDATE语句更新视图view_t: update view_t set quantity = 5; select * from view_t; +----------+ | quantity | +----------+ | 5 | +----------+
1 #使用INSERT 语句在基本表t中插入了一条记录: 2 insert into t values(3,5); 3 select * from t; 4 select * from view_t2; 5 +-----+-------+-------+ 6 | qty | price | total | 7 +-----+-------+-------+ 8 | 5 | 50 | 250 | 9 | 3 | 5 | 15 | 10 +-----+-------+-------+ 11 2 rows in set (0.02 sec)
向表t中插入一条记录,通过select查看表t和视图view_t2,可以看到其中的内容也跟着更新,视图更新的不仅仅是数量和单价,总价也会更新。
1 #使用delete语句在删除视图view_t2中的一条记录: 2 delete from view_t2 where price = 5; 3 select * from view_t2; 4 +-----+-------+-------+ 5 | qty | price | total | 6 +-----+-------+-------+ 7 | 5 | 50 | 250 | 8 +-----+-------+-------+ 9 1 row in set (0.02 sec) 10 11 select * from t; 12 +----------+-------+ 13 | quantity | price | 14 +----------+-------+ 15 | 5 | 50 | 16 +----------+-------+ 17 1 row in set (0.03 sec)
5. 删除视图
当视图不再需要时,可以将其删除,删除一个或多个视图可以使用DROP VIEW语句:
语法如下:
DROP VIEW[IF EXISTS] view_name[,view_name]... [RESTRICT|CASCADE]
例:删除stu_glass视图
1 drop view if exists stu_glass; 2 Query OK, 0 rows affected (0.00 sec)
以上是关于MySQL视图的主要内容,如果未能解决你的问题,请参考以下文章