mysql支持事务

原创 2008年11月02日 10:43:00
mysql的innodb支持事务处理的  
   
  Suppose   that   you   have   started   the   MySQL   client   with   the   command   mysql   test.   To   create   an   InnoDB   table,   you   must   specify   and   ENGINE   =   InnoDB   or   TYPE   =   InnoDB   option   in   the   table   creation   SQL   statement:    
   
  CREATE   TABLE   customers   (a   INT,   b   CHAR   (20),   INDEX   (a))   ENGINE=InnoDB;  
  CREATE   TABLE   customers   (a   INT,   b   CHAR   (20),   INDEX   (a))   TYPE=InnoDB;  
   
   
   
   
  操作的时候  
  begin  
  rollback  
  commit  
   
   
  15.7.1.   How   to   Use   Transactions   in   InnoDB   with   Different   APIs  
  By   default,   each   client   that   connects   to   the   MySQL   server   begins   with   autocommit   mode   enabled,   which   automatically   commits   every   SQL   statement   you   run.   To   use   multiple-statement   transactions,   you   can   switch   autocommit   off   with   the   SQL   statement   SET   AUTOCOMMIT   =   0   and   use   COMMIT   and   ROLLBACK   to   commit   or   roll   back   your   transaction.   If   you   want   to   leave   autocommit   on,   you   can   enclose   your   transactions   between   START   TRANSACTION   and   COMMIT   or   ROLLBACK.   Before   MySQL   4.0.11,   you   have   to   use   the   keyword   BEGIN   instead   of   START   TRANSACTION.   The   following   example   shows   two   transactions.   The   first   is   committed   and   the   second   is   rolled   back.    
   
  shell>   mysql   test  
  Welcome   to   the   MySQL   monitor.     Commands   end   with   ;   or   /g.  
  Your   MySQL   connection   id   is   5   to   server   version:   3.23.50-log  
  Type   'help;'   or   '/h'   for   help.   Type   '/c'   to   clear   the   buffer.  
  mysql>   CREATE   TABLE   CUSTOMER   (A   INT,   B   CHAR   (20),   INDEX   (A))  
          ->   TYPE=InnoDB;  
  Query   OK,   0   rows   affected   (0.00   sec)  
  mysql>   BEGIN;  
  Query   OK,   0   rows   affected   (0.00   sec)  
  mysql>   INSERT   INTO   CUSTOMER   VALUES   (10,   'Heikki');  
  Query   OK,   1   row   affected   (0.00   sec)  
  mysql>   COMMIT;  
  Query   OK,   0   rows   affected   (0.00   sec)  
  mysql>   SET   AUTOCOMMIT=0;  
  Query   OK,   0   rows   affected   (0.00   sec)  
  mysql>   INSERT   INTO   CUSTOMER   VALUES   (15,   'John');  
  Query   OK,   1   row   affected   (0.00   sec)  
  mysql>   ROLLBACK;  
  Query   OK,   0   rows   affected   (0.00   sec)  
  mysql>   SELECT   *   FROM   CUSTOMER;  
  +------+--------+  
  |   A         |   B             |  
  +------+--------+  
  |       10   |   Heikki   |  
  +------+--------+  
  1   row   in   set   (0.00   sec)  
  mysql>  
   
  In   APIs   like   PHP,   Perl   DBI/DBD,   JDBC,   ODBC,   or   the   standard   C   call   interface   of   MySQL,   you   can   send   transaction   control   statements   such   as   COMMIT   to   the   MySQL   server   as   strings   just   like   any   other   SQL   statements   such   as   SELECT   or   INSERT.   Some   APIs   also   offer   separate   special   transaction   commit   and   rollback   functions   or   methods. 







...数据库连接...  
  mysql_query('BEGIN');   开启事务  
   
  $SQL   =   "...";  
  mysql_query($SQL);  
  if(mysql_errno)   {  
      print   mysql_error();  
      mysql_query('ROLLBACK');     出错就回卷  
      exit();  
  }  
  ...   可以重复上述自   $SQL   =   "...";   开始的过程(中间可以加入其他操作,不局限于数据库更新,但是注意,最好不要让一个事务时间过长,因为它锁定所有你用到的表,会影响其他程序使用)   ...  
  你也可以在几条正确的sql更新语句后故意写一句错误的,看看是否回卷了。  
   
  mysql_query('COMMIT');   能够到这里,代表上述数据库操作都没有错,正式提交执行  
   
  如果mysql版本太低还没有事务支持,只能锁定那些表来替代。  
  还有就是注意要建立能用事务操作的表类型。以及除了   commit   外还有什么语句能结束一个事务。看帮助吧。










