我现在需要完成一个脚本用来完成对mysql数据库的操作,用到了事务,但是不知道出错后如何回滚,求指教!
下面是我的脚本中关于事务的部分:#关闭事务自动提交
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "set AUTOCOMMIT=0"
#事务开始
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "start transaction"中间部分是一些数据库的操作,如移表,删除等#提交事务
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "commit"我发现这样的话无论中间的数据库操作怎样事务都会提交,我不知道如何捕捉错误再进行回滚,望指点!
谢谢!

解决方案 »

  1.   

    AUTOCOMMIT=0 这个仅是对当前SESSION的变量进行了设置,并没有改变所有的MYSQL事务设置。而你的每一次 mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME}... 都是一个新的连接(SESSION)
      

  2.   

    解决方案之一,就是把你的所有操作放在一个连接中执行完毕。mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME}  < x.sql在X.sql 中你可以写入语句。set AUTOCOMMIT=0;
    start transaction;
    中间部分是一些数据库的操作,如移表,删除等
    commit;
      

  3.   

    创建一个文本文件 x.sql内容如下 [code=BatchFile]
    set AUTOCOMMIT=0;
    start transaction;
    中间部分是一些数据库的操作,如移表,删除等
    commit;[/code]