文档章节

每日一剂—mysql事务锁 & git reflog

阿dai学长
 阿dai学长
发布于 07/02 10:27
字数 1081
阅读 34
收藏 2

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

查找mysql事务锁

  • 查看事务和锁的信息

    show engine innodb status;
    
  • explain内容解析

    mysql> explain select * from t where cell="111111111111";
    +----+-------------+-------+-------+---------------+------+---------+-------+------+-------------+
    | id | select_type | table | type  | possible_keys | key  | key_len | ref   | rows | Extra       |
    +----+-------------+-------+-------+---------------+------+---------+-------+------+-------------+
    |  1 | SIMPLE      | t     | const | cell          | cell | 83      | const |    1 | Using index |
    +----+-------------+-------+-------+---------------+------+---------+-------+------+-------------+
    1 row in set (0.00 sec)
    
    
    • select_type:SIMPLE,这是一个简单类型的SQL语句,不含子查询或者UNION。

    • type:index,访问类型,即找到所需数据使用的遍历方式,潜在的方式:

      • ALL(Full Table Scan):全表扫描;
      • index:走索引的全表扫描;
      • range:命中where子句的范围索引扫描;
      • ref/eq_ref:非唯一索引/唯一索引单值扫描;
      • const/system:常量扫描;
      • NULL:不用访问表;

      上述扫描方式,ALL最慢,逐步变快,NULL最快。

    • possible_keys:NULL,可能在哪个索引找到记录。

    • key:PRIMARY,实际使用索引。(画外音:使用PK进行的全表扫描。)

    • ref:NULL,哪些列,或者常量用于查找索引上的值。

    • rows:1,找到所需记录,预估需要读取的行数。

git-reflog

reflog 是一个非常实用的命令,你可以使用这个命令去找回无意间删除的代码,或者去掉一些刚刚添加的却把仓库里的代码弄坏的内容。同时也可以拯救一下失败的 merge,或者仅仅是为了回退到之前的版本。

  • 情景1:我刚刚好像搞错了一个很重要的东西,但是 git 有个神奇的时间机器能帮我复原!

    $ git reflog
    # reflog 可以查看在所有分支上所做的全部改动
    # 每一个改动都会有一个编号 HEAD@(index)
    # 找到问题所在
    
    $ git reset HEAD@(index)
    # git 神奇的时间机器,将代码重置到指定位置
    
  • 情景2:我 commit 完才想起来还有一处小地方要修改!

    # 先做好修改
    $ git add . # or add 相关文件
    $ git commit --amend
    # 然后选择要不要保留或者更高 commit message
    # 现在你的 commit 已经包含最新的修改内容
    

    当我 commit 完然后跑测试的时候,经常突然发现忘了在等于号前面加空格。虽然可以把修改过的代码再重新 commit 一下,然后 rebase -i 将两次揉在一起,不过上面的方法会比较快。

  • 情景3:我要改一下上一个 commit message!

    $ git commit -amend 
    # 然后可以更改 commit message
    

    当你们组对 commit message 有格式要求时,或者当你忘了中英文间要加空格,这个命令能救你狗命。

  • 情景4:我不小心把本应在新分支上的内容commit 到 master 了!

    # 先以现有 master 的状态创建一个新的分支
    $ git branch some-new-branch-name
    # 移除错误的 commit
    $ git reset HEAD~ --head
    
    $ git checkout some-new-branch-name
    # 现在的分支就含有所有你所需要的东西了
    

    注意: 这个指令必须在错误的 commit 后直接执行,如果你已经试了其他的方式,你可能就需要用 git reset HEAD@{number} 来代替 HEAD~ 了。

  • 情景5: 我不小心 commit 到错误的分支上了!

    # 撤回上一次 commit 但是保留改动
    $ git reset HEAD~ --soft
    $ git stash
    
    # 将改动提交到正确的分支
    $ git checkout name-of-the-correct-branch
    $ git stash pop
    $ git add . # or add individual files
    $ git commit -m "提交信息"
    # 现在的你改动已经成功 commit 到正确的分支上了
    

    也有很多人推荐了 cherry-pick 的解决方案,所以选哪个就看你心情了。

    $ git checkout name-of-the-correct-branch
    
    # 将改动从错误的分支上摘取下来放到正确的分支上
    $ git cherry-pick name-of-the-wrong-branch
    
    # 然后再错误的分支上删除相应的改动
    $ git checkout name-of-the-wrong-branch
    $ git reset HEAD~ --hard
    
  • 情景6:我执行了 diff 但是啥也没出现

    $ git diff --staged
    

    Git 不会给通过 add 加入到 staging 区域里面的文件做 diff ,除非你加了 --staged 的标签,别怀疑了这是一个 feature 不是一个 bug,当然对于第一次碰到这个问题的人来说还是有些不好理解的。

    $ git checkout name-of-the-correct-branch
    
    # 将改动从错误的分支上取下来放到正确的分支上
    $ git cherry-pick name-of-the-wrong-branch
    
    # 然后再错误的分支上删除相应的改动
    $ git checkout name-of-the-wrong-branch
    $ git reset HEAD~ --hard
    

