`
Donald_Draper
  • 浏览: 980933 次
社区版块
存档分类
最新评论

mysql 事务处理

阅读更多
创建表:
CREATE TABLE `role` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40006 DEFAULT CHARSET=utf-8;


创建存储过程:

每次执行插入,提交一次
DELIMITER $$
CREATE PROCEDURE load0(count INT UNSIGNED,iname varchar(50),iage INT)
BEGIN
DECLARE s INT UNSIGNED DEFAULT 1;
START TRANSACTION;
WHILE s<count DO
INSERT INTO role(name,age)VALUES(iname,iage);
SET s=s+1;
COMMIT;
END WHILE;
END$$
DELIMITER ;


跟load0,没有什么区别因为mysql默认开启自动提交
DELIMITER $$
CREATE PROCEDURE load1(count INT UNSIGNED,iname varchar(50),iage INT)
BEGIN
DECLARE s INT UNSIGNED DEFAULT 1;
START TRANSACTION;
WHILE s<count DO
INSERT INTO role(name,age)VALUES(iname,iage);
SET s=s+1;
END WHILE;
END$$
DELIMITER ;


所有插入一次提交:
DELIMITER $$
CREATE PROCEDURE load2(count INT UNSIGNED,iname varchar(50),iage INT)
BEGIN
DECLARE s INT UNSIGNED DEFAULT 1;
START TRANSACTION;
WHILE s<count DO
INSERT INTO role(name,age)VALUES(iname,iage);
SET s=s+1;
END WHILE;
COMMIT;
END$$
DELIMITER ;


执行存储过程:
call load0(10000,'jack',23);
[SQL]call load0(10000,'jack',23);

受影响的行: 0
时间: 26.520s
truncate table role;
[SQL]call load1(10000,'jack',23);

受影响的行: 1
时间: 0.483s
mysql> select * from information_schema.INNODB_TRX;
+--------+-----------+---------------------+-----------------------+------------------+------------+---------------------+-----------+---------------------+-------------------+-------------------+------------------+-----------------------+-----------------+-------------------+-------------------------+---------------------+-------------------+------------------------+----------------------------+---------------------------+---------------------------+------------------+----------------------------+
| trx_id | trx_state | trx_started         | trx_requested_lock_id | trx_wait_started | trx_weight | trx_mysql_thread_id | trx_query | trx_operation_state | trx_tables_in_use | trx_tables_locked | trx_lock_structs | trx_lock_memory_bytes | trx_rows_locked | trx_rows_modified | trx_concurrency_tickets | trx_isolation_level | trx_unique_checks | trx_foreign_key_checks | trx_last_foreign_key_error | trx_adaptive_hash_latched | trx_adaptive_hash_timeout | trx_is_read_only | trx_autocommit_non_locking |
+--------+-----------+---------------------+-----------------------+------------------+------------+---------------------+-----------+---------------------+-------------------+-------------------+------------------+-----------------------+-----------------+-------------------+-------------------------+---------------------+-------------------+------------------------+----------------------------+---------------------------+---------------------------+------------------+----------------------------+
| 27177  |[color=red] RUNNING[/color]   | [color=red]2016-07-29 15:53:43[/color] | NULL                  | NULL             |      10000 |                  21 | NULL      | NULL                |                 0 |                 0 |                1 |                   360 |               0 |              9999 |                       0 | REPEATABLE READ     |                 1 |                      1 | NULL                       |                         0 |                     10000 |                0 |                          0 |
+--------+-----------+---------------------+-----------------------+------------------+------------+---------------------+-----------+---------------------+-------------------+-------------------+------------------+-----------------------+-----------------+-------------------+-------------------------+---------------------+-------------------+------------------------+----------------------------+---------------------------+---------------------------+

我的计算机时间已经15:56了,事务还没有结束,前台调用存储过程虽然返回快,但后台事务还在运行
truncate table role;
call load2(10000,'jack',23);
[SQL]call load2(10000,'jack',23);

受影响的行: 0
时间: 0.462s
select * from information_schema.INNODB_TRX;

查看事务表为空;

从以上三个可以分析出,load0的执行时间较长,这是由于,每次提交,mysql都要写重做日志redo(ib_logfile0,1oad1虽然时间前台时间不长,但事务在后台运行,load3由于只做一次重做日志所以很快,当然我们是建议,不要在循环中事务提交,而是待所有语句执行完一起提交,最好不要在存储过程中开启事务,因为如果发生回滚,不知道出现什么错误,最好在代码中控制
如下:
try{
con.setautocommint(false)
con.commit();
}
catch(SQLException e){
con.rollback();
}


分享到:
评论

相关推荐

    mysql事务处理用法与实例详解

    ### MySQL事务处理用法与实例详解 #### 一、事务的概念及重要性 在数据库管理中,事务(Transaction)是指一系列作为一个整体的操作序列。这些操作要么全部成功,要么全部失败,不能只执行其中的一部分。事务处理...

    nodejs + mysql 事务处理问题

    nodejs + mysql 事物处理问题 呵呵 看了就知道 记得npm install啊 需要的东西啊 本想免费 苦于没积分 ,需要的的同学,给点分吧

    Java实现的mysql事务处理操作示例

    "Java实现的mysql事务处理操作示例" 本文主要介绍了Java实现的mysql事务处理操作,结合实例形式较为详细的分析了Java基于JDBC操作mysql数据库实现事务处理的相关概念、操作技巧与注意事项。 事务处理是数据库操作...

    mySQL事务处理

    关于mysql的事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System....

    MySql事务处理.docx

    MySQL 事务处理是数据库管理系统中的关键特性,主要用于确保数据操作的安全性和一致性。在MySQL中,事务主要应用于支持事务的存储引擎,如InnoDB或BDB。这些存储引擎能够提供事务的四大特性:原子性(Atomicity)、...

    mysql 事务处理学习资料+示例说明

    根据提供的文件信息,本文将详细解释MySQL事务处理的相关知识点,并结合具体的示例代码进行说明。 ### MySQL事务处理基础 在数据库操作中,事务处理是非常重要的一个环节,它能够确保数据的一致性和完整性。MySQL...

    MySQL事务处理详细讲解及完整实例

    本详细讲解将深入探讨MySQL事务处理的各个方面,并通过实例帮助你更好地理解和应用。 一、事务的基本特性 事务具有四大特性,也被称为ACID属性: 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部...

    Mysql事务处理详解

    MySQL事务处理详解主要涵盖事务的基本概念、特性以及事务隔离级别,这些都是数据库管理中至关重要的概念。MySQL中的事务主要用于处理大量且复杂的操作,确保数据的一致性和完整性。 首先,事务是MySQL数据库操作的...

    MySQL事务处理与并发访问.pdf

    MySQL事务处理与并发访问.pdf

    php实现mysql事务处理的方法

    本文实例讲述了php实现mysql事务处理的方法。分享给大家供大家参考。具体分析如下: 要实现本功能的条件是环境 mysql 5.2 /php 5 支持事务的table 类型,需要InnoDB,有了这些条件你就可以做上面的实现了,这个事物回滚...

    MySql事务处理.pdf

    MySQL中的事务处理是数据库管理的重要组成部分,主要目的是确保数据的一致性和完整性。事务是一组SQL语句,它们作为一个单元执行,要么全部成功,要么全部回滚,这确保了原子性。事务处理的引入是为了解决多用户、多...

    mysql事务处理[归类].pdf

    MySQL的事务处理是数据库管理中的核心功能,尤其在软件开发中,确保数据一致性、安全性和可靠性至关重要。事务处理允许数据库操作作为一个不可分割的整体执行,确保数据的完整性和一致性。在人员管理系统等应用中,...

    php下pdo的mysql事务处理用法实例

    接下来,我们来看PHP下PDO的MySQL事务处理实例。以下是几个关键步骤: 1. **关闭自动提交**:在开始事务之前,需要关闭自动提交模式。在PDO中,可以通过设置`PDO::ATTR_AUTOCOMMIT`属性为0来实现。例如: ```php ...

    MySQL事务处理与应用简析

    MySQL事务处理是数据库管理系统中的关键特性,特别是在需要确保数据完整性和一致性的商务级应用中。事务是一组数据库操作,它们被视为单个逻辑工作单元,必须全部成功执行或全部不执行。这种机制对于防止数据错误和...

    MySQL事务剖析1

    综上,MySQL事务处理是数据库系统中不可或缺的部分,它通过ACID特性、隔离级别、MVCC和锁机制确保数据的一致性,并在Java、Spring等开发环境中提供了便捷的事务管理接口。理解并合理使用这些概念和机制,对数据库...

Global site tag (gtag.js) - Google Analytics