CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  PHP

如何使用PHP执行事务处理的操作?PHP3.6RC + MYSQL4.1.1

楼主ChitchatPrince(幸福126+)2005-05-16 10:04:09 在 Web 开发 / PHP 提问

我在看MYSQL时版本还早,知道MyISAM、DBD、HEAP类型的表,但新添的InnoDB和ISAM类型的表都有什么功能呀?  
   
  在PHP下执行事务处理,又要怎么做哪,是用DBD类型的表好,还是InnoDB类型的表好。  
   
  最主要还是代码应该如何来写?  
   
  还望大家多多帮助~~~ 问题点数:100、回复次数:22Top

1 楼jxflll(峰)回复于 2005-05-16 10:09:04 得分 5

沙发!帮你顶一下。Top

2 楼underone(再看抽你小丫的)回复于 2005-05-16 10:13:30 得分 5

关注  
  UPTop

3 楼twt326(天地小子)回复于 2005-05-16 11:33:52 得分 5

InnoDB类型的表支持事务处理,好像也是要MYSQL的版高一些才行Top

4 楼ChitchatPrince(幸福126+)回复于 2005-05-16 12:39:21 得分 0

MyISAM、DBD、HEAP类型的表,是在MYSQL   3。X版本中的有,MyISAM是普通的表,不支持事务;HEAP是内存里的表,速度快,但关机就没了,也不安全,DBD是安全表,支持事务,但我看书上说支持的不好,但不好在哪里就不知道了。  
   
  InnoDB和ISAM类型的表是在MYSQL   4。X中新添加,有什么功能就不知道了。  
   
  DBD和InnoDB都支持事务处理,但哪个要好一点哪?Top

5 楼ChitchatPrince(幸福126+)回复于 2005-05-16 12:40:21 得分 0

执行事务时,PHP的代码要怎样写呀?Top

6 楼lawyu(雨淋漓)回复于 2005-05-16 12:59:31 得分 5

php本身并不处理事务,mysql   4.0.11     以上版本用   START   TRANSACTION   或   BEGIN   或   BEGIN   WORK    
  START   TRANSACTION;  
  SELECT   @A:=SUM(salary)   FROM   table1   WHERE   type=1;  
  UPDATE   table2   SET   summmary=@A   WHERE   type=1;  
  COMMIT;  
   
  Top

7 楼ChitchatPrince(幸福126+)回复于 2005-05-16 14:34:40 得分 0

那在PHP下就无法执行事务处理了吗Top

8 楼ChitchatPrince(幸福126+)回复于 2005-05-17 14:56:58 得分 0

期待中。。。。。Top

9 楼leinchu(忙啊,终于升级了)回复于 2005-05-17 16:55:22 得分 5

mysql4.1不支持子查询吗?Top

10 楼ChitchatPrince(幸福126+)回复于 2005-05-18 10:30:07 得分 0

呵呵,这个不太清楚Top

11 楼lanyd(寻找甘当科学家的女人)回复于 2005-05-18 11:06:45 得分 30

