MYSQL的事务处理主要有两种方法:

MYSQL的事务处理主要有两种方法:
 
  1、用begin,rollback,commit来实现
  begin 开始一个事务
  rollback 事务回滚
  commit 事务确认
 
  2、直接用set来改变mysql教程的自动提交模式
  MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
  set autocommit=0 禁止自动提交
  set autocommit=1 开启自动提交
  来实现事务的处理。
  当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。
  注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
 
  常用的是第一种方法!
 
  MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!一般MYSQL数据库教程默认的引擎是MyISAM,这种引擎不支持事务!如果要让MYSQL支持事务,可以自己手动修改:
  方法如下:
  1.修改c:apps教程ervmysqlmy.ini文件,找到skip-InnoDB,在前面加上#,后保存文件。
  2.在运行中输入:services.msc,重启mysql服务。
  3.到php教程myadmin中,mysql->show engines;(或执行mysql->show variables like 'have_%'; ),查看InnoDB为YES,即表示数据库支持InnoDB了。也就说明支持事务transaction了。
  4.在创建表时,就可以为Storage Engine选择InnoDB引擎了。如果是以前创建的表,可以使用mysql->alter table table_name type=InnoDB;
  或 mysql->alter table table_name engine=InnoDB;来改变数据表的引擎以支持事务。 </p>
SET?FOREIGN_KEY_CHECKS=0;

—?—————————-

—?Table?structure?for?open_article

—?—————————-

CREATE?TABLE?`open_article`?(

`nId`?int(11)?NOT?NULL?auto_increment,

`nOrder`?int(11)?default?‘0′,

`sTopic`?varchar(100)?default?NULL,

`sContent`?varchar(255)?default?NULL,

`dDatetime`?timestamp?NULL?default?CURRENT_TIMESTAMP?on?update?CURRENT_TIMESTAMP,

PRIMARY?KEY?(`nId`)

)?ENGINE=InnoDB?DEFAULT?CHARSET=utf8;

 

<?PHP

header(”Content-Type:text/html;charset=utf-8″);

 

$host?=?“localhost”;

$user?=?“root”;

$password?=?“mypassword”;

$db?=?“test_store_proc”;

$dblink?=?mysql_connect($host,?$user,?$password)?or?die(”Can’t?connect?to?mysql”);

mysql_select_db($db,?$dblink);

mysql_query(”SET?NAMES?UTF8″);

 

/*?创建事务?*/?

mysql_query(’START?TRANSACTION’)?or?exit(mysql_error());

 

//第1条插入语句:

$sql?=?“insert?into?open_article?(nOrder,?sTopic,?sContent)?values?(0,?‘News?Main?Topic-1′,’资讯内容-1′)”;

if(!mysql_query($sql))

{

echo?$sql?.’:<br>’.?mysql_errno()?.?“:”?.?mysql_error()?.?“<br>”;

mysql_query(’ROLLBACK’)?or?exit(’ROLLBACKing:’.?mysql_error());?//判断当执行失败时回滚

exit;

}

 

//第2条插入语句:

$sql?=?“insert?into?open_article?(nOrder,?sTopic,?sContent)?values?(0,?‘News?Main?Topic-2′,’资讯内容-2′)”;

if(!mysql_query($sql))

{

echo?$sql?.’:<br>’.?mysql_errno()?.?“:”?.?mysql_error()?.?“<br>”;

mysql_query(’ROLLBACK’)?or?exit(’ROLLBACKing:’.?mysql_error());?//判断当执行失败时回滚

exit;

}

 

mysql_query(’COMMIT’)?or?exit(mysql_error());?//执行事务

 

mysql_close($dblink);

?>

如果把第2条插入SQL语句改为:
    $sql = “insert into open_article (nOrder, sTopic2, sContent) values (0, ‘News Main Topic-2′,’资讯内容-2′)”;
    由于sTopic2字段不存在,程序会报错终止。这时会发现没有记录被插入到表中,说明第1条插入SQL语句也没有生效,实际是被事务回滚了。
    怎么看出是“被事务回滚了”?因为open_article表的有个自动增量字段 nId。当重新纠正第2条插入SQL语句,再运行程序时,会发现 nId 的值跳了1,说明前次第1条插入SQL语句确实被执行了,然后又被取消

