1、对数据库做了ddl的 *** 作,但是没有进行提交 *** 作,此时就会提示受影响行数,如果最后没有进行提交 *** 作,数据就会回滚。
2、对数据进行 *** 作时,如果数据报错,如批量插入数据,其中有一条无法插入,那么此次的 *** 作就会被视为无效,数据库就会回滚,以保证数据的完整性。
3、在程序开发时,是以事务为原子性 *** 作的,此时可能因为一个业务 *** 作会对数据库的多个表进行增删改,如果中间出现问题,那么对已 *** 作部分的数据怎么办呢?
数据库的回滚就可以解决。
你每个命令带一个事务,其实跟没有事务是一样的,不成功是没有回滚的。START TRANSACTION
INSERT INTO `guwitest`.`cdn` (`id`, `operatorId`, `type`, `distributionTarget`, `distributionName`, `distributionDomain`, `status`) VALUES ('1', '1', 'cloudfront', 'metadata', '1', '1', '0')
create table guwitest.aa(id int(10) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id))
ROLLBACK
数据库中的undo、rollback,既撤消和回滚。首先这2个 *** 作是针对事务来说的,事务的概念请楼主自行百度。举一个简单的例子,A给B转账,在数据库中就需要给A,B进行update *** 作。这2条sql语句必须都执行或者都不执行(称为一个事务)。假如先执行B的update语句,B的金额增加了100,然后执行A的update语句,A的金额减100。如果A的余额大于100,那么2个语句没问题,但是A的余额小于100时,再减100就变成负的了,这不符合实际情况。所以第二条sql就出现无法执行,那么数据库的状态必须回到没有执行B的update语句之前。
当一个事务执行的时候,数据库会依次执行中间的sql语句,当某一条sql发生错误以后,根据事务的原子性,通过2种方式使数据库回到事务没有执行的状态。撤销就是相当于不执行commit;回滚就是执行一遍相反的 *** 作,比如再执行B的update金额减100。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)