rollback与undo 区别
rollback是指事务的回滚,既将数据库的状态恢复到执行事务之前的状态,其中可能会使用UNDO日志进行回滚。
而UNDO是一种记录日志的方式,并不是主要服务于事务回滚,而是主要用于系统从故障中恢复,比如突然断电了,系统要根据UNDO日志对未完成的事务进行处理,保证数据库的状态为执行这些事务前的状态。
什么是事务事务中的提交和回滚是什么意思
意思就是可以让HEAD这个指针指向其他版本。说白了就是通过此命令在版本之间进行穿梭。
它有三种模式,soft,mixed,hard,具体的使用方法下面这张图,展示的很全面了。
这三个模式理解了,对于使用这个命令很有帮助。在理解这三个模式之前,需要略微知道一点Git的基本流程。正如上图,Git会有三个区域:
Working Tree 当前的工作区域
Index/Stage 暂存区域,和git stash命令暂存的地方不一样。使用git add xx,就可以将xx添加近Stage里面
Repository 提交的历史,即使用git commit提交后的结果
首先, Git 必须知道当前版本是哪个版本,在 Git 中,用 HEAD 表示当前版本,上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ ,以此类推,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成 HEAD~100 。
--hard 会在重置 HEAD 和branch的同时,重置缓存区和工作目录里的内容。当你在 reset 后面加了 --hard 参数时,你的缓存区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。换句话说,就是你的没有commit的修改会被全部擦掉。
回退到上一版本:
回退到指定版本号(以1a2b3c为例)的版本:
reset --hard:重置stage区和工作目录:
--soft 则会保留工作目录的内容,并把因为重置 HEAD 所带来的新的文件差异放进暂存区。
什么是「重置 HEAD 所带来的新的差异」?就是这里:
由于 HEAD 从 4 移动到了 3,而且在 reset 的过程中工作目录和暂存区的内容没有被清理掉,所以 4 中的改动在 reset 后就也成了工作目录新增的「工作目录和 HEAD 的差异」。这就是上面一段中所说的「重置 HEAD 所带来的差异」。
这就是--soft 和 --hard 的区别:--hard 会清空工作目录和暂存区的改动,*而 --soft则会保留工作目录的内容,并把因为保留工作目录内容所带来的新的文件差异放进暂存区。
git reset 如果不加参数,那么默认使用 --mixed 参数。此时表示要:保留工作目录,并清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。简而言之,就是「把所有差异都混合(mixed)放在工作目录中」。
首先, Git 必须知道当前版本是哪个版本,在 Git 中,用 HEAD 表示当前版本,上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ ,以此类推,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成 HEAD~100 。
回退到上一版本:
回退到指定版本号(以1a2b3c为例)的版本:
--hard 会清空工作目录和暂存区的改动,
--soft则会保留工作目录的内容,并把因为保留工作目录内容所带来的新的文件差异放进暂存区。
--mixed 参数。git reset 如果不加参数,那么默认使用 --mixed 参数。此时表示要:保留工作目录,并清空暂存区。
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令
git reset --hard commit_id
穿梭前,用 git log 可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本。
1、事务就是指准备要做的或所做的事情,在计算机语言中是指访问并可能更新数据库中各种数据项的一个程序单元,也是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。
2、提交事务:Commit Transaction,成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步
3、事务回滚:End Transaction,失败的结束,将所有的DML(insert、update、delete)语句操作历史记录全部清空。
所谓回滚事务,简单来说就是当一个事务的某一个操作发生问题时,整个事务可以回滚掉,就像没有做任何操作一样,换言之当发生错误或事务被取消,则回滚事务。
当开启事务之后,所有的操作都会被存储在事务日志中,而只有当我们进行提交事务的操作后,才会将我们更新的数据同步到数据表中。
扩展资料
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
和事务相关的语句
开启事务:Start Transaction
事务结束:End Transaction
提交事务:Commit Transaction
回滚事务:Rollback Transaction
参考资料:
MySQL - Commit Transaction鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!