锁表和事务是有区别的,而且很关键。  
  锁定是不能够替代事务的,事务做为一个原子操作,一旦中间任何环节出错,会自动回卷恢复到原先状态。  
  而锁定工作表,再释放锁定是没有这个功能的。一旦某条语句出错,那么之前的语句还是作用于数据库了,你只能手工来修正。

什么是数据库的事务?MySql中哪些存储引擎支持事务?

什么是事务?事务由一个或多个sql语句组成一个整体,如果所有的语句执行成功那么修改将会全部生效,如一条sql语句将销量+1,下一条再+1,倘若第二条失败,那么销量将撤销第一条sql语句的+1操作,只有...
  • u013019431
  • u013019431
  • 2017年11月15日 22:16
  • 612

MySQL不支持事务处理的解决方法

http://www.baike369.com/content/?id=5456 MySQL不支持事务处理的解决方法 MySQL数据库默认的存储引擎类型是MyISAM,...
  • zunguitiancheng
  • zunguitiancheng
  • 2016年04月09日 20:13
  • 1929

Mysql存储引擎与事务

存储引擎: 数据库对同样的数据,有着不同的存储方式和管理方式。在Mysql中,称为存储引擎。 常用的表的引擎:Myism   InnoDB    BDB   Memory  Arc...
  • FreeeLinux
  • FreeeLinux
  • 2016年11月22日 18:52
  • 519

MySQL 5.7 完美的分布式事务支持

Two Phase Commit Protocol 分布式事务通常采用2PC协议,全称Two Phase Commitment Protocol。该协议主要为了解决在分布式数据库场景下,所有节点间数...
  • skiof007
  • skiof007
  • 2016年10月24日 15:22
  • 1076

mysql表类型MyISAM和InnoDB区别(决定了是否支持事务)

http://blog.csdn.net/ocean1010/article/details/6908064 mysql表类型MyISAM和InnoDB区别 MyISAM:这个是默认类型,它是基于...
  • gukesdo
  • gukesdo
  • 2011年11月29日 21:47
  • 4451

mysql 事务 与 数据库引擎

mysql版本:Server version: 5.1.73 Source distribution 今天测试JTA/JDBC安装了mysql数据库,发现事务总是不生效,后发现是mysql默认的数据...
  • conquer0715
  • conquer0715
  • 2015年09月04日 22:58
  • 4089

mysq5.5和mysq5.6事务区别

先说一下mysql5.5跳过事务方法 GTID跳过有两种方法,一种是普通的跳过一个事务的方法,另外一个是在基于主库搭建新的slave的时候. 一、普通跳过一个事务的方法。 通过show slave...
  • zkaipmoo
  • zkaipmoo
  • 2015年01月06日 16:36
  • 1107

一个支持主从,事务以及连接池功能的mysql-proxy脚本

看了点例子,根据mysql-proxy里的keepalive例子修改了一个支持主从分离,事务到主库,非事务查询到从库,以及连接断开时自动回滚的脚本,分享一下。--[[ $%BEGINLICENSE%$...
  • HopingWhite
  • HopingWhite
  • 2010年08月25日 11:34
  • 4753

mysql事务和配置

一:代码写法: function out_data_to_mysql(&$result) { global $config; global $ymd; $connect_mys...
  • lixingying567
  • lixingying567
  • 2017年07月07日 15:03
  • 198

ThinkPHP 3.2.3 Mysql事务嵌套支持

ThinkPHP 3.2.3 Mysql事务嵌套支持 需要修改三个文件 1、Library/Think/Model.class.php  代码如下,第1501行注释掉就好 /**  ...
  • qq_29058883
  • qq_29058883
  • 2018年01月19日 16:42
  • 68
收藏助手
不良信息举报
您举报文章:mysql支持事务
举报原因:
原因补充:

(最多只允许输入30个字)