MySQL事务处理与应用简析

 更新时间:2014年06月11日 16:11:47   投稿:shichen2014  
事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。这篇文章主要介绍了MySQL事务处理,需要的朋友可以参考下

事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
删除的SQL语句
delete from userinfo where ~~~
delete from mail where ~~
delete from article where~~
~~
如果没有事务处理,在你删除的过程中,假设出错了,只执行了第一句,那么其后果是难以想象的!
但用事务处理。如果删除出错,你只要rollback就可以取消删除操作(其实是只要你没有commit你就没有确实的执行该删除操作)
一般来说,在商务级的应用中,都必须考虑事务处理的!
查看inodb信息
shell> /usr/local/mysql -u root -p
mysql> show variables like "have_%"
系统会提示:
+------------------+-------+
| Variable_name     | Value |
+------------------+-------+
| have_bdb   | YES    |
| have_crypt | YES    |
| have_innodb| YES    |
| have_isam  | YES    |
| have_raid  | YES    |
| have_symlink      | YES    |
| have_openssl      | NO     |
| have_query_cache | YES    |
+------------------+-------+
8 rows in set (0.05 sec)
如果是这样的,那么我们就可以创建一张支持事务处理的表来试试了。
MYSQL的事务处理功能!
一直以来我都以为MYSQL不支持事务处理,所以在处理多个数据表的数据时,一直都很麻烦(我是不得不将其写入文本文件,在系统重新加载得时候才写入数据库以防出错)~今天发现MYSQL数据库从4.1就开始支持事务功能,据说5.0将引入存储过程^_^
先简单介绍一下事务吧!事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)
原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit  事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0   禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
但注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!(切记!)
MYSQL5.0 WINXP下测试通过~ 
mysql> use test;
Database changed
mysql> CREATE TABLE `dbtest`(
-> id int(4)
-> ) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> select * from dbtest
-> ;
Empty set (0.01 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dbtest value(5);
Query OK, 1 row affected (0.00 sec)
mysql> insert into dbtest value(6);
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dbtest;
+------+
| id    |
+------+
|     5 |
|     6 |
+------+
2 rows in set (0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dbtest values(7);
Query OK, 1 row affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dbtest;

+------+
| id    |
+------+
|     5 |
|     6 |
+------+
2 rows in set (0.00 sec)
mysql>
*******************************************************************************************************************

复制代码 代码如下:

function Tran( $sql ) {
$judge = 1;
mysql_query('begin');
foreach ($sql as $v) {
if ( !mysql_query($v) ) {
$judge = 0;
}
}
if ($judge == 0) {
mysql_query('rollback');
return false;
}
elseif ($judge == 1) {
mysql_query('commit');
return true;
}
}

************************************************
复制代码 代码如下:

<?php
$handler=mysql_connect("localhost","root","");
mysql_select_db("task");
mysql_query("SET AUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行
mysql_query("BEGIN");//开始事务定义
if(!mysql_query("insert into trans (id) values('2')"))
{
mysql_query("ROOLBACK");//判断当执行失败时回滚
}
if(!mysql_query("insert into trans (id) values('4')"))
{
mysql_query("ROOLBACK");//判断执行失败回滚
}
mysql_query("COMMIT");//执行事务
mysql_close($handler);
?>

相关文章

  • Navicat操作MYSQL的详细过程

    Navicat操作MYSQL的详细过程

    这篇文章主要介绍了Navicat操作MYSQL的详细过程,包括数据表的操作修改删除操作,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • mysql基础架构教程之查询语句执行的流程详解

    mysql基础架构教程之查询语句执行的流程详解

    这篇文章主要给大家介绍了关于mysql基础架构教程之查询语句执行流程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-11-11
  • mysql 连接出现Public Key Retrieval is not allowed的问题解决

    mysql 连接出现Public Key Retrieval is n

    在MySQL连接中出现“Public Key Retrieval is not allowed”错误,通常是因为在使用安全套接字层(SSL)连接时遇到了问题,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2024-03-03
  • phpmyadmin出现#2003服务器无响应解决方法小结

    phpmyadmin出现#2003服务器无响应解决方法小结

    出现登陆phpmyadmin出现 #2003 - 服务器没有响应最先想到的是你的mysql服务器是不是停止了检查一下,如果是mysql服务器停止服务了重启就可以解决问题了
    2012-04-04
  • 超简单的qps统计方法(推荐)

    超简单的qps统计方法(推荐)

    下面小编就为大家带来一篇超简单的qps统计方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL 的模块不能安装的解决方法

    MySQL 的模块不能安装的解决方法

    这篇文章主要介绍了MySQL 的模块不能安装的解决方法的相关资料,需要的朋友可以参考下
    2015-07-07
  • MySQL总是差八个小时该如何解决

    MySQL总是差八个小时该如何解决

    最近在用mybatis时发现,将LocalDateTime插入到数据库时时间少了8小时,下面这篇文章主要给大家介绍了关于MySQL总是差八个小时该如何解决的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • MySQL免安装版(zip)安装配置详细教程

    MySQL免安装版(zip)安装配置详细教程

    这篇文章主要为大家详细介绍了MySQL免安装版(zip)安装配置详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • mysql函数IFNULL使用的及注意事项说明

    mysql函数IFNULL使用的及注意事项说明

    这篇文章主要介绍了mysql函数IFNULL使用的及注意事项说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • mysql增删改查基础语句

    mysql增删改查基础语句

    这篇文章主要介绍了mysql增删改查基础语句,需要的朋友可以参考下
    2017-10-10

最新评论