Discuss / SQL / 事务出错没有回滚

事务出错没有回滚

Topic source

Angular2club

#1 Created at ... [Delete] [Delete and Lock User]
begin;
update blogs set title='Test Title' where id=3;
update blogs set author_id=3 where id=3;
commit;

第二条语句我故意让它错了,因为author_id 没有等于3的,但是发现title还是被修改了,请大佬帮忙看看为啥

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

出错是指SQL执行出错,不是你的业务出错

你写set author_id=-3照样成功

Angular2club

#3 Created at ... [Delete] [Delete and Lock User]

但是我这里是设置了外键的,author_id是属于外键,如果外键不存在,sql执行会出错的

正在运转

#4 Created at ... [Delete] [Delete and Lock User]

你会不会用的是MySql然后用的MyISAM引擎

廖雪峰

#5 Created at ... [Delete] [Delete and Lock User]

有没有设置外键你用SHOW CREATE TABLE xxx看看

廖老师,您说的sql执行出错跟业务出错到底有什么区别,能举个栗子嘛

廖雪峰

#7 Created at ... [Delete] [Delete and Lock User]

SQL出错:

select nama from person; -- <-- name拼写错了导致SQL出错

业务出错:

update accounts set balance = balance + 100; -- <-- 付款应该扣钱写成加钱了,SQL不会出错

闲来舞剑

#8 Created at ... [Delete] [Delete and Lock User]

老师,那不写begin commit  不也一样报错吗? 那写这个的意义呢


  • 1

Reply