© 著作权归作者所有

上一篇: python-字符串处理
下一篇: mtr使用详解
阿dai学长
粉丝 76
博文 263
码字总数 337363
作品 0
朝阳
运维
私信 提问
Git 版本管理

了解开发,拉分支的流程 Git 安装: MySql rpm或二进制发行版 setup MySql 127.0.0.1:3306 用户:gogs Remote fetch/push respository commit index add workspace 版本管理中file lifecycle ......

manbinn
2017/12/15
0
0
MySQL MVCC && 事务隔离级别 && 锁

MySQL MVCC && 事务隔离级别 && 锁 InnoDB多版本并发控制——MVCC http://my.oschina.net/xinxingegeya/blog/208821 MySQLS锁X锁read lockwrite lock http://my.oschina.net/xinxingegeya/bl......

秋风醉了
2014/07/30
600
0
MySQL 在并发场景下的问题及解决思路

原文出处:李平 1、背景 对于数据库系统来说在多用户并发条件下提高并发性的同时又要保证数据的一致性一直是数据库系统追求的目标,既要满足大量并发访问的需求又必须保证在此条件下数据的安...

李平
2018/05/11
0
0
Git修改已提交的commit

1 本地修改 由于以下修改本身是对版本历史的修改,在需要push到远程仓库时,往往是不成功的,只能强行push,这样会出现的一个问题就是,如果你是push到多人协作的远程仓库中,会对其他人的远...

一生只为虞美人
2018/08/07
0
0
深入理解 MySQL ——锁、事务与并发控制

深入理解 MySQL ——锁、事务与并发控制 目录 MySQL 服务器逻辑架构 MySQL 锁 事务 隔离级别 并发控制 与 MVCC MySQL 死锁问题 1、MySQL 服务器逻辑架构 (图片来源MySQL官网) 每个连接都会...

优惠券活动
03/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

交换机switch 的shutdown 与 no shutdown

shutdown是关闭接口(端口),接口状态会变为DOWN,no shutdown是激活接口(端口),状态变为UP,一般在给vlan或者端口配置管理ip或者端口ip后使用。 有时候我们配置某个端口前会需要把端口关闭到...

刘日辉
31分钟前
5
0
AOP底层源码分析

思维导图 AOP AOP: 面向切面编程[底层就是动态代理] 指程序在运行期间动态的将某段代码切入到指定方法位置进行运行的编程方式。 AOP通知方式 前置通知: logStart(),在目标方法(div)运行之前运...

volc1612
44分钟前
5
0
OSChina 周六乱弹 —— 别听他们的,你不胖你只是毛茸茸的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @且无需多言 :分享Rise Against的单曲《Audience Of One (Ghost Note Symphonies)》: 硬核朋克不插电版本,隐藏在喧嚣下的柔情! 《Audienc...

小小编辑
今天
32
2
apache httpClient实现代理发送Post请求

CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope("host", port), new UsernamePasswordCredentials(username, password......

huangkejie
今天
5
0
SpringCloud

单体应用存在的问题 ● 随着业务的发展,开发变得越来越复杂。 ● 修改、新增某个功能,需要对整个系统进行测试,重新部署。 ● 一个模块出现问题,很可能导致整个系统崩溃。 ● 多个开发团队...

Star永恒
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部