个人简介

Echo Blog


江湖无名 安心练剑
  • mysql-15-mysql undo log、redo log、binlog 有什么用? 组提交 group commit mysql 主从复制如何实现的?
    MySQL 日志:undo log、redo log、binlog 有什么用? 语句的执行 那么,执行一条 update 语句,期间发生了什么?比如这一条 update 语句: UPDATE t_user SET name = 'xiaolin' WHERE id = 1; 查询语句的那一套流程,更新语句也是同样会走一遍: 客户端先通过连接器建立连接,连接器自会判断用户身份; ...
    2020-10-17 08:15:55 | Database
  • mysql-14-mysql 死锁 deadlock
    MySQL 死锁了,怎么办? 有个业务主要逻辑就是新增订单、修改订单、查询订单等操作。然后因为订单是不能重复的,所以当时在新增订单的时候做了幂等性校验,做法就是在新增订单记录之前,先通过 select … for update 语句查询订单是否存在,如果不存在才插入订单记录。 而正是因为这样的操作,当业务量很大的时候,就可能会出现死锁。 接下来跟大家聊下为什么会发生死锁,以及怎么避免死...
    2020-10-17 08:15:55 | Database
  • mysql-13-mysql 锁 lock
    MySQL 有哪些锁? 这次,来说说 MySQL 的锁,主要是 Q&A 的形式,看起来会比较轻松。 在 MySQL 里,根据加锁的范围,可以分为全局锁、表级锁和行锁三类。 全局锁 全局锁是怎么用的? 要使用全局锁,则要执行这条命令: flush tables with read lock 执行后,整个数据库就处于只读状态了,这时其他线程执行以下操作,都会被阻塞: ...
    2020-10-17 08:15:55 | Database
  • mysql-12-mysql 的一条数据是如何保存的?
    前言 如果你知道 MySQL 一行记录的存储结构,那么这个问题对你没什么难度。 如果你不知道也没关系,这次我跟大家聊聊 MySQL 一行记录是怎么存储的? 知道了这个之后,除了能应解锁前面这道面试题,你还会解锁这些面试题: MySQL 的 NULL 值会占用空间吗? MySQL 怎么知道 varchar(n) 实际占用数据的大小? varchar(n) 中 n 最大取值为多少? ...
    2020-10-17 08:15:55 | Database
  • mysql-11-执行一条 select 语句,期间发生了什么?
    前沿 学习 SQL 的时候,大家肯定第一个先学到的就是 select 查询语句了,比如下面这句查询语句: // 在 product 表中,查询 id = 1 的记录 select * from product where id = 1; 但是有没有想过,MySQL 执行一条 select 查询语句,在 MySQL 中期间发生了什么? 带着这个问题,我们可以很好的了解 MySQL 内...
    2020-10-17 08:15:55 | Database
  • mysql-10-MySQL查询数据表的Auto_Increment(自增id)
    场景 有时候我们希望获取当前表的最大自增主键信息。 获取方式 方式 1 一般数据表的id都是设置成auto_increment的,所以当插入一条记录后,可以使用下面的命令来获取最新插入记录的id值 select last_insert_id(); 注意: 必须是在使用 insert 语句后,紧接着使用select last_insert_id()才有效,在没有...
    2020-10-17 08:15:55 | Database
  • mysql(9)transaction 事务2
    事务 转账中,要么全部成功,要么全部失败。 要解决这个问题,就要保证转账业务里的所有数据库的操作是不可分割的,要么全部执行成功 ,要么全部失败,不允许出现中间状态的数据。 数据库中的「事务(Transaction)」就能达到这样的效果。 我们在转账操作前先开启事务,等所有数据库操作执行完成后,才提交事务,对于已经提交的事务来说,该事务对数据库所做的修改将永久生效,如果中途发生发生中断...
    2020-10-17 08:15:55 | Database
  • mysql(9)transaction 事务2
    7.3事务控制语句 在MySQL命令行的默认设置下, 事务都是自动提交(autocommit) 的, 即执行SQL语句后就会马上执行COMMIT操作。 因此要显式地开启一个事务需使用命令BEGIN、START TRANSACTION, 或者执行命令SET AUTOCOMMIT=0, 禁用当前会话的自动提交。 每个数据库厂商自动提交的设置都不相同, 每个DBA或开发人员需要非常明白这一点...
    2020-10-17 08:15:55 | Database