MySQL数据库操作学习(6)事务与pymysql

文章目录

    • 1、视图
    • 2、索引
    • 3、存储引擎
    • 4、事务(重点)
      • ①介绍
      • ②事务隔离级别
    • 5、pymysql(重点)
      • ①导入模块
      • ②链接数据库对象
      • ③隐式事务
      • ④显性事务

1、视图

视图(View)是一种虚拟的表,它是基于一个或多个实际表(或其他视图)的查询结果集。视图本身并不包含实际的数据,而是根据定义视图时指定的查询语句动态生成结果。通过视图,用户可以以类似于表的方式访问和操作数据,而无需直接访问底层表。

以下是关于视图的一些重要信息和优点:

  1. 简化数据访问:视图可以隐藏底层表的复杂性,为用户提供一个简单易用的界面来访问数据。

  2. 数据安全性:视图可以限制用户只能访问他们需要的数据,通过在视图上设置权限来控制数据的访问。

  3. 数据一致性:视图可以确保数据的一致性,通过在视图中定义复杂的查询来确保数据的准确性。

  4. 重用性:视图可以重用查询逻辑,避免重复编写相同的查询语句。

  5. 性能优化:视图可以提高查询性能,通过预先计算和存储视图结果,减少重复计算的开销。

在创建视图时,需要定义视图的结构和查询语句。一旦视图创建完成,用户可以像操作表一样使用视图,包括查询、插入、更新和删除数据。视图可以根据需要进行更新,但有一些限制条件,例如视图必须包含主键或唯一键等。

总的来说,视图是数据库中一个非常有用的工具,可以提高数据访问的灵活性和安全性,同时简化复杂查询的操作。

# 创建视图表
create view 视图名称 as select 已查询语句;create view stu_2301 as select * from st1 where class = 2301;
select * from stu_2301;# 删除视图
drop view 视图名称;# 查询当前数据库所有的视图
show full tables in 数据库名称 where table_type like 'view';show full tables in demo1 where table_type like 'view';

2、索引

索引:就是目录
一般如果你的表查询操作很少,数据很少(少于1w)不建议索引

目的:就是优化我们的数据库工作效率,但是也会占用资源

  • 主键索引
  • 普通索引
  • 唯一索引
# 在创建表的时候创建索引
# 格式
create table 表名(字段名 数据类型,字段名 数据类型,# 普通索引index 索引名称(字段名),# 唯一索引unique 索引名称(字段名));# 能创建表后插入索引create index 索引名称 on 表名(字段名);
create unique 索引名称 on 表名(字段名);# 查询索引
show keys from 表名;select * from t21 WHERE id = 11;
select * from t22 WHERE id = 11;

3、存储引擎

在关系型数据库中,存储引擎(Storage Engine)是负责管理数据存储和检索的核心组件,它定义了数据的存储格式、索引类型、查询处理方式等。不同的存储引擎具有不同的特性和适用场景,常见的存储引擎包括但不限于以下几种:

  1. InnoDB

    • InnoDB 存储引擎是 MySQL 中最常用的存储引擎之一,具有事务支持、行级锁、外键约束等特性。
    • InnoDB 存储引擎适合于需要事务支持和高并发读写操作的场景,如在线交易处理系统。
  2. MyISAM

    • MyISAM 存储引擎是 MySQL 中的另一个常见存储引擎,具有全文索引、压缩表等特性。
    • MyISAM 存储引擎适合于读密集型的应用,如数据仓库、报表系统等。
  3. Memory

    • Memory 存储引擎将数据存储在内存中,提供了快速的数据访问速度,但数据不会持久化到磁盘。
    • Memory 存储引擎适合于临时数据存储、缓存等场景。
  4. NDB Cluster

    • NDB Cluster 存储引擎是 MySQL Cluster 中的存储引擎,支持分布式存储和高可用性。
    • NDB Cluster 存储引擎适合于需要水平扩展和高可用性的应用。
  5. PostgreSQL 中的存储引擎

    • PostgreSQL 中没有明确的存储引擎概念,而是使用表空间(Tablespaces)来管理数据存储。不同的表空间可以使用不同的存储引擎或文件系统。

选择合适的存储引擎取决于应用的需求,如对事务支持、并发性能、数据完整性、存储空间利用率等方面的要求。在设计数据库时,需要根据具体场景和需求选择最适合的存储引擎,以达到最佳的性能和可靠性。

# 查询储存引擎:
show engine;

4、事务(重点)

①介绍

事务(Transaction)是数据库管理系统中用于确保数据操作的一致性和完整性的一种机制。事务是一组数据库操作(如插入、更新、删除数据)的逻辑单元,要么全部操作成功,要么全部操作失败,保证了数据的完整性和一致性。事务具有以下四个特性,通常简称为 ACID 特性:

  1. 原子性(Atomicity)

    • 原子性指事务中的所有操作要么全部成功提交,要么全部失败回滚。即事务是不可分割的最小工作单位,要么全部执行,要么全部撤销。
  2. 一致性(Consistency)

    • 一致性指事务在执行前后,数据库从一个一致的状态转换到另一个一致的状态。即事务执行前后,数据库的完整性约束没有被破坏。
  3. 隔离性(Isolation)

    • 隔离性指多个事务并发执行时,每个事务的操作应该与其他事务隔离,互不干扰。事务之间应该是相互独立的,不应该相互影响。
  4. 持久性(Durability)

    • 持久性指一旦事务提交,其所做的修改将会永久保存在数据库中,即使系统发生故障,数据也不会丢失。

事务通常遵循以下四个基本操作步骤,通常称为 ACID 原则:

  • 开始事务(Begin Transaction):标志着事务的开始。
  • 执行事务操作(Perform Transaction Operations):包括插入、更新、删除等数据库操作。
  • 提交事务(Commit Transaction):将事务中的操作永久保存到数据库中。
  • 回滚事务(Rollback Transaction):撤销事务中的操作,回到事务开始前的状态。

通过事务的使用,可以确保数据库操作的一致性和完整性,防止数据丢失或不一致的情况发生。在开发应用程序时,合理地使用事务可以保证数据的可靠性,尤其在涉及多个数据库操作时更为重要。

事务处理:insert, update, delete语句

②事务隔离级别

事务隔离级别是数据库管理系统中用来控制事务之间相互影响程度的设置。不同的隔离级别决定了事务在并发执行时对数据的可见性和影响范围,从而影响了数据库系统的并发控制和性能。常见的事务隔离级别包括以下四种:

  1. 读未提交(Read Uncommitted)

    • 最低的隔离级别,允许一个事务读取另一个事务未提交的数据修改。
    • 可能导致脏读(Dirty Read)和不可重复读(Non-Repeatable Read)问题
    1. 脏读(Dirty Read)
      • 脏读指一个事务读取了另一个事务未提交的数据修改。换句话说,一个事务读取到了另一个事务正在修改但尚未提交的数据。
      • 如果这个事务最终回滚/撤销,那么读到的数据就是无效的,这就是“脏读”。
    2. 不可重复读(Non-Repeatable Read)
      • 不可重复读指在同一个事务内,多次读取同一数据时,由于其他事务的更新操作,每次读取的数据可能不同。
      • 换句话说,一个事务在读取同一数据时,由于其他事务的更新操作,导致每次读取的数据都不一致,这就是“不可重复读”。
  2. 读已提交(Read Committed)

    • 允许一个事务只能读取已经提交的数据,避免了脏读问题。
    • 但可能导致不可重复读和幻读(Phantom Read)问题。

    幻读(Phantom Read)是数据库中另一个并发问题,与不可重复读类似,也是指在同一个事务内多次执行相同的查询,但由于其他事务的插入或删除操作,每次查询的结果集可能不同的现象。

    举个例子来说明幻读:假设事务A首先执行一个查询,查询某个范围内的数据行,然后事务B在这个范围内插入了一行新数据并提交事务,接着事务A再次执行相同的查询,这时会发现结果集中多出了一行数据,就好像出现了幻影般的新数据,这就是幻读。

  3. 可重复读(Repeatable Read)

    • 不可重复读通常涉及到同一行数据的更新或删除操作,在可重复读级别下,事务在第一次读取数据后,即使其他事务对该数据进行了修改或删除,事务再次读取该数据时仍然能够看到第一次读取时的,事务在第一次读取数据后会对相关数据行进行加锁,防止其他事务修改或删除这些数据,。
    • 而幻读通常涉及到数据集合的变化,例如在一个范围内新增或删除数据行。在可重复读级别下,虽然事务会对读取的数据行进行加锁,但并不会锁定整个范围,因此其他事务仍有可能在该范围内插入新的数据行,导致事务多次读取同一范围数据时发生幻读。可重复读级别下的锁定机制无法完全阻止其他事务对数据集合的影响,因此无法完全避免幻读问题。
  4. 串行化(Serializable)

    • 最高的隔离级别,确保事务之间完全隔离,避免了脏读、不可重复读和幻读问题。

    • 在串行化级别下,数据库会以串行化的方式执行事务,即每个事务都好像是在系统中独立运行一样,不会受到其他事务的影响。具体来说,串行化级别会对事务执行的数据进行严格的加锁,确保事务在读取和修改数据时不会受到其他事务的干扰,从而保证了数据的一致性和完整性。

      虽然串行化级别能够避免绝大部分的并发问题,但由于其严格的加锁机制可能导致系统性能下降,因此在实际应用中并不常用。一般情况下,开发人员会根据实际需求和应用场景选择合适的事务隔离级别,权衡数据一致性和性能之间的关系。

选择合适的事务隔禽级别取决于应用的需求和对数据一致性的要求。通常情况下,读已提交和可重复读是较为常用的隔离级别,可以根据具体场景来选择。在开发应用程序时,需要根据业务需求和性能考量来合理设置事务隔离级别,以确保数据的一致性和并发性能。

/*
事务还可以分两个大类:隐性事务和显性事务隐性事务很简单: 就是inset,delete, update 都是事务显性事务带有明显的开始和结束的标志,下面就开始创建显性事务*/
# 没有开始事务的时候, 这个是不能回滚,因为是自动提交事务
insert into account(name, money) values ("余恒镕", 50);
insert into account(name, money) values ("丁国峰", 20);# 回滚事务
# begin 开始事务
begin;
insert into account(name, money) values ("陈婷", 5000);
insert into account(name, money) values ("小茗同学", 20000);select * from account;ROLLBACK;
select * from account;# 提交事务
# begin 开始事务
begin;
insert into account(name, money) values ("陈婷", 5000);
insert into account(name, money) values ("小茗同学", 20000);select * from account;commit;
select * from account;# 回滚必须在提交之前执行

5、pymysql(重点)

使用python执行mysql的sql语句进行增删改查

①导入模块

pip install pymysql

②链接数据库对象

import pymysql# 开始建立数据库链接对象 dbdb = pymysql.connect(# host 主机地址,因为我们的数据都是本机的127.0.0.1 或者本机域名localhost​    host="localhost",# user 链接数据库的用户名​    user="root",# password 用户名的密码​    password="root",# 数据库字符编码​    charset="utf8",# 你要使用的数据库名称​    database="demo1")

③创建游标对象(指针)

# 创建游标对象(理解为指针)就是代表该链接的数据库# cursor专门创建游标cur = db.cursor()

③隐式事务

# 这里不需要分号, sql语句不区分sql = "DeSc st1"# 如何提交svaql语句和查看sql语句# execute 提交sql语句cur.execute(sql)
#execute是一个关键字或方法,用于执行SQL语句或命令。在Python的数据库操作中,通常使用execute方法来执行SQL语句,比如查询、插入、更新或删除数据。# 查看结果fetchall(), fetchone()# 返回嵌套元组print(cur.fetchall())

在数据库编程中,fetchall()fetchone()是用于从数据库中获取查询结果的方法。这两个方法通常与execute()方法一起使用,用于检索执行SQL查询后返回的数据。

  • fetchall(): 该方法用于从最后一次执行的查询中获取所有的结果行。它会返回一个包含所有结果行的列表,每一行都表示为一个元组。如果查询没有返回任何结果,fetchall()将返回一个空列表。

  • fetchone(): 该方法用于从最后一次执行的查询中获取下一行结果。它会返回一个包含一行结果的元组。每次调用fetchone()时,游标会向下移动到下一行数据。如果没有更多的行可用,fetchone()将返回None

这两个方法在处理查询结果时非常有用,可以帮助您从数据库中检索所需的数据并进行进一步处理。如果您有任何疑问或需要更多解释,请随时告诉我。

④显性事务

# 如何设置显性事务# 插入到多个sql = "insert into st1(name, class, garden) values (%s, %s, %s)"values = [("xxx6", '2301', "女"),("xxx7", '2302', "男"),("xxx8", '2302', "女")]# 使用多条数据结合方法executemany(sql语句,数据)cur.executemany(sql, values)
db.commit()
  • cur.executemany(sql, values): 这个方法用于执行一条SQL语句多次,每次使用不同的参数值。其中sql是要执行的SQL语句,values是一个包含多个参数元组的列表。这个方法可以有效地插入多行数据,减少与数据库的交互次数,提高效率。

b.commit(): 这个方法用于提交当前的事务,将之前的所有数据库操作永久保存到数据库中。如果不调用commit()方法,之前的操作只是暂时保存在内存中,直到调用commit()方法才会写入数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建自己的博客-拾壹博客

写在前面 唠叨两句 作为一个技术开发人员,没有一个自己的博客,人生注定缺少点什么东西,是不是?最近研究了一些博客搭建,本文是使用开源项目”拾壹博客“进行搭建。 推荐等级 所需技术难度:4星 后续自定义…

数据类型转换篇(二)

文章目录 7.11 float()7.12 hex()7.13 int()7.14 list()7.15 oct()7.16 ord()7.17 repr()7.18 set()7.19 str()7.20 tuple() 7.11 float() float() 是 Python 的内置函数,用于将一个数值或数值表示的字符串转换成浮点数(floating point number&#xff…

全栈的自我修养 ———— uniapp中加密方法

直接按部就班一步一步来 一、首先创建一个js文件填入AES二、创建加密解密方法三、测试 一、首先创建一个js文件填入AES 直接复制以下内容 /* CryptoJS v3.1.2 code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wi…

Matlab快捷键与函数

注释:注释对于代码的重要性我们就不做过多的解释了。不做注释的代码不是好代码。选中要注释的语句,按快捷键CtrlR,或者在命令行窗口上面的注释地方可以进行注释。当然也可以直接在语句前面“%”就可以(注意:一定要用英文符号&…

ES查询小技能

文章目录 引言I Kibana 查询命令1.1 分页查询1.2 索引总数1.3 多个查询条件1.5 查询结果去重II 查询文档2.1 查询类型2.2 结果解析2.3 分页和距离排序2.4 高亮III 创建索引并添加映射IV 集群状态4.1 查询集群状态4.2 查看索引数据V 设置账号密码<

移动硬盘故障解析:解决无法访问且位置不可用问题

在我们日常的工作和生活中&#xff0c;移动硬盘已成为存储和传输数据的重要工具。然而&#xff0c;有时我们会遇到移动硬盘无法访问且位置不可用的情况&#xff0c;这无疑给数据的存储和访问带来了极大的困扰。本文将深入探讨这一问题&#xff0c;分析其原因&#xff0c;并给出…

如何做时间管理?

前言 本篇是最近学习工作提效系列课程的第一篇&#xff0c;如何做时间管理&#xff1f;关于时间管理的内容老生常谈了&#xff0c;我自己之前也分享过针对时间管理的一些思考&#xff0c;比如 近期对「时间管理」的一些思考&#xff0c; 还有高效能人士的七个习惯的分享【读书…

计算地球圆盘负荷产生的位移

1.研究背景 计算受表面载荷影响的弹性体变形问题有着悠久的历史&#xff0c;涉及到许多著名的数学家和物理学家&#xff08;Boussinesq 1885&#xff1b;Lamb 1901&#xff1b;Love 1911&#xff0c;1929&#xff1b;Shida 1912&#xff1b;Terazawa 1916&#xff1b;Munk &…

Springboot笔记-02

1.使用Spring Initializer快速创建Spring Boot项目 IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目&#xff1b; 选择我们需要的模块&#xff1b; 向导会联网创建Spring Boot项目&#xff1b; 默认生成的Spring Boot项目&#xff1b; 主程序已经生成好了&#…

Linux:http协议初步认识

文章目录 OSI七层模型http协议域名路径信息请求和响应 编写一个httpserver OSI七层模型 在结束了前面对于序列化反序列化等内容的学习后&#xff0c;重新回到对于OSI模型的部分 如上所示的是对于OSI接口的示意图&#xff0c;在这当中可以看到会话层的概念&#xff0c;会话层的…

QPainter绘图和QChart图表和QCustomplot绘曲线图

一&#xff0c;QPainter绘图 Qt里的所有绘图&#xff0c;比如一个按钮和一个Label的显示&#xff0c;都有绘图系统来执行。绘图系统基于 QPainter、QPaintDevice和QPainEngine类。QPainter是可以直接用来操作绘图的类&#xff0c;而 QPaintDevice和QPainEngine都比QPainter更底…

FinalShell下载安装 + FinallShell远程连接Linux 教程

图形化&#xff0c;命令行 : windows下的图形化和命令行 : Linux下的图形化和命令行 : 在Linux下&#xff0c;普遍使用命令行操作 ; FinalShell 下载安装: 下载安装地址 : 这里给出windows的下载地址 : install 双击打开就好 : 然后点击下一步 : 选择下载地址&…

vue学习日记14:工程化开发脚手架Vue CLI

一、概念 二、安装 1.全局安装&查看版本 注意启动cmd输入命令 要以管理员运行哦 安装了一次就行以后不用再创建了 yarn global addvue/cli vue --version 显示了版本号即可 2.创建项目架子 创建项目的路径在哪 项目就在哪 项目名字不能用中文 vue create project-n…

搜索测试题题解(3月19号总结)

目录 1.Dungeon Master 2.Oil Deposits 3.Find a way 1.Dungeon Master Sample InputcopyOutputcopy 3 4 5 S.... .###. .##.. ###.###### ##### ##.## ##...##### ##### #.### ####E1 3 3 S## #E# ###0 0 0Escaped in 11 minute(s). Trapped! 这道题与普通的bfs模板题就是…

线性顺序表算法库

list.cpp 具体函数实现 #include <stdio.h> #include "list.h" #include <malloc.h>/************************************************** ①函数名: CreateList 功 能: 用数组构建顺序表 参 数: ①SqList *&L:传入的线性表 ②ElemType a[]:使用…

Iterator对象功能学习

package config;import java.util.Iterator; import java.util.Properties; import java.util.Set;/*** 这个类演示了如何使用Properties类来存储和访问键值对。* Properties类继承自Hashtable&#xff0c;因此它可以用来存储键值对数据&#xff0c;且支持同步。*/ public clas…

代码随想录算法训练营第十七天|110、平衡二叉树

110. 平衡二叉树 已解答 简单 相关标签 相关企业 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&am…

计算机二级Python基础操作题

题目来源&#xff1a;计算机二级Python半个月抱佛脚大法&#xff08;内呈上真题版&#xff09; - 知乎 第4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;9&#xff0c;10&#xff0c;11套 1. 基础题1 sinput() print("{:\"^30x}".format(eval(s))) b …

安科瑞ADL逆流检测多功能电表

ADL400 导轨式多功能电能表&#xff0c;是主要针对电力系统&#xff0c;工矿企业&#xff0c;公用设施的电能统计、管理需求而设计的一款智能仪表&#xff0c;产品具有精度高、体积小、安装方便等优点。集成常见电力参数测量及电能计量及考核管理&#xff0c;提供上48月的各类电…

2024年企业上云补贴,免费领取腾讯云优惠代金券

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…