mysql事务

MySQL REPEATABLE-READ && 幻读

坚强是说给别人听的谎言 提交于 2020-03-02 04:57:45
MySQL REPEATABLE-READ && 幻读 关于mysql命令行中事务控制的语句见该文章 http://my.oschina.net/xinxingegeya/blog/296459 关于MVCC多版本控制 http://my.oschina.net/xinxingegeya/blog/208821 表结构 create table t1( a int primary key, b int not null ) REPEATABLE-READ可重复读(一) 这里打开两个mysql的命令行窗口,窗口A,即session1,窗口B,即session2。 session1 mysql> begin ; Query OK, 0 rows affected (0.00 sec) mysql> select * from t1; +----+------+ | a | b | +----+------+ | 51 | 3000 | | 52 | 3000 | | 53 | 3000 | | 54 | 3000 | +----+------+ 4 rows in set (0.00 sec) 以上sql只是显示的开启了事务,执行了sql查询。下面看session2的操作。 要注意这里的select操作是一般的快照读。根据MVCC多版本控制规则读取的数据行。 session2

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

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(假使原来数据是纯粹干净的

MySQL : 事务处理

一曲冷凌霜 提交于 2020-03-01 08:51:16
【事务】一组SQL语句操作单元, 组内所有SQL语句,完成一个业务 。 若整组成功,意味着组内的全部操作都成功; 反之,若其中任何一条语句失败,意味着整个操作都失败。 操作失败,意味着整个过程都是没有意义的,应使数据库回到操作前的初始状态。 【point】 1. 失败后,能回到开始位置; 2. 成功之前,其他用户(进程、规划)不能看到操作内的修改。 【思路】在一组操作之前,设计一个记号(备份点)。 【实现】利用 innodb 存储引擎的“事务日志”功能。 执行分为2个阶段: 1. 执行阶段; 2. 将执行结果提交给数据库的阶段; 其中,事务日志便是将执行阶段的结果保存,若用户选择提交,才将执行结果提交给数据库。 (默认的执行方式:自动提交) 需要关闭自动提交功能(存在一个系统变量,autocommit 可以对自动提交进行配置) 1 set autocommit = 0 ; // 0 意味着关闭自动提交功能;1 意味着开启 若成功,执行 commit 提交结果; 若失败,执行 rollback ,回到起始位置。 -------------------------------------------------------------------------- 【 常用的事务指令 】 1. start transaction 开启事务(作用:关闭自动提交)。 特点:若事务结束了

mysql事务

只谈情不闲聊 提交于 2020-03-01 08:48:54
事务:一组sql语句操作单元,组内所有sql语句完成一个业务.注意只有innodb和bdb可以使用事务安全 如果整组成功则意味着全部sql语句都实现。如果其中任何一个失败,意味着整个操作失败。失败意味着整个过程都是没意义的,数据库应该回到最初始的状态。上面的特性,就是事务。 如何处理:失败后,可以回到开始位置、没有成功之前,别的用户(进程,对话)是不能看到操作内的数据修改的 思路:就是在一组操作之前,设计一个记号(备份点)。操作成功就让别人看到数据的修改,如果失败别人就不能看到修改,而且回到记号位置。 实现:利用innodb存储引擎的事务日志功能。 sql执行分为2个阶段:一个是执行阶段一个是将执行结果提交到数据库的阶段。其中我们的事务日志,就是保存执行阶段的结果。如果可以用,则将执行的结果提交到数据库 数据库默认的执行方式是:自动提交(autocommit)。执行完后自动完成提交工作。想要完成事务安全就需要关闭自动提交功能。set autocommit=0; 例:交班费业务30元:包含两条sql语句update `sm_student` set `s_money`=`s_money`-30 where id=1; update `class` set `c_money`=`c_money`+30 where id=1;

事务与连接池

泪湿孤枕 提交于 2020-03-01 06:04:45
事务的概念:   事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。 数据库开启事务的命令为:   start transaction 开启事务。   rollback 回滚事务。   commit 提交事务。 数据库中默认的事务开启状态:   MySQL中事务默认自动提交的,每当执行一条SQL,就会提交一个事务 (一条SQL 就是一个事务);Oracle 中事务默认不自动提交,需要在执行SQL 语句后 通过commint 手动提交事务。 数据库中存在一个设置自动提交的变量 ,通过 show variables like '%commit%';   得到结果:autocommint = on,说明自动提交被开启。   关闭自动提交: set autocommit = off 或 set autocommit = 0   如果设置autocommit = off,则之后每条SQL 都会处于一个事务中,相当于每条SQL执行前 都执行 start transaction,必须执行commit才会对数据库执行修改。( Oracle中 autocommit 默认值为 off。) 在jdbc中使用事务:   Connection.setAutoCommit(false);   Connection.rollback();   Connection.commit();