为什么TRANSACTION没用啊?

zuing 2005-09-21 10:28:52
表的类型设置成:InnoDB了
start transaction;
delete from table where id=1;
insert table (id,name) values(,,);
rollback
如果第二句错误的话,我以为第一句也不会被执行,但是第一句执行成功了,为什么啊?
...全文
607 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuing 2005-09-22
  • 打赏
  • 举报
回复
解决!
rardge 2005-09-21
  • 打赏
  • 举报
回复
1.说一下你的 MySQL 版本,START TRANSACTION 是 4.0.11 版本以后才有的,之前可以用 BEGIN 。
2.你用 show table status\G 看看表的属性,是否真的已经是InnoDB了。
3.你的理解有误,第一句sql语句是否会对数据表产生实际效果,是靠那句 rollback 或者 commit 的,而不是因为第二句的语法错误。你可以做以下试验:
select * from table_name;
start transaction; //或者 begin;
select * from table_name;
delete from table_name where id = 1;
select * from table_name; //相关数据被删除了;
insert table_name (id,name) values(,,); //mysql 报错
select * from table_name; //应该和上面那个 select 的结果一样;
rollback;
select * from table_name; //恢复到最早那个 select 的状态;
rardge 2005-09-21
  • 打赏
  • 举报
回复
所以我请你先确认你的表是否已经是innodb类型了,如果不是这个表类型,就会发生你说的情况,事务根本不起作用。
还有,你是直接用mysql客户端登录到MySQL服务器后来操作的,还是把这些语句放在脚本中提交执行的?如果是在脚本中,会否是那个错误行使脚本终止,rollback也就执行不到了。不过这个我没测试。
如果以上几点都没有问题,那我就不知道了,呵呵。上面那个例子在我的机器上全部测试通过的。
zuing 2005-09-21
  • 打赏
  • 举报
回复
对,是我的表述有问题,但是,我已经执行了rollback,第一条DELETE已经生效了,我就搞不懂了!
tmdbcd0630 2005-09-21
  • 打赏
  • 举报
回复
路过,学习了。谢谢。

57,062

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