MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 5942|回复: 10
打印 上一主题 下一主题

[事务及锁] 新人诚心求教(关于mysql事务概念)

[复制链接]
1#
发表于 2014-3-18 16:24:34 | 显示全部楼层
这样应该是不管怎样都提交了吧。

貌似是要判读一下吧
如果出错就rollback
如果正常事务提交。

如,仅供参考:
$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
//开始一个事务
mysql_query("BEGIN"); //或者mysql_query("START TRANSACTION");
$sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1', '0')";
$sql2 = "INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, 'test1', '0')";//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2);  
if($res && $res1){
mysql_query("COMMIT");
echo '提交成功。';
}else{
mysql_query("ROLLBACK");
echo '数据回滚。';
}
mysql_query("END");
2#
发表于 2014-3-19 10:56:04 | 显示全部楼层
这两篇关于MySQL事务的帖子值得细看看:

另外做了个例子,你可以实际测测:


存储过程
DELIMITER $$
USE `test`$$

DROP PROCEDURE IF EXISTS `sp_mysqlpub`$$
CREATE PROCEDURE sp_mysqlpub (v_value INT)
BEGIN
/** 标记是否出错 */  
DECLARE t_error INT DEFAULT 0;  
/** 如果出现sql异常,则将t_error设置为1后继续执行后面的操作 */  
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; -- 出错处理
  START TRANSACTION;   -- 或 SET autocommit = off;
  INSERT INTO test VALUES(8888);
  INSERT INTO test VALUES(v_value);

  IF t_error=1 THEN  
        ROLLBACK; -- 事务回滚  
  ELSE  
        COMMIT; -- 事务提交  
  END IF;
END$$

DELIMITER ;

CALL sp_mysqlpub(1);
CALL sp_mysqlpub(11);
CALL sp_mysqlpub(NULL);
CALL sp_mysqlpub('abc'); -- 特殊情况

SHOW WARNINGS;
表:
CREATE TABLE `test` (
  `id` int(10) NOT NULL
) ENGINE=InnoDB;



您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-10 04:31 , Processed in 0.064423 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表