mysql事务

Mysql事务隔离级别

只谈情不闲聊 提交于 2019-12-04 04:18:22
一、事务的四大特性(简称ACID) 数据库如果支持事务的操作,那么就具备以下四个特性: 1、原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。 2、一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 3、隔离性(Isolation) 一个事务的执行不能被其他事务干扰。 4、持续性/永久性(Durability) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 二、事务的四种隔离级别 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ)。MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔离级别。你可以在命令行用--transaction-isolation选项,或在选项文件里,为所有连接设置默认隔离级别。 例如,你可以在my.inf文件的[mysqld]节里类似如下设置该选项: transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE} 用户可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。它的语法如下: SET [SESSION |

mysql三-1:存储引擎

为君一笑 提交于 2019-12-04 03:32:45
阅读目录 一 什么是存储引擎 二 mysql支持的存储引擎 三 使用存储引擎 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方 法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和 操作此表的类型) 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql 数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据 自己的需要编写自己的存储引擎 SQL 解析器、SQL 优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每 个数据库都有这么多存储引擎。MySQL 的插件式存储引擎可以让存储引擎层的开发人员设 计他们希望的存储层,例如,有的应用需要满足事务的要求,有的应用则不需要对事务有这 么强的要求 ;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据 的查询。 二

第六篇:视图、触发器、事务、存储过程、函数

余生长醉 提交于 2019-12-04 03:31:58
阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> select * from course; +-----+--------+------------+ | cid | cname | teacher_id | +-----+--------+------------+ | 1 | 生物 | 1 | | 2 | 物理 | 2 | | 3 | 体育 | 3 | | 4 | 美术 | 2 | +-----+--------+------------+ 4 rows in set (0.00 sec) mysql> select * from teacher; +-----+-----------------+ | tid | tname | +-----+-----

Hibernate的事务

