学习问题:一次记录了多个保留点,但是出错多的话,要怎样才能在同一事务中同时解决呢。 浅尝辄止哈哈
事务命令
-- start transaction 开启事务 -- Rollback 回滚事务,即撤销指定的sql语句(只能回退insert delete update语句),回滚到上一次commit的位置 -- Commit 提交事务,提交未存储的事务 -- -- savepoint 保留点 ,事务处理中设置的临时占位符 你可以对它发布回退(与整个事务回退不同)
create table test2(id int PRIMARY KEY auto_increment,name VARCHAR(20)) engine=innodb;
创test2表格>>设置主键>>字符类型为varchar类型>>数据库引擎使用innodb引擎(可事务)。
INSERT INTO test2(name) VALUE ("alvin"),
("yuan"),
("xialv");
start transaction;
insert into test2 (name)values('silv');
select * from test2;
commit;
插入数据>>start transaction为开始事务命令>>插入新数据>>commit为提交未存储事务
start transaction;
insert into test2 (name)values('wu');
savepoint insert_wu;
select * from test2;
delete from test2 where id=4;
savepoint delete1;
select * from test2;
开始事务>>插入数据>>savepoint insert_wu 为保留点>>delete1同上
rollback to delete1;
回滚事务,好了之后select 再查看下
注意事项:回滚后,事务会自动被退出。所以之后再rollback to delete2 等会提示失败。
百度:
事务
1> 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
<2> 一致性(Consistency):事务前后数据的完整性必须保持一致。在事务执行之前数据库是符合数据完整性约束的,无论事务是否执行成功,事务结束后的数据库中的数据也应该是符合完整性约束的。在某一时间点,如果数据库中的所有记录都能保证满足当前数据库中的所有约束,则可以说当前的数据库是符合数据完整性约束的。
比如删部门表前应该删掉关联员工(已经建立外键),如果数据库服务器发生错误,有一个员工没删掉,那么此时员工的部门表已经删除,那么就不符合完整性约束了,所以这样的数据库也就性能太差啦!
<3>隔离性(Isolation):事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
<4>持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。