时间: 2024-09-20 12:08:13

MYSQL的事务处理主要有两种方法:的相关文章

MySQL查看用户权限的两种方法

ySQL查看用户权限命令的两方法: 一. 使用MySQL grants 使用方法:  代码如下 复制代码 mysql> show grants for username@localhost;实例: mysql> show grants for root@localhost; +---------------------------------------------------------------------+ | Grants for root@localhost            

加大MYSQL中的最大连接数的两种方法

mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些, 有两种办法可以修改最大连接数,一种是修改safe_mysqld,另一种是直接修改原代码并重新编译.下面我们就分别介绍这两种方法: 1.修改safe_mysqld 找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 : -O max_connections=1000 例如 :(其中前面有---的

MySQL删除数据库的两种方法_Mysql

本文为大家分享了两种MySQL删除数据库的方法,供大家参考,具体内容如下 第一种方法:使用 mysqladmin 删除数据库使用普通用户登陆mysql服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库. 在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失. 以下实例删除数据库TUTORIALS(该数据库在前一章节已创建): [root@h

c++连接mysql数据库的两种方法(ADO连接和mysql api连接)_C 语言

第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的SQL语句不太兼容标准SQL语句,需要做一些处理,这里暂时不说.第二种方法只能针对于mysql数据库的连接,不过用这种方法不用安装MyODBC服务器程序. 不管用哪种方法,首先需要安装Mysql数据库,安装方法请看"mysql安装及一些注意点".最好安装一个Navicat for mysql,方便操作mysql数

MySql安装启动两种方法教程详解_Mysql

mysql安装启动两种方法如下所示: 方法一(简单版): 1.cmd进入mysql安装的bin目录:mysqld.exe –install 2.net start mysql 服务启动(或者选择计算机->(右键)管理->服务和应用程序->服务->mysql右键启动服务) 3.mysql –uroot –p 回车 4.password留空 回车 方法二: 1.cmd进入到mysql安装目录bin,如:D:\MySQL Server 5.6\bin 2.mysqld --console

实现树状结构的两种方法

实现树状结构的两种方法1.递归法递归是指在函数中显式的调用它自身.利用递归法实现树状结构的特点是写入数据速度较快,显示速度较慢(在树的分支/层次较多的情况下尤其明显).适用与写入数据量大,树的结构复杂的情况下.数据结构(以mysql为例) 代码:--------------------------------------------------------------------------------CREATE TABLE `tree1` ( `id` tinyint(3) unsigned

PHP中对用户身份认证实现两种方法

当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用户输入用户名和密码,对用户的身份进行验证,以决定用户是否有权访问页面.下面用两种方法来说明其实现原理. 一.用HTTP标头来实现 标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串.HTTP采用一种挑战/响应模式对试图进入受密码保护区域的用户进行身份验证.具体来说,当用户首次向WEB服务器发出访问受保护区域的请求时,挑战进程被启动,服务器返回特殊的401标头,表明该用户身份未经验证.客户端浏览器在检测到上述响应之后自动弹出对

在PHP中实现用户身份认证两种方法

用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于Web于HTTP协议的用户身份验证机制.当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用户输入用户名和密码,对用户的身份进行验证,以决定用户是否有权访问页面.下面用两种方法来说明其实现原理. 一.用HTTP标头来实现 标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串.HTTP采用一种挑战/响应模式对试图进入受密码保护区域的用户进行身份验证.具体来说,当用户首次向Web器发出访问受

PHP中用户身份认证实现的两种方法

用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制.当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用户输入用户名和密码,对用户的身份进行验证,以决定用户是否有权访问页面.下面用两种方法来说明其实现原理. 一.用HTTP标头来实现 标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串.HTTP采用一种挑战/响应模式对试图进入受密码保护区域的用户进行身份验证.具体来说,当用户首次向WEB服