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 5.7 完美的分布式事务支持

Two Phase Commit Protocol 分布式事务通常采用2PC协议,全称Two Phase Commitment Protocol。该协议主要为了解决在分布式数据库场景下,所有节点间数...

较全面的php mysql封装,使用mysqli对象支持预处理和事务,可输出执行后的sql

基于mysqli写的sql封装语句,可支持预处理和事务,可以输出最后执行的sql。 所有的条件以数组传递即为预处理语句,否则为原始语句执行传递字符串 调用方法如下: $mysqlObj = new m...

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

http://www.baike369.com/content/?id=5456 MySQL不支持事务处理的解决方法 MySQL数据库默认的存储引擎类型是MyISAM,...

MariaDB与MySQL对比 --- 对分布式事务的支持

这个文章是我在自己的个人微信公众号“数据库开发者” 里面首发的,现在在我的博客里面再发一遍。欢迎您扫码关注“数据库开发者” 公众号。 MariaDB和MySQL两者对分布式事务的支持有所不同,总...

如何开启mysql的事务支持

1,编程式事务管理(jdbc的事务是绑定在connection上的)Connection conn = null;try{Class.forName("com.mysql.jdbc.Driver");...

mysql 存储过程(我自己写的第一个存储过程,支持事务管理)2

自己写的第一个存储过程(procedure),写的还算是比较顺利,在此要多些baidu的帮助,呵呵! 该存储过程支持事务处理,好像在baidu上查看时,发现有些表在创建时声明表类型是Inno...

Mysql对事务的支持

http://apps.hi.baidu.com/share/detail/31961419   MySQL与事务 欢迎访问火丁笔记:http://huoding.com/ 火丁...

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

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

mysql表类型MyISAM和InnoDB区别(mysql 不支持事务解决)

mysql表类型MyISAM和InnoDB区别 MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql支持事务
举报原因:
原因补充:

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