打好数据库基础,玩转数据库查询(完结篇)

数据库视图

什么是视图?

视图是一种虚拟表,是从一个表或者多个表中导出来的数据组成的虚拟表,并不在数据库中真实存在,但是作用和真实表一样,包含一系列带有行和列的数据。简单来说,视图就是在数据库中执行了某段查询语句的查询结果,该结果被一张虚拟表存储起来,不存在数据库中,通过特定的sql语句可以直接查看这个结果,而不用重新在数据库中查一遍。

视图的优点和缺点

视图的优点:

  • 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对于用户来说是已经过滤好的复合条件的结构。
  • 安全:使用视图的用户只能访问到他们被允许查询的结构集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
  • 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,原表增加列队视图没有印象;原表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

视图的缺点:

  • 性能:从数据库查询试图数据可能会很慢,特别是如果视图是基于其他视图创建的时候。
  • 表依赖关系:将数据库的基础表创建一个视图。每当更改与其他相关联的表的结构时,都必须更改视图。

(二)视图的操作

1、创建视图

基本语法:

create view view_name as sql查询语句;

使用一张学生表和一张班级表,创建查询学生基本信息和班级信息的视图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、视图数据查询

基本语法:

select * from view_name;

在这里插入图片描述
可以看到原来我们需要使用一串查询语句才可以查询到的数据,现在只需要用这么一小句话就可以实现了。因此,将复杂的SQL语句实现隐藏起来,提供简单的操作方式,是视图的非常重要的功能之一。

3、修改视图信息

在视图创建完成后,需求如果发生变化,需要对视图中的展示列进行调整,此时原有视图已经不满足需求的情况下可以修改视图的定义。
视图修改基础语法:

alter view view_name as select查询语句;

其实修改视图就是将这个视图舍弃原来的关联查询语句,关联新的查询语句。
案例:将上面的视图中添加学生性别和出生日期
在这里插入图片描述
再查询一次视图数据
在这里插入图片描述
我们发现了视图中的有我们新添加的数据,视图的操作对于原始数据表的耦合度是比较高的,所以说通过视图查看到的数据可以是安全级别较高的数据,而且通过视图查看也不怕会因为查询语句复杂而误操作源数据库中的数据。

4、数据的更新

由于视图本身是没有任何数据的,只是一张结果展示表。所以理论上来说我们是不能通过视图来操作任何数据,我们只能通过真实表中的数据操作,从而影响到视图中展示的数据。

这里我们删除原表中的部分数据(将曹仁和曹洪删了,建议开启事务操作进行测试,方便回滚数据):
在这里插入图片描述
再次查看视图表
在这里插入图片描述
可以发现曹仁和曹洪两名学生的信息没有了。所以通过修改原表的数据可以影响到视图的数据展示的。
假如我们直接删除视图中的数据会发生什么样的结果呢?
在这里插入图片描述
这里就可以看到语句执行报错了,提示说不能从join视图“demo.stu_class”中删除。视图在默认情况下都是只读的,不允许通过视图直接进行数据的改动,这也是数据安全隔离级别的一种手段。

如果非得要对视图完成数据的操作,需要满足以下条件一条都不可以有,才可以通过视图更新表中的数据:

  • (1)创建视图时的查询语句中有聚合函数;
  • (2)创建视图时的查询语句中有distinct关键字;
  • (3)创建视图时的查询语句中有group by字句;
  • (4)创建视图时的查询语句中有order by字句;
  • (5)创建视图时的查询语句中有having 字句;
  • (6)创建视图时的查询语句中有union运算符;
  • (7)位于选择列表中的子查询;
  • (8)from字句中包含多个表;
  • (9)select语句中引用了不可更新视图;
  • (10)where字句中的子查询,引用from字句中的表;
  • (11)algorithm选项指定为temptable(使用临时表总会使视图成为不可更新的)。

5、查询视图创建语句

show create view view_name;

在这里插入图片描述

6、删除视图

drop view view_name;

在这里插入图片描述
在这里插入图片描述

二、python交互数据库

(一)pymysql

想要使用python和数据库进行交互,需要用到第三方库pymysql。
安装pymysql:
cmd命令行输入:python3 -m pip install pymysql
注意这里是python3中的执行语句。如果是python2的话操作数据库是使用mysqldb模块,而python3用的是pymysql。
操作数据库一般步骤:

  • 1、连接数据库
  • 2、获取一个访问数据的操作对象cursor()游标
  • 3、定义SQL语句
  • 4、执行sql语句
  • 5、处理结果
  • 6、关闭和数据库的连接,释放资源

(二)python连接mysql数据库

这里使用开发工具pycharm进行操作。

# 导入pymysql模块
import pymysql

# 连接数据库
conn = pymysql.connect(
    host='localhost',       # 数据库主机的IP地址
    user="root",            # 数据库登录账号
    password="root",        # 数据库登录密码
    database="test",        # 要连接的数据库
    port=3306,            # 连接数据库的端口号,如果没有改过的话,一般都是这个
    charset="utf8"         # 使用指定的编码连接数据库
)

# 关闭数据库连接,当创建了数据库连接后一定要记得关闭连接,
# 因为连接数据库并维持连接是需要消耗系统资源的。
conn.close()

在这里插入图片描述

(三)查询数据库中的数据

1、cursor游标对象

在执行的SQL语句中,使用频率最高的是select,insert,update,delete操作。
在完成这些数据库操作时需要使用cursor()方法获取游标对象来完成:

# 使用cuesor()方法获取游标对象
cur = conn.cursor()

# 关于对象的方法
# close()关闭
# excute()执行语句,结果会返回影响到的行数
# fetchone()获取查询结果集的第一个数据,返回一个元组
# fetchall()获取结果集的所有行,一行是一个元组

2、案例操作

import pymysql

# 数据库的连接信息
HOST = "localhost"
USER = "root"
PASSWORD = "root"
DATABASE = "test"
PORT = 3306
CHARSET = "utf8"

# cursor = None
# conn = None

# 使用异常包含处理过程,方便在finally中关闭和数据库的连接
try:
    # 连接数据库
    conn = pymysql.connect(
        host=HOST,
        user=USER,
        password=PASSWORD,
        database=DATABASE,    # 这个不写的话就默认进入到没选择数据库的时候
        port=PORT,
        charset=CHARSET
    )
    # 获取执行对象
    cursor = conn.cursor()
    # 定义查询sql语句
    sql = "select * from employee;"
    # 执行sql语句,execute()
    rows = cursor.execute(sql)
    # 获取查询结果
    result = cursor.fetchall()
    # 遍历查询结果
    for user in result:
        print(user)
    cursor.close()
    conn.close()

except Exception as e:
    print(f"执行过程出现异常{e}")

在这里插入图片描述
上述过程的查询结果如图,这样我们就实现了使用python操作MySQL数据库的方法了。

再来一个添加数据的操作

# 添加数据操作
    sql1 = "insert into employee(e_name,gender,department,salary) values('周工','男','董事会',22222.00)"

在这里插入图片描述
最后查询结果:
在这里插入图片描述
数据库操作到这里就算结束啦,感谢大家观看,希望大家可以从中有所收获。如果没看其他的文章记得在我的博客中查看前面的文章哦。谢谢支持~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值