文章来源:https://www.cnblogs.com/geaozhang/p/6792369.html
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
1)OR REPLACE:表示替换已有视图
2)ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表
3)select_statement:表示select语句
4)[WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内
- cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件
- local表示更新视图的时候,要满足该视图定义的一个条件即可
- TIPS:推荐使用WHIT [CASCADED|LOCAL] CHECK OPTION选项,可以保证数据的安全性
语法:
create view 视图名
as
查询语句;
SELECT stuname,majorname
FROM stuinfo s
INNER JOIN major m ON s.`majorid`= m.`id`
WHERE s.`stuname` LIKE '张%';
CREATE VIEW v1
AS
SELECT stuname,majorname
FROM stuinfo s
INNER JOIN major m ON s.`majorid`= m.`id`;
SELECT * FROM v1 WHERE stuname LIKE '张%';
DESC myv3;
SHOW CREATE VIEW myv3;
create or replace view 视图名
as
查询语句;
SELECT * FROM myv3
CREATE OR REPLACE VIEW myv3
AS
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;
alter view 视图名
as
查询语句;
ALTER VIEW myv3
AS
SELECT * FROM employees;
语法:drop view IF EXISTS 视图名,视图名,...;
DROP VIEW emp_v1,emp_v2,myv3;
CREATE OR REPLACE VIEW myv1
AS
SELECT last_name,email,salary*12*(1+IFNULL(commission_pct,0)) "annual salary"
FROM employees;
CREATE OR REPLACE VIEW myv1
AS
SELECT last_name,email
FROM employees;
SELECT * FROM myv1;
SELECT * FROM employees;
INSERT INTO myv1 VALUES('张飞','[email protected]');
UPDATE myv1 SET last_name = '张无忌' WHERE last_name='张飞';
DELETE FROM myv1 WHERE last_name = '张无忌';
包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
③Select中包含子查询
⑤from一个不能更新的视图
where子句的子查询引用了from子句中的表
CREATE OR REPLACE VIEW myv6
AS
SELECT last_name,email,salary
FROM employees
WHERE employee_id IN(
SELECT manager_id
FROM employees
WHERE manager_id IS NOT NULL
);