您的位置:首页 > 数据库 > MySQL

mysql-事务(续)

2015-12-30 22:14 471 查看
昨天的一更是介绍了如何使用mysql的事务,而因为昨天的时间问题,mysql的事务的一直并未实现。

今天花了些时间找到了问题的所在。网上的资料一再说明了,只有mysql的innodb的表引擎才支持事务。我也一直认为我建的表是innodb的表引擎,因为自己的写的sql的脚本文件中已经明确指定了表的引擎为innodb,所以一时并没有怀疑是这个问题导致,在认真查看了mysql的配置(my.conf)并没有异常。无奈之下,还是先确认下表的引擎是否真的是innodb。在mysql的命令行下利用下面的命令。

show table status from DB_name where name = ‘table_naem’

结果让我感叹,人还是不要太过自信的好,显示的结果表明了创建的表的引擎是MyISAM(汗。。。),原来,创建该数据库的sql脚本文件并不是我编写的那个,而是很早之前导出转存的一份sql脚本。在确定了的确是这个问题,用下面命令修改了表的存储引擎。

alter table table_name engine=innodb

再次执行一次事务的操作,发现这次rollback以及commit成功了。到目前为止,无法实现mysql的事务的问题也得到了解决。下面贴上我的大概的一个代码片段。基于mysqlclient的库头文件的实现。

int mysqlTransaction(mysql *dbConnection)
{
int iRet = 0;

/* 开始一次事务 */
iRet = mysqli_query(dbConnection, "begin");
if (!iRet )
{
return -1;
}
/* 开始执行一条命令 */
iRet = mysqli_query(dbConnection, "delete from tbl_name where id = '1'");
if (!iRet )
{
return -1;
}
/* 回滚上一次操作 */
iRet = mysqli_rollback(dbConnection);
if (!iRet )
{
return -1;
}

return 0;
}


上面的代码只是一个demo片段,省略了不少内容,并不能真正的使用。查看数据库发现如果该条数据没有删除,并且程序没有报错,那么我们的mysql的事务操作便实现了。

其实mysql我并不了解,只是通过以后的多多学习,毕竟数据库的知识还是要掌握的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 事务