Mysql事务处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql事务处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3584字,纯文字阅读大概需要6分钟。
内容图文
![Mysql事务处理](/upload/InfoBanner/zyjiaocheng/1331/8a12ae9503b94a07abb7619b25aa0373.jpg)
事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
删除的
SQL
语句
deletefrom userinfo where ~~~
delete from mail where ~~
delete fromarticle where~~
~~
如果没有事务处理,在你删除的过程中,假设出错了,只执行了第一句,那么其后果是难以想象的!
但用事务处理。如果删除出错,你只要
rollback
就可以取消删除操作(其实是只要你没有
commit
你就没有确实的执行该删除操作)
一般来说,在商务级的应用中,都必须考虑事务处理的!
查看
inodb
信息
shell> /usr/local/mysql -u root -p
mysql> showvariables 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.05sec)
如果是这样的,那么我们就可以创建一张支持事务处理的表来试试了。
MYSQL
的事务处理功能!
作者:
Feifengxlq Email:feifengxlq@sohu.com
一直以来我都以为
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
开启自动提交
来实现事务的处理。
但注意当你用
setautocommit=0
的时候,你以后所有的
SQL
都将做为事务处理,直到你用
commit
确认或
rollback
结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL
中只有
INNODB
和
BDB
类型的数据表才能支持事务处理!其他的类型是不支持的!(切记!)
下次有空说下
MYSQL
的数据表的锁定和解锁!
MYSQL5.0 WINXP
下测试通过~
^_^
mysql>use test;
Database changed
mysql> CREATE TABLE `dbtest`(
-> id int(4)
-> ) TYPE=INNODB;
Query OK, 0 rowsaffected, 1 warning (0.05 sec)
mysql> select * from dbtest
-> ;
Empty set (0.01 sec)
mysql> begin;
QueryOK, 0 rows affected (0.00 sec)
mysql> insert into dbtestvalue(5);
Query OK, 1 row affected (0.00 sec)
mysql>insert into dbtest value(6);
Query OK, 1 row affected (0.00sec)
mysql> commit;
Query OK, 0 rows affected (0.00sec)
mysql> select * from dbtest;
+------+
| id |
+------+
| 5 |
| 6 |
+------+
2 rows in set(0.00 sec)
mysql> begin;
Query OK, 0 rows affected (0.00sec)
mysql> insert into dbtest values(7);
Query OK, 1row affected (0.00 sec)
mysql> rollback;
Query OK, 0rows affected (0.00 sec)
mysql> select * fromdbtest;
+------+
| id |
+------+
| 5 |
| 6|
+------+
2 rows in set (0.00sec)
mysql>
*******************************************************************************************************************
[PHP]
functionTran( $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]
************************************************
<?php
$handler=mysql_connect("localhost","root","");
mysql_select_db("task");
mysql_query("SETAUTOCOMMIT=0");//
设置为不自动提交,因为
MYSQL
默认立即执行
mysql_query("BEGIN");//
开始事务定义
if(!mysql_query("insertinto trans (id)values(‘2‘)"))
{
mysql_query("ROOLBACK");//
判断当执行失败时回滚
}
if(!mysql_query("insertinto trans (id)values(‘4‘)"))
{
mysql_query("ROOLBACK");//
判断执行失败回滚
}
mysql_query("COMMIT");//
执行事务
mysql_close($handler);
?>
原文:http://blog.csdn.net/network_boy/article/details/44833121
内容总结
以上是互联网集市为您收集整理的Mysql事务处理全部内容,希望文章能够帮你解决Mysql事务处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。