楼主,你没有看帖么?  
  上面已经有人说了innoDB和DBD都支持事务呀!  
  连代码都给出了!  
   
  START   TRANSACTION;  
  SELECT   @A:=SUM(salary)   FROM   table1   WHERE   type=1;  
  UPDATE   table2   SET   summmary=@A   WHERE   type=1;  
  COMMIT;  
   
  不过,我也有一点不解.上面使用了@A变量.  
  但我发现在PHP用mysql_query("START   TRANSACTION;  
  SELECT   @A:=SUM(salary)   FROM   table1   WHERE   type=1;")会报错!  
  原因是有2个分号,那我将它分为二句mysql_query("START   TRANSACTION;  
  和mysql_query("SELECT   @A:=SUM(salary)   FROM   table1   WHERE   type=1;")就OK了.  
  why   ??  
   
  还有,@A是MYSQL执行时的临时变量吧,那我如果像上面一样用几个mysql_query("")分步执行的,@A还能保存住么?  
  还有,万一几个进程同时进行数据库操作,MYSQL哪知道这个@A是谁产生的呢?难道不会搞乱?  
   
  Top

12 楼lanyd(寻找甘当科学家的女人)回复于 2005-05-18 11:10:55 得分 0

来看看这边高手的发言  
  http://community.csdn.net/Expert/topic/3998/3998884.xml?temp=.5482294  
  Top

13 楼lanyd(寻找甘当科学家的女人)回复于 2005-05-18 11:16:07 得分 0

对了,假如满足条件的记录不止一条,下面的语句会将它们一一对应么?则table1.keyfield关联到table2.keyfield,一条主档记录对应一条或多条明细记录.  
   
  SELECT   @A:=SUM(salary)   FROM   table1   WHERE   type=1;  
  UPDATE   table2   SET   summmary=@A   WHERE   type=1;Top

14 楼ChitchatPrince(幸福126+)回复于 2005-05-18 11:29:25 得分 0

幸福126+       那就是我呀Top

15 楼ChitchatPrince(幸福126+)回复于 2005-05-18 11:41:08 得分 0

看到一个别人的贴  
   
  将数据库类型改为innoDB  
   
  $sql1   =   "set   auto_commite=0";  
  $sql2   =   "begin";  
  $sql3   =   "update......";  
  $sql4   =   "update.......";  
  $sql5   =   "commite";  
  $sql6   =   "rollback";  
   
  mysql_query($sql1);  
  mysql_query($sql2);  
  mysql_query($sql3);  
  mysql_query($sql4);  
  if(mysql_errno)  
          mysql_query($sql5);  
  else  
          mysql_query($sql6);  
   
  要是这样的话,是不是不能使用一个稳固的连接。  
   
  比如说,几个人同时刷新,怎么知道SQL2是哪个页面发过来的。Top

16 楼ChitchatPrince(幸福126+)回复于 2005-05-18 11:43:54 得分 0

使用  
  db=mysql_connect($host,$user,$pwd)     //打开一个新连接  
   
  而不是使用  
  db=mysql_connectd($host,$user,$pwd)     //如果有一个连接,则使用这个连接  
  Top

17 楼lanyd(寻找甘当科学家的女人)回复于 2005-05-18 14:25:16 得分 0

晕了,不明白你是提问的,还是回答的了:pTop

18 楼lanyd(寻找甘当科学家的女人)回复于 2005-05-18 14:29:10 得分 0

看看我的怪问题,在PHP和MYSQL中如何搞定它!  
   
  http://community.csdn.net/Expert/topic/4014/4014752.xml?temp=.4669153Top

19 楼ChitchatPrince(幸福126+)回复于 2005-05-18 20:27:13 得分 0

呵,也没人回答呀,都是自己慢慢找的.Top

20 楼ChitchatPrince(幸福126+)回复于 2005-05-18 20:33:56 得分 0

可还是有点不懂  
   
  要是使用db=mysql_connect($host,$user,$pwd)来连接,速度不是要很慢.  
   
  要地使用db=mysql_connectd($host,$user,$pwd),会不会出现,当两个网页同时刷新时,一个网页进行事务处理,别一个网页就是简单的更新,当事务页出错时,数据回滚会不会把简单更新的处理也给回滚了呀.  
   
  MYSQL能认识是哪个网页在进行事务吗?Top

21 楼ChitchatPrince(幸福126+)回复于 2005-05-19 11:17:38 得分 0

............................................................................Top

22 楼rardge(Rardge)回复于 2005-05-19 11:30:19 得分 45

如果用   $db   =   mysql_connect($host,   $user,   $pwd)   来连接数据库服务器,那么不同网页(即使是一个网页多次提交)提交的连接请求都被返回一个不同的连接标识,而后的查询都是需要这个   $db   标识的(看看   PHP   语法就知道了),一旦PHP脚本程序已经执行完毕页面生成,那么这些都会被自动释放。所以不用担心   MySQL   会搞混不同地方来的查询请求。  
  另外,事务回卷只是回卷该事务中涉及到的命令,不会回卷其它进程的查询。你可以自己开两个mysql窗口做试验么。  
  不过有一点倒是要注意,“事务”过程中并不代表其它进程不能更新这些表了,事务并不锁定表,如果你要实现类似这样的操作,要自己在事务中通过SQL来锁定。具体的看   MySQL   参考手册中   InnoDB   章节。Top

相关问题

  • 【求助】PHP+MYSQL进行事务处理
  • 使用PHP+MySQL如何实现事务处理,比如提交和回滚?请给个例子
  • jsp+mysql同时提交两张表,事务处理如何写?
  • MySQL C API中有没有事务处理的函数啊?
  • mysql 如何 使用 事务处理 语句????????????
  • 事务处理
  • 事务处理
  • 一个关于MYSQL事务处理的选择题,顺便散分。
  • Db2 事务处理
  • Db2 事务处理

关键词

  • .net
  • 执行
  • mysql
  • php
  • 版本
  • start
  • 事务处理
  • dbd
  • innodb
  • 事务

得分解答快速导航

  • 帖主:ChitchatPrince
  • jxflll
  • underone
  • twt326
  • lawyu
  • leinchu
  • lanyd
  • rardge

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo