mysql事务

数据库四种隔离级别

那年仲夏 提交于 2019-12-03 17:37:53
https://www.cnblogs.com/catmelo/p/8878961.html 起初隔离级别为read uncommitted 读未提交;a,b两个会话,分别开启两个事务,然后a向b转了500元钱,但a未提交该事务, 此时b查看,发现多了500.然后a回滚事务,b再查看账户,发现根本就没有多500.这便是 脏读 。脏读便是可以读取到另一个事务尚未提交的数据。 如果我们此时将隔离级别提升为read committed 读已提交,便可避免脏读。同样b两个会话,分别开启两个事务,然后a向b转了500元钱, 但a未提交该事务,此时b查看,依旧是原钱数. 但此时,如果a 提交事务,b再去查看,发现此时多了500,对b而言,在一个事务中,两次查询的结果不一致,这便是 不可重复读 。 如果我们此时将隔离级别提升为repeatable read 可重复读 ,可以避免脏读和不可重复读的发生。同样a 提交事务,b再去查看,发现 依旧是原钱数,b只能结束当前事务,在开启一个新事务,才能查询到数据的变化,这al便避免了不可重复读。 如果我们设置了 seriizable 串行化,就相当于锁表,某一时间内只允许一个事务访问该表。 在可重复读中,该sql第一次读取到数据后,就将这些数据加锁(悲观锁),其它事务无法修改这些数据,就可以实现可重复读了。但 这种方法却无法锁住insert的 数据

Django的事务

谁说我不能喝 提交于 2019-12-03 17:33:57
Django中-事务操作 如何在Django中进行事务操作呢? 近期,公司里要使用Django开发一套金融相关的系统。 涉及钱了.....安全安全安全 如果钱转到一半,系统崩了,咋办? 如果钱汇到一半,系统崩了,咋办? 如果东西买到一半,系统崩了,咋办? 我钱转到一半,钱已经从我的账户扣除了,但是,服务出问题了,当掉了,这条任务执行到一半停掉了,那我的钱呢??? 这就会造成严重的损失? 怎么办? 还记得在Mysql数据库中的原子操作吗? 不记得??!!! 好吧,我告诉你。 客户A要给客户B转一笔钱,这个在数据库中需要进行两步:   1.客户A减钱   2.客户B加钱 如果在第一步结束后,服务器出现异常,停下了,第二步没有进行,如果数据库使用了事务操作,真的出现异常的时候,前面的操作会进行回滚。 简单的说就是:要么全部执行成功,要么一个都不执行 这个回滚的操作就叫做数据库的原子性操作。 但是啊,这是在MySQL数据库中,我们在Django的ORM中如何进行呢? 首先,我们要导入一个Django的内置模块 from django.db import transaction 接着,就可以使用了 from django.db import transaction with transaction.atomic(): //ORM操作 pass 我们举个例子测试一下 1.创建一个项目

Python - MySQL 数据库连接 - PyMySQL 驱动 - 第二十五天

情到浓时终转凉″ 提交于 2019-12-03 17:22:52
序言 本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查。 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 PyMySQL 安装 在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。 PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。 如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL: pip install pymysql 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。 连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你也可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。 在你的机子上已经安装了 Python MySQLdb 模块。 实例: import

MySQ应用报错:java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

此生再无相见时 提交于 2019-12-03 17:04:59
开发反馈,某业务系统插入一条记录的时候,日志报错,插入失败: ### Error updating database. Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction ### The error may involve defaultParameterMap ### The error occurred while setting parameters ### SQL: INSERT INTO ... 登录mysql,使用show processlist查看没有发现相关会话的存在。然后使用show engine innodb status也没有最近的死锁信息。 至此,可以猜测,因为变量innodb_lock_wait_timeout的缘故,插入失败的会话已经结束。 以下是变量innodb_lock_wait_timeout的用途说明: innodb事务等待行锁的时间,单位是秒,等待超过这个时间后就会放弃。默认是50秒。尝试访问被另一个InnoDB事务锁定的行的事务在发出以下错误之前最多要等待这么多秒才能对该行进行写访问: ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting

MySQL数据库基础(一)——MySQL数据库简介

a 夏天 提交于 2019-12-03 16:21:34
MySQL数据库基础(一)——MySQL数据库简介 一、MySQL简介 1、MySQL简介 MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。目前MySQL被广泛地应用在Internet上的中小型网站中,由于体积小、速度快、总体拥有成本低,开放源码、免费,一般中小型网站的开发都选择Linux + MySQL作为网站数据库。 MySQL是一个关系型数据库管理系统,MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,就增加了速度并提高了灵活性。 MySQL的官方网站的网址是:www.mysql.com 2、MySQL特性 MySQL是一种使用广泛的数据库,特性如下: A、使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性    B、支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。    C、为多种编程语言提供了API。编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。    D、支持多线程,充分利用CPU资源    E、优化的SQL查询算法,有效地提高查询速度    F

MySQL事务

