关于 MySQL 中 InnoDB 事务锁的一些理解

InnoDB 行锁

参考 MySQL · 引擎特性 · InnoDB 事务锁系统简介
Locks Set by Different SQL Statements in InnoDB

区间锁(LOCK_GAP)

锁住一段范围,不锁记录本身,通常表示两个索引记录之间,或者索引上的第一条记录之前,或者最后一条记录之后的锁。一般在 RR 隔离级别下会使用。

Next-Key 锁(LOCK_ORDINARY)

其实就是锁住 待插入记录本身 + 记录之前的 GAP,Next-Key 锁用于解决 RR 隔离级别下的幻读问题。

通常对于 UPDATE 或 DELETE 或 SELECT … FOR UPDATE 或 SELECT … IN SHARE MODE 操作:

  • 查询条件为唯一索引且是唯一等值查询时,只对记录本身加锁
  • 非唯一条件查询,或者查询会扫描到多条记录,加 Next-Key 锁
Read more   2017/6/8 posted in  理论概念

MySQL、SQL Server 和 Oracle 触发器的创建

场景:当 users 表在 insert,update,delete 时,在 users_log 表中记录变更的 id

MySQL

触发时机:BEFORE,AFTER
触发事件:INSERT,UPDATE,DELETE
NEW 和 OLD 关键字:

| action | NEW | OLD |
|--------|----------------|----------------|
| insert | 插入的新数据 | 无 |
| update | 修改为的新数据 | 被修改的原数据 |
| delete | 无 | 被删除的原数据 |

DELIMITER $
CREATE TRIGGER insert_user AFTER INSERT
ON users FOR EACH ROW 
BEGIN
    INSERT INTO users_log(user_id, action) VALUES(NEW.id, 'insert');
END$
DELIMITER ;
Read more   2016/6/11 posted in  理论概念

关于 MySQL 中 InnoDB 的 MVCC 的一些理解

Read more   2016/4/17 posted in  理论概念

正则表达式

元字符

  • '.' 匹配除换行符以外的任意字符
  • '\w' 匹配字母、数字、下划线、汉字
  • '\W' 匹配任意不是字母,数字,下划线,汉字的字符
  • '\s' 匹配任意的空白符,包括空格、制表符(Tab)、换行符
  • '\S' 匹配任意不是空白符的字符
  • '\d' 匹配一个数字
  • '\D' 匹配任意非数字的字符
  • '\b' 匹配单词的开始或结束
  • '\B' 匹配不是单词开头或结束的位置
  • [abcde] 匹配 'abcde' 中任意一个字符
  • [aeiou] 匹配除 ’aeiou‘ 以外的任意字符
  • '' 匹配行首
  • '$' 匹配行尾
  • '\A' 匹配字符串开头
  • '\z' 匹配字符串结尾
  • '\Z' 匹配字符串结尾,如果字符串已 '\n' 结尾,不匹配最后的 '\n'
Read more   2015/9/18 posted in  理论概念

Crontab 定时任务

表达式

field         allowed values
-----         --------------
second        0-59
minute        0-59
hour          0-23
day of month  1-31
month         1-12 或 JAN-DEC 
day of week   1-7 或 MON-SUN
year          1970-2099
Read more   2015/7/11 posted in  理论概念