江枫思渺然 提交于 2019-12-04 03:30:12
1、数据库的封锁( https://www.cnblogs.com/zhai1997/p/11710082.html ): 封锁是实现并发控制的重要技术。 read uncommitted : 读取尚未提交的数据 read committed:读取已经提交的数据 ,可以解决脏读 ,oracle默认的级别。 repeatable read:重读读取,可以解决脏读 和 不可重复读 ,mysql默认的级别。 serializable:串行化,可以解决脏读不可重复读和丢失修改,相当于锁表,会使得数据库的效率极低。 2、Hibernate操作数据库时的隔离级别: 1:读未提交 2:读已提交 4:可重复读 8:串行化 隔离级别的设置: <property name="hibernate.connection.isolation">4</property> 3、事务处理: 在事务处理的过程中,最关键的问题是要保证dao层和service层操作的是同一个session对象,在Hibernate中,我们只需要调用相应的方法。 注意事项: (1)不需要手动关闭事务,因为调用该方法时,提交事务后会自动关闭。 (2)在调用方法之前必须先配置: <!--指定session与当前线程绑定--> <property name="hibernate.current_session_context_class"

java_day16

时光总嘲笑我的痴心妄想 提交于 2019-12-04 01:54:11
MySQL数据库 事务 由多条SQL语句组成一个功能,这多条SQL语句就组成了一个事务 。一个事务中的多条SQL要么都执行,要么都不执行,事务是一个不可分割的工作单位(原子性)。 事务的应用场景说明 例如: 张三给李四转账,张三账号减钱,李四账号加钱   模拟张三给李四转500元钱,一个转账的业务操作最少要执行下面的2条语句: 张三账号-500 李四账号+500 假设当张三账号上-500元,服务器崩溃了。李四的账号并没有+500元,数据就出现问题了。我们需要保证其中一条SQL语句出现问题,整个转账就算失败。只有两条SQL都成功了转账才算成功。这个时候就需要用到事务。 事务的四大特性(ACID) 手动提交事务 手动提交事务使用步骤 第1种情况:开启事务 -> 执行SQL语句 -> 成功 -> 提交事务 ​ 第2种情况:开启事务 -> 执行SQL语句 -> 失败 -> 回滚事务 案例1: 案例2: 自动提交事务 MySQL的每一条DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,执行完毕自动提交事务,MySQL默认开始自动提交事务。 1.将金额重置为1000 2.执行以下SQL语句 UPDATE account SET balance = balance - 500 WHERE id=1; 3.使用SQLYog查看数据库:发现数据已经改变

数据库存数据时,逻辑上防重了为啥还会出现重复记录?

丶灬走出姿态 提交于 2019-12-04 01:37:50
在很多异常情况下,比如高并发、网络糟糕的时候,数据库里偶尔会出现重复的记录。 假如现在有一张书籍表,结构类似这样 +----+--------------+ | id | name | +----+--------------+ | 1 | 世界简史 | +----+--------------+ 在异常情况下,可能会出现下面这样的记录 +----+--------------+ | id | name | +----+--------------+ | 1 | 世界简史 | | 2 | 人类简史 | | 3 | 人类简史 | +----+--------------+ 但是,想了想,自己在处理相关数据的时候也加了判重的相关逻辑,比如,新增时当图书 name 相同时,会提示图书重复而返回。 初次遇到这个情况的时候,感觉有点摸不着头脑,后面想了想,还是理清了,其实这和数据库的事务隔离级别有一定关系。 先简单说下数据库事务的 4 个隔离级别,然后重现下上述问题,最后说说解决办法。 1 数据库事务的 4 个隔离级别 1.1 未提交读 顾名思义,当事务隔离级别处于这个设置的时候,不同事务能读取其它事务中未提交的数据。 便于说明,我开了两个客户端(A 以及 B),并设置各自的隔离级别为未提交读。(并没有全局设置) 设置隔离级别命令 SET [SESSION | GLOBAL]

MySQL Innodb引擎调优

依然范特西╮ 提交于 2019-12-03 22:48:06
介绍:   Innodb给MYSQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。Innodb锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在Innodb中扩大锁定的需要,因为在Innodb中行级锁定适合非常小的空间。Innodb也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将Innodb类型的表与其它MYSQL的表的类型混合起来,甚至在同一个查询中也可以混合。  Innodb 的创始人:Heikki Tuuri  Heikki Tuuri在Innodb的Bug社区里也是很活跃的,如果遇到Bug也可以直接提到社区,得到作者的解答。 为什么要学习Innodb的调优:   目前来说:Innodb是为MYSQL处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。   另一方面,在数据库的复制操作中Innodb也是能保证master和slave数据一致有一定的作用。 参数调优内容:   1. 内存利用方面   2. 日值控制方面   3. 文件IO分配,空间占用方面   4. 其它相关参数 1.内存利用方面: 首先介绍一个Innodb最重要的参数: Innodb_buffer_pool

Mysql常见的引擎

家住魔仙堡 提交于 2019-12-03 22:44:47
Mysql常见的引擎 常用的引擎是:Innodb和Myiasm这两种引擎: innodb: 提供了对事务的ACID操作,还提供了行级锁和外键约束,,他的优势就是处理大量数据,在msql启动的时候,首先会建立一个缓存池,主要是缓存数据和索引,但是操作大规模的数据查找时很慢,所以建议当需要数据库的事务操作时,使用这个,还有就是在写的时候不会锁定全表,所以在大规模并发操作的时候会提高效率; Myiasm: 这个是默认的引擎,不提供事务和行级锁和外键约束,当在insert和update时会锁定全表,所以在执行写操作对的时候效率会很慢, 和innodb不同的是,myiasm保留了行数,所以在执行select count(*) from 的时候会很快,不需要扫描全表,当我们执行的读操作多于写操作的时候,并且不需要事务的支持,我们可以使用myisam这个引擎。 这两种引擎的数据结构都是B+树 存储的不同: mysisam树节点存储得是数据的地址,指向实际的数据; innodb树节点存储得是实际的数据;这种索引也被称为聚集索引 常见的引擎 InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive MyISAM:Mysql 5.0之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务 InnoDB:事务型速记的首选引擎

Mysql 查询阻塞和事物情况

北慕城南 提交于 2019-12-03 22:37:57
MYSQL 服务器逻辑架构图 连接/线程处理 == 》 (解析器 –> 查询缓存) ===》 优化器 ===》 存储引擎 服务器级别锁 MYSQL 使用的锁类型: 表锁(显式:LOCK TABLE,隐式) 全局锁(read_only=1,FLUSH TABLE WITH READ LOCK) 命名锁 :服务器重命名或者删除一个表时创建。重命名可能会影响到触发器相关的表 字符锁 LOCK TABLES film READ; LOCK TABLES film WRITE; 查看那些线程持有并阻塞查询的表锁。 SHOW PROCESSLIST; state LOCKED 表锁 WAITING for release of readlock 全局锁 Wating for table 命名锁 user Lock 用户锁 :SELECT GET_LOCK(‘my lock’, 100); 存储引擎中的锁 InnoDB中的锁 查看InnoDb锁信息————-(5.1以下)SHOW INNODB STATUS; 更高 版本show engine innodb status\G; 查看INFROMATION_SCHEMA表中 INNODB_LOCKS表,5.5版本以上默认安装,5.1中可能会没有 INFROMATION_SCHEMA来查询mysql使用情况 使用information_schema

需要了解的spring事务特性

此生再无相见时 提交于 2019-12-03 20:30:17
一、spring事务的四大特征:   原子性:一个事务中所有的操作都是一个整体,要么都成功,要么都失败。   一致性:事务的执行的前后数据的完整性保持一致。   隔离性:一个事务在执行的过程中,不应该受到其他事务的干扰。   持久性:事务提交后对数据库的修改是永久的。   原子性与一致性的区别:     原子性是保证最终结果的正确。     一致性是针对事务操作过程中数据的可见性,只有最初的数据和最终的数据对外可见,避免在“未提交读”的情况下造成脏读。 二、事务的五大隔离级别:   default:默认的事务隔离级别,使用数据库默认的数据隔离级别。MySQL默认的事务隔离级别是“可重复读(repeatable_read)”。   read_uncommitted:读未提交,一个事务可以操作另一个未提交的事务,可能会出现脏读、不可重复读、幻读。   read_committed:读已提交,一个事务只能操作另一个已经提交的事务,可能会出现不可重复读、幻读。   repeatable_read:可重复读,能够避免脏读,不可重复读,不能避免幻读。   serializable:串行化,隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。   脏读:事务A读取到了事务B未提交的数据,此时如果事务B因为发生错误并执行回滚,那么事务A读到的数据就是脏数据。   不可重复读