MySQL视图
文章目录
- MySQL视图
- 介绍
- 视图的创建
- 视图检查选项
- 视图的查询
- 查询创建视图的SQL语句
- 查询视图的数据
- 视图的修改
- 视图的删除
- 视图的插入
- 视图的更新
- 视图的作用
- 本文用python执行SQL语句。
导入python库
import json
import pymysql
from pymysql.converters import escape_string
import pandas as pd
连接数据库
#连接数据库
conn=pymysql.connect(
host="localhost",
port=3306,#端口号
user="root",#数据库用户
password="123456",#数据库密码
#database="world"#要连接的数据库名称
)
cur=conn.cursor()
跳转到指定数据库
sql = """USE PLJNB"""
cur.execute(sql)
cur.fetchall()
介绍
- 是一种虚拟存在的表。
- 视图中的数据并不在数据库中实际存在。
- 视图只保存了查询的SQL逻辑,不保存查询结果(可以简化查询语句)
视图的创建
CREATE [OR REPLACE] VIEW 视图名称[(字段列表)] AS SELECT语句 [WIRH[CASCADED|LOCAL]CHECK OPTION]
例:
sql = """
CREATE OR REPLACE VIEW stu_v AS
SELECT id,name FROM student WHERE id <= 10 WITH CASCADED CHECK OPTION;
"""
cur.execute(sql)
cur.fetchall()
视图检查选项
- 当使用WITH CHECK OPTION子句创建视图时,MySQL会检查正在更改的行是否符合视图规则
- MySQL允许基于另一个视图创建视图,会检查依赖视图中规则的一致性
- CASCADED:会检查所有依赖视图(无差别)(用法和WITH CHECK OPTION一样)
- LOCAL:递归地检查当前视图所依赖的视图,被依赖视图若有LOCAL,则需要检查(用法和WITH CHECK OPTION一样)
- 例:
创建一个视图
sql = """
CREATE OR REPLACE VIEW stu_v_2 AS
SELECT id,name FROM stu_v WHERE id <= 8 WITH CASCADED CHECK OPTION;
"""
cur.execute(sql)
cur.fetchall()
插入一条数据
sql = """
INSERT INTO stu_v_2 VALUES(9,'plj');
"""
cur.execute(sql)
conn.commit()
cur.fetchall()
此时会插入失败,因为插入的id=9不满足id<=8。
视图的查询
查询创建视图的SQL语句
SHOW CREATE VIEW 视图名称;
查询视图的数据
SELECT * FROM 视图名称...;
视图的修改
把CREATE改为ALTER 即可,用REPLACE也彳亍。
ALTER VIEW 视图名称[(字段列表)] AS SELECT语句 [WITH[CASCADED|LOCAL]CHECK OPTION]
视图的删除
DROP VIEW [IF EXISTS] 视图名称 [,视图名称] ...
视图的插入
和表的插入一样。
- 例:
sql = """
INSERT INTO stu_v VALUES(6,'PLJ');
"""
cur.execute(sql)
conn.commit()
cur.fetchall()
视图的更新
- 要使视图可更新,视图中的行与基础表中的行必须是一一对应的关系
- 当视图包含:聚合函数、DISTINCT、GROUP BY、HAVING、UNION 则不可更新
- 对视图插入数据,对应基础表也会插入数据。
视图的作用
- 简化操作:可将经常使用的查询定义为视图
- 安全:可以通过视图使用户只能查询和修改指定的字段(数据库授权做不到)
- 数据独立:可隔离基础表结构变化带来的影响