数据库事务

Spring的事务管理入门:编程式事务管理(TransactionTemplate)!!!

自作多情 提交于 2020-03-02 00:57:54
转载 自 http://blog.csdn.net/zq9017197/article/details/6321391 Spring可以支持编程式事务和声明式事务。 Spring使用事务管理器,每个不同平台的事务管理器都实现了接口:PlatformTransactionManager 此接口是事务管理的核心,提供了三个需要实现的函数: [java] view plain copy print ? commit(TransactionStatus status) ; getTransaction(TransactionDefinition definition) ; rollback(TransactionStatus status) ; 如果我们使用的是JDBC来处理事务,那么这个事务管理器就是DataSourceTransactionManager。 通过Spring文档查找到这个类,发现其需要DataSource这个类。也就是只要实现了javax.sql.DataSource这个接口的类,都可以作为参数传入到DataSourceTransactionManager。 然后,找到 包org.springframework.transaction.support中的 TransactionTemplate。 发现TransactionTemplate中有一个重要的方法: [java

python爬虫--连接数据库1

﹥>﹥吖頭↗ 提交于 2020-03-01 23:48:35
1、连接mysql 下载mysql,到官网下载。一路安装,设置好帐号密码。 下载mysql的编译环境,Navicat; 在Navicat创建数据库和表; create table urls ( id int not null auto_increment, url varchar(1000) not null, content varchar(4000) not null, created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, primary key(id) ) python链接mysql, 安装库,pip install mysqlclient。 用pyrhon在mysql中创建的数据库leon中的urls表格中插入一条数据 import MySQLdb conn= MySQLdb.connect(host='localhost' , user='root', passwd='5407', db ='leon') cur = conn.cursor() cur.execute("INSERT INTO urls (url, content) VALUES ('www.baidu.com', 'This is content.')") cur.close() conn.commit() conn.close() 结果显示: host=

php + mysql 分布式事务

寵の児 提交于 2020-03-01 15:16:10
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元; 事务应该具有4个属性:原子性、一致性、隔离性、持续性 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。 分布式事务:分布式事务的参与者、资源管理器、事务管理器等位于不用的节点上,这些不同的节点相互协作共同完成一个具有逻辑完整性的事务。 纠正自己对mysql的一个误解,mysql从5.0开始支持XA DataSource。Connector/J 版本要使用5.0版本,5.0以下的不支持。   XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。目前,Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持

spring tranaction 事务入门

删除回忆录丶 提交于 2020-03-01 15:00:28
一、事务四个属性 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency)。事务必须是使 数据库 从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对 数据库 中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。 二、事务的重要性 打个最简单的比方吧,A和B两人之间的支付宝转账问题,A向B转账50RMB,正常的结果是,A - 50 并且 B + 50; 但如果是下面这种情况,那就杯具了,A - 50 成功,而B + 50 失败。这样一来岂不是 A亏大了!谁还敢随意转账?就算是首富,也不敢随意转账O(∩_∩)O哈! 所以,在进行 A - 50 和 B + 50 需要添加事务管理。 三、先看下没有加事务的Demo, 看完就知道事务的重要性啦~ (1)、整体结构、 (2)、jar 包 (3)、SQL语句 创建数据库 create database spring; 建立表 create table countmoney

一千行MySQL学习笔记(七)

可紊 提交于 2020-03-01 12:29:16
/* 事务(transaction) */ ------------ 事务 是指逻辑上的一组操作,组成这组操作的各个单元,要不全成功要不全失败。 - 支持 连续SQL的集体成功或集体撤销。 - 事务 是数据库在数据晚自习方面的一个功能。 - 需要 利用 InnoDB 或 BDB 存储引擎,对自动提交的特性支持完成。 - InnoDB 被称为事务安全型引擎。 -- 事务开启 START TRANSACTION ; 或者 BEGIN ; 开启 事务后,所有被执行的SQL语句均被认作当前事务内的SQL语句。 -- 事务提交 COMMIT ; -- 事务回滚 ROLLBACK ; 如果 部分操作发生问题,映射到事务开启前。 -- 事务的特性 1 . 原子性(Atomicity) 事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 2 . 一致性(Consistency) 事务前后数据的完整性必须保持一致。 - 事务开始和结束时,外部数据一致 - 在整个事务过程中,操作是连续的 3 . 隔离性( Isolation ) 多个 用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的数据要相互隔离。 4 . 持久性(Durability) 一个 事务一旦被提交,它对数据库中的数据改变就是永久性的。 -- 事务的实现 1 . 要求是事务支持的表类型 2

