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()

视图检查选项

  1. 当使用WITH CHECK OPTION子句创建视图时,MySQL会检查正在更改的行是否符合视图规则
  2. MySQL允许基于另一个视图创建视图,会检查依赖视图中规则的一致性
  3. CASCADED:会检查所有依赖视图(无差别)(用法和WITH CHECK OPTION一样)
  4. 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()

视图的更新

  1. 要使视图可更新,视图中的行与基础表中的行必须是一一对应的关系
  2. 当视图包含:聚合函数、DISTINCT、GROUP BY、HAVING、UNION 则不可更新
  3. 对视图插入数据,对应基础表也会插入数据。

视图的作用

  1. 简化操作:可将经常使用的查询定义为视图
  2. 安全:可以通过视图使用户只能查询和修改指定的字段(数据库授权做不到)
  3. 数据独立:可隔离基础表结构变化带来的影响