心不动则不痛 提交于 2019-12-03 15:21:34
  在上一篇文章中我们介绍了事务的概念,还有事务的相关的特性和隔离属性。既然我们了解了事务是什么东西,那么事务是数据存储中怎么使用的呢,在这篇文章中我们就来看看事务在MySQL中的应用。   首先我们知道MySQL是一个关系型的数据库,MySQL支持多种存储引擎,其中InnoDB是支持事务的。接下来我们就看看在MySQL的InnoDB的存储引擎中事务的使用.   MySQL关于事务的主要命令有以下几个 START TRANSACTION;-- 开启事务 COMMIT;-- 提交事务 ROLLBACK;-- 回滚事务   假设我们在MySQL的数据库中存在以下InnoDB表: 表:test_table_a 字段 类型 id int name varchar(5)   MySQL有个事务开关语句用来设置当前会话中是否是默认提交事务的语句,在支持默认提交的情况下,即每个语句都会被当成一个事务,然后在执行单个语句的时候,会自动提交一个事务,默认情况下,MySQL的这个开关是开启的。 SET autocommit = {0 | 1}   在接下来例子中我们都会使用去主动开启一个事务,而不是使用MySQL的默认提交。   我们开启一个MySQL事务,插入数据,提交事务,再查出数据,可以看到我们的事务成功提交数据,并且在提交可以查出对应的数据。 START TRANSACTION;-- 开启事务

java-day23

只谈情不闲聊 提交于 2019-12-03 15:15:21
事务的四大特征:   1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。   2.持久性:当事务提交或回滚后,数据库会持久化的保存数据。   3.隔离性:多个事务之间,相互独立。   4.一致性:事务操作前后,数据总量不变。 事务的隔离级别   概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。   存在问题     1.脏读:一个事务,读取到另一个事务中没有提交的数据。     2.不可重复读(虚读):在同一个事务中,两次读取到的数据不一样。     3.幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。   隔离级别     1.read uncommitted:读未保存       产生问题:脏读、不可重复读、幻读     2.read committed:读已保存  (Oracle)       产生问题:不可重复读、幻读     3.repeatable read:可重复读  (MySQL默认)       产生问题:幻读     4.serializable:串行化       可以解决所有问题     注意:隔离级别从小到大安全性越来越高,但效率越来越低。     数据库查询隔离级别:       select @@tx

spring_事物

浪尽此生 提交于 2019-12-03 13:17:39
spring_事物 1.事务   1.1 什么是事务:    事务(TRANSACTION) 是作为单个逻辑工作单元执行的一系列操作。 多个操作作为一个整体向系统提交,要么都执行,要么都不执行。 事务是一个不可分割的逻辑单元。    1.2 事务的特性:      事务具备以下四个特性,简称 ACID 属性。 原子性(Atomicity):   事务是一个完整的操作,事务的各步操作都是不可再分的,要么都执行,要么都不执行。 一致性(Consistency):   当事务完成时,数据必须处于一致的状态。 隔离性(Isolation):   并发事务之间相互独立、隔离,它不应以任何方式依赖于或影响其他事务。 持久性(Durability):   事务完成后,它对数据库的修改被永久保持。    1.3 mysql 事务操作---简单 ABCD 一个事务 Connection conn = null; try{ //1 获得连接 conn = ...; //2 开启事务 conn.setAutoCommit(false); A B C D //3 提交事务 conn.commit(); } catche(){ //4 回滚事务 conn.rollback(); }    1.4 mysql 事务操作---Savepoint 需求:AB(必须),CD(可选) Connection conn

Springboot全局事务处理

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-03 13:13:01
什么是全局事务 Spring Boot(Spring)事务是通过aop(aop相关术语:通知(Advice)、连接点(Joinpoint)、切入点(Pointcut)、切面(Aspect)、目标(Target)、代理(Proxy)、织入(Weaving))切面编程来实现的,此时我们就可以对指定的包的service的方法进行事务控制. 为什么要使用全局事务 在实际开发中,有些同学命名方法时不规范,多个成员开发时,会造成混乱,维护成本特别高,代码可读性不高. 怎么配置Spring Boot全局事务 Spring Boot使用事务是非常简单的,只需要在配置类或者启动类上添加注解@EnableTransactionManagement开启事务支持,然后在service层添加注解 @Transactional(rollbackFor = Exception.class)即可. 下面是全局事务代码实现 特别提醒:mysql对应的表必须是InnoDB型才可支持事务,myisam不支持事务 package com.test.sketelon.util.config; ​ import org.aspectj.lang.annotation.Aspect; import org.springframework.aop.Advisor; import org.springframework.aop

mysql杂说——mysql锁

a 夏天 提交于 2019-12-03 13:11:23
Mysql用到了很多这种锁机制,行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。这些锁统称为悲观锁(Pessimistic Lock)。 1、mysql存储引擎分为:innodb 和 myisam 事务, 表锁 行锁 innodb 支持 支持 支持    myisam 不支持    支持    不支持 2、数据库锁:行锁的是索引 加锁的目的:减少资源的竞争 表级锁: 开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁: 开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 3、 mysql5.7解决了幻读:解决思路通过间隙锁 防止幻读,以满足相关隔离级别的要求 间隙锁:1,3,5 存在(-∞,1),(1,3),(3,5),(5,∞) 四个间隙,分别存在4个间隙锁 4、InnoDB实现了以下两种类型的行锁。 共享锁(s):又称读锁。 允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这 保证了其他事务可以读A , 但在T释放A上的S锁之前不能对A做任何修改 。 排他锁(X):又称写锁。