mysql事务

数据库事务四大特性、隔离级别

拈花ヽ惹草 提交于 2020-02-18 18:05:53
【以转账为例】 事务 事务是指满足ACID的一组操作,可以通过Commit提交一个事务,也可以使用Rollback进行回滚。 ACID 1.原子性(Atomicity) 事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。 2.一致性(Consisitency) 数据库在事务执行前后都保持一致性状态。即转账前后,两个人账户总金额不变。 3.隔离性(Isolation) 根据隔离级别,一个事物所作的修改对于其他事务来说是不确定的。 4.持久性(Durability) 一旦事务提交,则其所作的修改将会永远保存到数据库中。 隔离级别 mysql默认的隔离级别是可重复读。 下面的代码所运行的两个事务需要在两个不同的session中执行,开启两个客户端。 1.读未提交 READ UNCOMMITTED 读未提交:事务中的修改,即使没有提交,对其他事务也是可见的。 事务1: 1 set session transaction isolation level read uncommitted; 2 3 start transaction; 4 update user set money = money - 100 where id = 1; 5 update user set money = money + 100 where id = 2; 6 commit;

JAVA事务系列三:JTA事务

徘徊边缘 提交于 2020-02-17 19:39:20
什么是JTA? JTA全称Java Transaction API ,即Java事务API,英文解释: Java Transaction API (JTA) specifies standard Java interfaces between a transaction manager and the parties involved in a distributed transaction system: the resource manager, the application server, and the transactional applications. JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。 JTA允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。 JTA的主要接口: 位于javax.transaction包中 a、UserTransaction接口:让应用程序得以控制事务的开始、挂起、提交、回滚等。由Java客户端程序或EJB调用。 b、TransactionManager 接口:用于应用服务器管理事务状态 c、Transaction接口:用于执行相关事务操作 d、XAResource接口

Mysql存储过程、触发器和事务

会有一股神秘感。 提交于 2020-02-17 14:31:47
一、存储过程 定义存储过程 语法: create procedure 过程名(参数1,参数2....) begin sql语句; end 创建存储过程之前我们必须修改mysql语句默认结束符; 要不能我们不能创建成功 , 使用 delimiter 可以修改执行符号。 mysql> delimiter % #这样结束符就为% mysql> create procedure selCg() -> begin -> select * from category; -> end % 调用存储过程 语法: call 过程名(参数1,参数2); mysql> call selCg() ; 存储过程参数类型 In 参数 特点:读取外部变量值,且有效范围仅限存储过程内部 例 1 : mysql> delimiter // mysql> create procedure pin(in p_in int) -> begin -> select p_in; -> set p_in=2; -> select p_in; -> end // mysql> delimiter ; #使用完马上恢复默认的 mysql> call pin(1); #调用pin存储过程 例 2 :定义存储过程 getOneBook,当输入某书籍 id 后,可以调出对应书籍记录 mysql> create procedure

mysql: lock wait timeout exceeded; try restarting transaction

丶灬走出姿态 提交于 2020-02-17 06:48:07
项目中遇到: lock wait timeout exceeded; try restarting transaction 的问题。 出错的语句是: select id from A where id=1 for update 即锁等待超时, 可能原因分析:并发场景下有一个事务对表A的id等于1的记录进行select for update操作,开启了事务但是并未提交,此时另外的事务对表A的事务操作就会等待锁,最终等待超时报错。 需要检查代码中对事务的开启、提交方面是否有问题。需要保证代码中再进行完for update操作后,事务一定提交或回滚。 Mysql 数据库采用InnoDB模式,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错,可以考虑调大innodb_lock_wait_timeout参数的值,或者在代码中增加重试操作,等待另一个事务提交,流程则可继续进行。 来源: CSDN 作者: 怠惰的小小白 链接: https://blog.csdn.net/qq_35462323/article/details/104338645

MySQL锁与事务隔离级别

