MYSQL 事务 技术教程文章

高性能MySQL之事务(3)

概念:事务是一组原子性的sql查询,一个独立的工作单元。事务内的语句要么全部执行成功,要么全部执行失败。 银行转账是解释事务重要性的一个经典例子。比如:客户A要向客户B转账200元,需要三个步骤: 1,检查A账户是否够200元。 2,A账户减200元。 3,B账户增加200元。 这三个步骤必须打包在一个事务中,任何一个步骤失败,则必须回滚所有的步骤。 空谈事务的概念是不够的,事务还得必须具备ACID四个标准特征。 原子性(atomicity...

mysql基础三(视图、触发器、函数、存储过程、事务、防注入)【代码】

格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v1 AS SELET nid, name FROMA WHEREnid > 4 2、删除视图--格式:DROP VIEW 视图名称DROP VIEW v1 3、修改视图-- 格式:ALTER VIEW 视图名称 AS SQL语句ALTER VIEW v1 AS SELET A.nid,B. NAME FROMA LEFT JOIN B ON A.id = B.nid LEFT JOIN C ON A.id = C.nid WHEREA.id > 2 AND C.nid < 5 4、使用视图 视图的使用和普通表一样,由于视图是虚拟表,所以无法对其真实表进行创建...

mysql事务,select for update,及数据的一致性处理【代码】

在SELECT 的读取锁定主要分为两种方式:SELECT ... LOCK IN SHARE MODE SELECT ... FOR UPDATE这两种方式在事务(Transaction) 进行当中SELECT 到同一个数据表时,都必须等待其它事务数据被提交(Commit)后才会执行。而主要的不同在于LOCK IN SHARE MODE 在有一方事务要Update 同一个表单时很容易造成死锁。简单的说,如果SELECT 后面若要UPDATE 同一个表单,最好使用SELECT ... UPDATE。举个例子: 假设商品表单products 内有一个存...

MySQL 事务表和非事务表【代码】

MySQL 事务表和非事务表 查看 max_binlog_stmt_cache_size 参数解释时(入门教程qkxue.net),有这么一句话 If nontransactional statements within a transaction require more than this many bytes of memory, the server generates an error.那么,什么是 nontransactional statements ?在 http://dev.mysql.com/ 查找 nontransactional关键字,出来的第一个是 Rollback Failure for Nontransactional Tables 。那么什么又是 ...

MYSQL事务及存储引擎对比【代码】【图】

由于该引擎不支持事务、也不支持外键,所以访问速度很快。因此对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。 Innodb存储引擎: 由于该存储引擎在事务上具有优势,即支持具有提交、回滚和崩溃恢复能力的事务安装,所以比myisam存储引擎占用更多的磁盘空间。因此需要进行频繁的更新、删除操作,同时对事务的完整性要求比较高,需要实现并发控制,此时适合使用该存储引擎。 Memory存储引擎: 该存储引擎使用内存来存储...

MySQL事务

; PreparedStatement ps=null; try{conn=DBUtil.getConnection();conn.setAutoCommit(false);//相当于beginps=conn.prepareStatement("update account set money=money-100 where id=1");ps.executeUpdate();int i=1/0;//测试如果中途出现异常,第一条sql会不会执行ps=conn.prepareStatement("update account set money=money+100 where id=2");ps.executeUpdate();  conn.commit(); }catch(Exception e){if(conn!=null){conn.rol...

Mysql数据库事务及隔离级别学习测试【代码】【图】

SELECT @@session.tx_isolation; 默认的是 可以通过以下方式修改隔离级别: set tx_isolation=‘read-committed‘; mysql> select @@tx_isolation;+-----------------+| @@tx_isolation |+-----------------+| REPEATABLE-READ |+-----------------+1 row in set (0.00 sec) mysql> set tx_isolation=‘read-committed‘;Query OK, 0 rows affected (0.00 sec) mysql> select @@tx_isolation;+----------------+| @@tx_isolati...

mysql 事务的四种隔离级别

MYSQL标准定义了4种隔离级别,用来限定事务内外的哪些改变是可见的,哪些是不可见的。 低的隔离级一般支持更高的并发处理,并拥有更低的系统开销。隔离级别由低到高:Read Uncommitted < Read Committed < Repeatable Read < Serializable. 第一:READ UNCOMMITTED (读取未提交内容)在该隔离级别,所有事务都可以看到其他未提交(commit)事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提...

mysql事务与mysql储存引擎【图】

事务概念及存储引擎1.0 为何要事务?先来看一个场景,银行转账汇款:李彦宏和周鸿祎天天打架,现在让李彦宏给周鸿祎转款1000 元设计如下表account表编号(id)用户名(user)金额(cash)1李彦宏30002周鸿祎2000传统的做法:mysql> update account set cash = cash -1000 where id =2;update account set cash =cash +1000 where id=1;缺陷:不安全。比如减少李彦宏钱的指令执行了,但是增加周鸿祎钱的指令却没有执行成功。这个时候,我们...

MySQL事务内幕与ACID

事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头。所以事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回磁盘。目前大多数存储引擎是这样实现的,我们称之为预写式日志,即修改数据需要写两次磁盘。 事务日志包括重做日志redo和回滚日志undo,Redo记录的是已经全部完成的事务,就是执行了commit的事务,记录...

mysql存储过程中使用事务【代码】【图】

1 DROP PROCEDURE IF EXISTS test_sp1 2 CREATE PROCEDURE test_sp1( ) 3 BEGIN 4 DECLARE t_error INTEGER DEFAULT 0; 5 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 6 7 START TRANSACTION; 8 INSERT INTO test VALUES(NULL, ‘test sql 001‘); 9 INSERT INTO test VALUES(‘1‘, ‘test sql 002‘); 10 11 IF t_error = 1 THEN ...

降低mysql事务隔离级别【代码】【图】

;try {conn = DBUtils.getConnection();conn.setAutoCommit(false);conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);        ............  然而,报错了java.sql.SQLException: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging wh...

mysql事务处理失效原因【图】

mysql有多种存储引擎,有些版本(mysql5.5.5以前默认是MyISAM,mysql5.5.5以后默认是InnoDB)安装时默认的存储引擎是MyISAM,而MyISAM存储引擎是不支持事务处理的,所以才导致了项目中service层的某个方法事务失效,解决的方法就是将需要事务管理的表的存储引擎改为InnoDB,下面将详细说明mysql的几种存储引擎以及如何修改存储引擎:一、查看mysql数据库所支持的存储引擎show ENGINES;该语句将列出该版本的mysql所支持的所有存储引...

总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法

1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e ‘show databases‘ -uroot -p123456 mysqlshow -uroot -p123456 # 不常用,记住上面那个就行了 3.创建数据库语法 create database 数据库名; 例如: create database `HA-test`; 4. 切换数据库 use HA-test; 5. 登陆时,直接切换到指定数据库 mysql -uroot -p123456 <数据库名> 6. 查看数据库当前时...

mysql 事务分析小笔记--01【图】

2.Read Committed (提交读) --------> read-committed3.Repeatable Read (可重读) mysql 默认级别 ---------> repeatable-read4.Serializable (串行化)注:事务级别最高,串行执行 ---------> serializable说事务隔离区别前,先简单说一下怎么设置系统事务隔离级别和会话事务隔离级别查看InnoDB存储引擎 系统级的隔离级别 和 会...

MySQL数据库事务剖析【图】

一个运行良好的事务处理系统,必须具备原子性、一致性、隔离性、持久性。 原子性:一个事务必须被视为一个不可分割的最小工作单元,这个事务的所有操作要么全部提交成功,要么全部失败回滚。 一致性:数据库总是从一个一致性的状态转换到另外一个一致性状态。比如在一个事务中执行一组sql,其中一个执行失败,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。 隔离性:通常来说,一个事务所做的修改在最终提交之...

mysql事务隔离级别测试【代码】

read commited(提交读)repeatable read(可重复读)serializable(可串行化)默认repeatable-read建议最好不要修改默认的隔离级别,修改隔离级别会对mysql复制产生影响 isolation-table.sqlDROP TABLE IF EXISTS transaction_test; CREATE TABLE transaction_test(id INT UNSIGNED NOT NULL AUTO_INCREMENT,val VARCHAR(20) NOT NULL,created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id) ) ENGINE=InnoDB DEFAUL...

Mysql事务-隔离级别【代码】

: 隔离级别就是决定一个事务的修改另一个事务什么情况下可见。 书本解释 : 隔离级别都规定了一个事务中所做修改,哪些在事务内和事务间是可见的。 上面两段理解的区别在于是否存在事务内可见性的规定。我在各个级别似乎没有看到 下面开始说明MYSQL的四种隔离级别,先准备一张学生表: mysql> CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(32) NOT NULL DEFAULT ‘‘,PRIMARY KEY (`id`) ) ENGINE...

mysql--事务demo1----【代码】

package com.etc.entity;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Savepoint;import org.junit.Test;import com.etc.utils.JDBCUtil;public class TransactionDemo1 { //@Test public void testTransaction1() {Connection conn=null;PreparedStatement st=null;ResultSet rs=null;try {conn = JDBCUtil.getConnection();conn....

Mysql事务及行级锁

事务隔离级别 数据库事务隔离级别,只是针对一个事务能不能读取其它事务的中间结果。 Read Uncommitted (读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读( Dirty Read )。 Read Committed (读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是 MySQL 默认的)。它满足了隔离的简单定义...