当前位置: 首页 > news >正文

Mysql事务处理

在各项管理制度的交易都有着广泛的应用,让我们的人事管理系统,大多数同步数据库操作非常需要使用事务处理。例如,管理系统中。你删除一个人员,你即须要删除人员的基本资料,也要删除和该人员相关的信息。如信箱,文章等等,这样。这些数据库操作语句就构成一个事务!


删除的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
中仅仅有INNODBBDB类型的数据表才干支持事务处理。其它的类型是不支持的!(切记!



下次有空说下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);
?>

版权声明:本文博主原创文章,博客,未经同意不得转载。

相关文章:

  • UVA 11769 All Souls Night 的三维凸包要求的表面面积
  • html: Table合并行和列
  • win10升级提示图标的四种关闭方法
  • window平台下的MySQL快速安装。(不好意思,未完成待续,请飘过)
  • 教您如何检查oracle死锁,决解死锁
  • openlayers限制地图拖动区域
  • 测试人员的职业修养
  • 批生产数据库
  • 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
  • java中Map,List与Set的区别
  • 利用print2flashsetup.exe文档转swf
  • poj 3254 Corn Fields 国家压缩dp
  • [实战]MVC5+EF6+MySql企业网盘实战(5)——登录界面,头像等比例压缩
  • [转]Java输入输出流的使用详细介绍
  • 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数005·graphics-obj,基本绘图单元,包括线段、矩形、椭圆、圆形...
  • 《剑指offer》分解让复杂问题更简单
  • 【技术性】Search知识
  • Android框架之Volley
  • fetch 从初识到应用
  • HTTP 简介
  • HTTP请求重发
  • js学习笔记
  • LeetCode29.两数相除 JavaScript
  • MySQL的数据类型
  • MySQL-事务管理(基础)
  • yii2权限控制rbac之rule详细讲解
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 关于extract.autodesk.io的一些说明
  • 机器学习中为什么要做归一化normalization
  • 基于axios的vue插件,让http请求更简单
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端存储 - localStorage
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 自定义函数
  • 1.Ext JS 建立web开发工程
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #考研#计算机文化知识1(局域网及网络互联)
  • (1)虚拟机的安装与使用,linux系统安装
  • (BFS)hdoj2377-Bus Pass
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (javascript)再说document.body.scrollTop的使用问题
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二)hibernate配置管理
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (全注解开发)学习Spring-MVC的第三天
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)大型网站的系统架构
  • .Net 6.0 处理跨域的方式
  • .net FrameWork简介,数组,枚举
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)