主宰稳场 提交于 2020-02-16 22:39:21
1、概述 (1) 锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除了传统的计算资源(如CPU、RAM、IO等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。 (2) 锁的分类 从性能上分为 乐观锁 和 悲观锁 乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。 例子:① 在数据库的表中加一个version字段,用来记录每次修改数据的版本号,防止并发修改数据出错;② CAS原子类。 悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。 例子:synchronized关键字。 从对数据库操作的类型分为 读锁 和 写锁 (都属于悲观锁) 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。 写锁(排它锁):当前写操作没有完成前,它会阻断其他session的写锁和读锁。(session:数据库连接) 从对数据操作的粒度分为 表锁 和 行锁 。 2、表锁与行锁 (1) 表锁( 偏读 ) 表锁偏向MyISAM存储引擎 ,开销小,加锁快,无死锁

Innodb核心特性——事务

拟墨画扇 提交于 2020-02-16 18:18:49
Innodb核心特性——事务 一、什么是事务? 主要针对DML语句(update,delete,insert) 一组数据操作执行步骤,这些步骤被视为一个工作单元: 1)用于对多个语句进行分组 2)可以在多个客户机并发访问同一个表中的数据时使用 所有步骤都成功或都失败 1)如果所有步骤正常,则执行 2)如果步骤出现错误或不完整,则取消 二、事务通俗的理解 伴随着“交易”出现的数据库概念。 我们理解的“交易”是什么? 1)物与物的交换(古代) 2)货币现金与实物的交换(现代1) 3)虚拟货币与实物的交换(现代2) 4)虚拟货币与虚拟实物交换(现代3) 数据库中的“交易”是什么? 1)事务又是如何保证“交易”的“和谐”? 2)ACID # 10.0.0.51的第一个窗口 # 1.创建一个转账表 mysql> use test mysql> create table jiaoyi; mysql> insert into jiaoyi values('msy',1000), mysql> select * from jiaoyi; +------+-------+ | name | money | +------+-------+ | msy | 1000 | | hjm | 1000 | +------+-------+ # 2.开始事务 mysql> begin; # 3.更改数据

mysql事务

☆樱花仙子☆ 提交于 2020-02-16 18:13:22
什么是事务 一系列有序的数据库操作: 要么全部成功 要么全部回退到操作前状态 中间状态对其他连接不可见 事务的基本操作 基本操作 说明 start transaction; 开始事务 commit; 提交(全部完成) rollback; 回滚(回到初始状态) 图中便是数据库中的事务操作;及 开始事务-->SQL操作-->commit/rollback; savepoint,保存点,在事务回滚时,可以回滚到保存点; 而提交只能全部提交不能仅提交保存点; savepoint savepoint_name; rollback to savepoint_name; commit; 事务开始也可以用 begin;或者 start transaction; 清空表数据: mysql> select * from ttt; +---+------+------+ | a | b | c | +---+------+------+ | 1 | 1 | 1 | +---+------+------+ 1 row in set (0.00 sec) mysql> truncate table ttt; Query OK, 0 rows affected (0.01 sec) mysql> select * from ttt; Empty set (0.00 sec) 当多个连接同时连在一个数据库中时

【事务, 锁】

一世执手 提交于 2020-02-16 17:11:34
事务特性 ACID A:atom原子性 C:consistency 一致性 I:isolation 隔离性 D:durability 持久性 隐式提交 保存点 隔离性有四个级别 右边的第一次读和第二次读的不一样。这就是不可重复读。 右边第一次查到12条记录,第二次查到13条记录。这叫幻读。 以上隔离性四个级别都是sql标准。 mysql在实现sql标准时,再可重复读级别已经解决幻读的情况。 来源: CSDN 作者: 嘤嘤怪QQQ 链接: https://blog.csdn.net/zj20165149/article/details/104342363

Spring编程式事务管理的简单实现

懵懂的女人 提交于 2020-02-16 12:05:30
一个很简单的Spring JDBC 编程式事务的简单实现,代码逻辑较简单,希望有可能帮助初学的同学。本例使用mysql8.0,在db3数据库下有个student表,内含两个属性,id与name。 import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; public class JdbcTemplateTest { public static void

mysql三:表操作

旧街凉风 提交于 2020-02-16 08:13:26
阅读目录 一 存储引擎介绍 二 表介绍 三 创建表 四 查看表结构 五 数据类型 六 表完整性约束 七 修改表ALTER TABLE 八 复制表 九 删除表 一 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 1. 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的 表 ===> 文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 :比如处理文本用txt类型,处理表格用excel,处理图片用png等 数据库中的表也应该有不同的类型, 表的类型不同 ,会对应mysql不同的 存取机制 ,表类型又称为 存储引擎 。 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方 法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和 操作此表的类型) 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql 数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据 自己的需要编写自己的存储引擎 SQL 解析器、SQL 优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每 个数据库都有这么多存储引擎。MySQL