MyBatis配置文件(七)--environments运行环境

大兔子大兔子 提交于 2020-03-01 12:26:02
一、environments配置信息: environments的作用是用来配置数据库信息,可以配置多个,其有两个可配的子元素,分别是:事务管理器transactionManager和数据源dataSource,先看一下我配置的例子: 1 <!-- 环境模式:development开发模式 work工作模式 --> 2 <environments default="development"> 3 <!--环境变量 --> 4 <environment id="development"> 5 <!--事务管理器 --> 6 <transactionManager type="JDBC" /> 7 <!--数据源 --> 8 <dataSource type="POOLED"> 9 <property name="driver" value="${db.driver}" /> 10 <property name="url" value="${db.url}" /> 11 <property name="username" value="${db.username}" /> 12 <property name="password" value="${db.pwd}" /> 13 </dataSource> 14 </environment> 15 </environments>

Mybatis事务管理

陌路散爱 提交于 2020-03-01 10:36:14
一、Mybatis事务 1、事务管理方式 Mybatis中的事务管理方式有两种: 1、JDBC的事务管理机制,即使用JDBC事务管理机制进行事务管理 2、MANAGED的事务管理机制,Mybatis没有实现对事务的管理,而是通过容器来实现对事务的管理 其中,Mybatis提供了事务的接口:Transaction,其代码如下: public interface Transaction { /** * Retrieve inner database connection * @return DataBase connection * @throws SQLException */ //获得数据库连接 Connection getConnection() throws SQLException; /** * Commit inner database connection. * @throws SQLException */ //提交 void commit() throws SQLException; /** * Rollback inner database connection. * @throws SQLException */ //回滚 void rollback() throws SQLException; /** * Close inner database

Spring+MyBatis整合

一笑奈何 提交于 2020-03-01 09:59:05
一、准备工作   1.1准备jar包            建表语句: CREATE TABLE `t_customer` ( `id` int(32) NOT NULL AUTO_INCREMENT, `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `jobs` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `phone` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;   1.2编写配置文件:     1.2.1db.properties    #dataSource #Thu Mar 07 16:27:40 CST 2019 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/sm jdbc.username=root jdbc

数据库事务概览

丶灬走出姿态 提交于 2020-03-01 09:40:20
事务种类 隐式事务 如单条 sql 语句的执行 显式事务 如多条 sql 语句的执行,一般谈论数据库事务时,指的是数据库的显式事务 事务特性 数据库事务具有 ACID 这4个特性 A —— Atomic /əˈtɒmɪk/ 原子性。所有 sql 作为一个原子工作单元执行,要么全部执行,要么全部不执行。这里应该是借用了化学学科的术语概念:原子虽然在物理状态中可以继续细分(原子由原子核和核外电子组成),但原子在化学反应中是不可再分。 C —— Consistent /kənˈsɪstənt/ 一致性。事务完成后,所有数据的状态都是一致的,比如我转账给你100,那么我的账户减去了100,你的账户则必定加上了100。 I —— Isolation /ˌaɪsəˈleɪʃn/ 隔离性。每个事务做的操作必须与其它事务隔离,即便有多个事务并发执行。一个事务处理时的中间状态对其它事务是不可见的。 D —— Duration /duˈreɪʃn/ 持久性。事务完成后,相关的对数据库数据的修改被持久化存储。 数据不一致问题 多个并发执行的事务,如果操作时涉及同一条记录数据,可能会发生问题,即并发操作可能导致数据的不一致问题,这些问题包含以下3种情形: 脏读(Dirty Read) 读取未提交数据 执行时间 事务A 事务B 1 事务开启 2 事务开启 修改一条记录record(假使原来数据是纯粹干净的

源代码解读Spring只读事务与读写事务的性能的差别

放肆的年华 提交于 2020-03-01 09:38:36
前言: 如果大家使用过Spring事务管理,会发现Spring提供的事务分为“只读”和“读写”事务两类。这不免就会疑问这两种事务会有什么不同?本文则通过对Spring和Hibernate源代码的剖析来找出这两种事务的区别。特别是运行性能方面的区别。 解读的源代码版本为 Spring 2.5.6.SEC01 ,Hibernate 3.3.2.GA。 Spring对事务的支持也分编程式和声明式,本文以基于Annotation方式的声明式事务为例: Spring的配置如下: < bean class ="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" > < property name ="proxyTargetClass" value ="true" ></ property > </ bean > < bean id ="entityManagerFactory" class ="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" > < property name ="persistenceUnitName" value ="entityManager" /> < property name =