mysql事务

spring02

亡梦爱人 提交于 2019-12-04 15:53:13
jdbcTemplate的使用 c3p0&&dbcp DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。 dbcp没有自动回收空闲连接的功能 c3p0有自动回收空闲连接功能 bean.xml 1 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 2 <property name="dataSource" ref="dataSource"></property> 3 </bean> 4 5 <!-- 配置数据源--> 6 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 7 <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 8 <property name="url" value="jdbc:mysql:/

初识JDBC

余生长醉 提交于 2019-12-04 15:23:31
JDBC idea第一次使用过程中会出现使用时区错误,设置时区后解决问题 概念:JAVA DataBase Connectivity -java 数据库连接,java语言操作数据库 JDBC本质:sun公司定义的一套JAVA连接各种关系型数据库的规则(接口),并没有进行实现,而是由每个数据库厂商实现了这个接口,并且提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行代码的是驱动jar包中的实现类。 JDBC 快速入门 package cn.learn.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class JdbcDemo01 { public static void main(String[] args) { //1.导入厂商jar包,复制包到新建文件夹lib,再add as Library /* mysql厂商的jar包在5版本后里的META-INF中已经注册驱动,可 以不写 Class.forName("com.mysql.jdbc.Driver"); */ Statement statement = null; Connection conn =

Mysql事务

旧城冷巷雨未停 提交于 2019-12-04 15:22:31
一、事务的ACID属性 1.原子性 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生 2.一致性 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。 一致性是指数据处于一种语义上的有意义且正确的状态。一致性是对数据可见性的约束,保证在一个事务中的多次操作的数据中间状态对其他事务不可见的。因为这些中间状态,是一个过渡状态,与事务的开始状态和事务的结束状态是不一致的。 举个粒子,张三给李四转账100元。事务要做的是从张三账户上减掉100元,李四账户上加上100元。一致性的含义是其他事务要么看到张三还没有给李四转账的状态,要么张三已经成功转账给李四的状态,而对于张三少了100元,李四还没加上100元这个中间状态是不可见的。 原子性和一致性的的侧重点不同:原子性关注状态,要么全部成功,要么全部失败,不存在部分成功的状态。而一致性关注数据的可见性,中间状态的数据对外部不可见,只有最初状态和最终状态的数据对外可见 隔离性是多个事物的时候, 相互不能干扰,一致性是要保证操作前和操作后数据或者数据结构的一致性,而我提到的事务的一致性是关注数据的中间状态,也就是一致性需要监视中间状态的数据,如果有变化,即刻回滚 (如果数据库中有没有执行完的事务,那就是不一致的,否则,就是一致的) 3.隔离性 事务的隔离性是指一个事务的执行不能被其他事务干扰

2.MySQL(二)

冷暖自知 提交于 2019-12-04 13:23:46
数据之表操作 1.创建表 语法:CREATE TABLE table_name (column_name column_type); create table student( -> id INT NOT NULL AUTO_INCREMENT, -> name CHAR(32) NOT NULL, -> age INT NOT NULL, -> regiiter_date DATE, -> PRIMARY KEY(id) -> ); auto_increment 表示:自增1。写入内容为空时,默认从1,2,3...往下填充写入表格中。primary key: 表示约束(不能重复且不能为空); 加速查找not null: 不为空查看表show tables; -->查看有哪些表desc student; --> 查看student表的信息show create table student; -->查看表student创建的信息 2.删除表 #drop table 表名 drop table student; 3.修改表 添加列:alter table 表名 add 列名 类型 删除列:alter table 表名 drop column 列名 修改列: alter table 表名 modify column 列名 类型; -- 类型 alter table 表名 change

mysql的锁机制详解

时光总嘲笑我的痴心妄想 提交于 2019-12-04 12:32:25
这段时间一直在学习 mysql 数据库。项目组一直用的是 oracle ,所以对 mysql 的了解也不深。本文主要是对 mysql 锁的总结。 Mysql 的锁主要分为 3 大类: 表级锁:存储引擎为 Myisam 。锁住整个表,特点是开销小,加锁快,锁定力度大,发生锁冲突的概率最高,并发度最低。 页级锁:存储引擎为 BDB 。锁住某一页的数据( 16kb 左右),特点:开销和枷锁时间介于表级和行级之间;会出现死锁,锁定力度介于表锁和行锁之间,并发度一般。 行级锁:存储引擎为 innodb 。锁住某一行的数据,特点:锁的实现更加复杂,开销大,加锁速度慢。 根据以上特点,仅从锁的角度来说:表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如 Web 应用;而行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,如一些在线事务处理( OLTP )系统。 接下来进行行级锁的详解,行级锁主要分为以下 7 类:共享 / 排他锁、意向锁、记录锁、间隙锁、临建锁、插入意向锁、自增锁。 共享 / 排他锁: 共享锁:又称读锁,可以允许读,但不能写。共享锁可以与共享锁一起使用。 语句: select ... lock in share mode 排他锁:又称写锁,不能允许读,也不能允许写,排他锁不能与其他所一起使用。 语句: select ... for

Read Uncommitted

痞子三分冷 提交于 2019-12-04 11:35:52
Read Uncommitted是隔离级别最低的一种事务级别。在这种隔离级别下,一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读(Dirty Read)。 我们来看一个例子。 首先,我们准备好 students 表的数据,该表仅一行记录: 直线电机怎么选择 mysql> select * from students; +----+-------+ | id | name | +----+-------+ | 1 | Alice | +----+-------+ 1 row in set (0.00 sec) 然后,分别开启两个MySQL客户端连接,按顺序依次执行事务A和事务B: 时刻 事务A 事务B 1 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 2 BEGIN; BEGIN; 3 UPDATE students SET name = 'Bob' WHERE id = 1; 4 SELECT * FROM students WHERE id = 1; 5 ROLLBACK; 6 SELECT * FROM students WHERE id = 1; 7 COMMIT

mysql update运行超时解决方案

心已入冬 提交于 2019-12-04 11:34:14
问题描述:   今天update(修改)mysql数据库中一张表时,发现时间很长,而且会失败。报错:Error Code: 1205. Lock wait timeout exceeded; try restarting transaction 解决方案: # 查看事务表 select * from information_schema.innodb_trx   在结果中发现trx_mysql_thread_id 有值 xxxx (数字) # 运行 show processlist   结果中会有一条与xxxx(数字)对映的数据 # 在sql中执行 kill xxxx 原因分析: mysql的innoDB存储引擎是支持事务的,事务开启后没有被主动commit。导致该资源被长期占用,其他事务在抢占该资源时,因上一个事务的锁而导致抢占失败!因此出现Lock wait timeout exceeded MySQL 5.5 innodb_lock_wait 锁等待: 在mysql 5.5 中,information_schema 库中增加了三个关于锁的表(MEMORY引擎); innodb_trx  ## 当前运行的所有事物 innodb_locks ## 当前出现的锁 innodb_lock_waits  ##锁等待的对应关系 对应表的结构: 参考文章一: https://blog

手把手带你实战下Spring的七种事务传播行为

情到浓时终转凉″ 提交于 2019-12-04 10:33:37
目录 一、什么是事务传播行为? 二、事务的7种传播行为 三、7种传播行为实战 本文介绍Spring的七种事务传播行为并通过代码演示下。 一、什么是事务传播行为? 事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何运行。 例如:methodA方法调用methodB方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。 二、事务的7种传播行为 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性。这是Spring为我们提供的强大的工具箱,使用事务传播行为可以为我们的开发工作提供许多便利。 7种事务传播行为如下: 1.PROPAGATION_REQUIRED 如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,这是最常见的选择,也是Spring默认的事务传播行为。 2.PROPAGATION_SUPPORTS 支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。 3.PROPAGATION_MANDATORY 支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。 4

MySQL的索引与事务、存储引擎

和自甴很熟 提交于 2019-12-04 10:29:00
一、索引 概念 : 在一本书中,无须阅读整本书,利用目录就可以快速查找所需信息; 书中的目录是一个词语列表,其中注明了包含各个词的页码 数据库索引 : 在数据库中,索引数据库程序无须对整个表进行扫描,就可以在其中找到所需数据; 数据库中的索引是某个表中一列或者若干列值的集合,以及物理标识这些值的数据页的逻辑指针清单 索引的作用 : 1、设置了合适的索引之后,数据库利用各种快速的定位技术,能够大大加快查询速率; 2、特别是当表很大时,或者查询涉及到多个表时,使用索引可使查询加快成千倍; 3、可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本; 4、通过创建唯一性索引保证数据表数据的唯一性; 5、可以加快表与表之间的连接; 6、在使用分组和排序时,可大大减少分组和排序时间。 索引的分类 普通索引:这是最基本的索引类型,而且它没有唯一性之类的限制 唯一性索引:这种索引和前面的"普通索引"基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一 主键索引:主键是一种唯一性索引,但它必须制定为"PRIMARY KEY" 全文索引:全文索引的类型是FULLTEXT,可以在VARCHAR或者TEXT类型的列上创建 单列索引与多列索引:索引可以是单列上创建的索引,也可以是在多列上创建的索引 创建索引的原则依据 表的主键,外键必须有索引; 数据量超过300行的表应该有索引;

spring事务的隔离级别和传播方式

大憨熊 提交于 2019-12-04 09:45:39
传播行为 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 PROPAGATION_REQUIRES_NEW 启动一个新的, 不依赖于环境的 "内部" 事务. 这个事务将被完全 commited 或 rolled back 而不依赖于外部事务, 它拥有自己的隔离范围, 自己的锁, 等等. 当内部事务开始执行时, 外部事务将被挂起, 内务事务结束时, 外部事务将继续执行. 另一方面, PROPAGATION_NESTED 开始一个 "嵌套的" 事务