一 MYSQL简介

锁粒度

  • 表级锁:MYSQL中最基本的锁策略,拥有最小的开销,锁定整张表。当客户端对表进行写操作时,将获取写锁,同时阻塞其他的读与写操作;当客户端进行读操作时,将获取读锁,不影响其他的读获取锁。
  • 行级锁:提供最优秀的并发能力,同时花费最大的开销。InnoDB 和 XtraDB 存储引擎实现的是行级锁。

事务

ACID
  • Atomicity(原子性):事务必须作为一个单个的不可分割的工作单元,事务中的操作或者都成功,或者回滚。
  • Consistency(一致性):数据库必须总是从一个一致性状态到下一个一致性状态。
  • Isolation(隔离性):一个事务的结果通常是只有这个事务完成时才对其他事务可见。
  • Durability(持久性):一旦事务被提交,其做的改变必须持久化。
隔离等级
  • READ UNCOMMITTED(未提交读):事务可以看到其他未提交事务的结果,也成为脏读。性能并不比其他隔离级别好很多。
  • READ COMMITTED(提交读):也叫不可重复读。大多数数据库的默认隔离级别(MYSQL不是)。一个事务所做的改变只有提交完才对其他事务可见。
  • REPEATABLE READ(可重复读):保证了同一个事务中读取同一行时,读取两次结果是一致的。可能会出现幻读。
  • SERIALIZABLE(串行化):最高隔离级别。强制事务串行化执行,确保了事物间不互相影响。解决了幻读问题。
隔离等级优缺点
Isolation level Dirty reads possible Nonrepeatable reads possible Phantom reads possible Locking reads
READ UNCOMMITTED YES YES YES NO
READ COMMITTED NO YES YES NO
REPEATABLE READ NO NO YES NO
SERIALIZABLE NO NO NO YES
MVCC(multiversion concurrency control)

工作原理:保存数据在某个时间点的快照。

InnoDB的MVCC实现

在每一行存了两个额外的隐藏值:行的创建事务版本号和行的删除事务版本号。

例:

  • SELECT:InnoDB must examine each row to ensure that it meets two criteria:
    • InnoDB must find a version of the row that is at least as old as the transaction
      (i.e., its version must be less than or equal to the transaction’s version). This
      ensures that either the row existed before the transaction began, or the transaction
      created or altered the row.
    • The row’s deletion version must be undefined or greater than the transaction’s
      version. This ensures that the row wasn’t deleted before the transaction began.
      Rows that pass both tests may be returned as the query’s result.
  • INSERT:
    InnoDB records the current system version number with the new row.
  • DELETE:
    InnoDB records the current system version number as the row’s deletion ID.
  • UPDATE:
    InnoDB writes a new copy of the row, using the system version number for the new
    row’s version. It also writes the system version number as the old row’s deletion
    version.

MYSQL存储引擎

InnoDB
  • 事务
  • 支持表级、行级锁
MYISAM
  • 非事务
  • 只支持表级锁
  • 可对BLOB、TEXT列的前五百个字符进行索引
  • 支持全文索引
Archive
  • 只支持INSERT与SELECT
  • 到MYSQL5.1才支持索引
XtraDB
  • 第三方引擎
  • InnoDB的修改版

改变表的存储引擎

  • ALTER TABLE mytable ENGINE = InnoDB;
    • 最简单的方式
    • 花费时间长:MYSQL会一行一行的拷数据到一个新表中
    • 可能会占满磁盘的I/O
    • 在转换过程中,原始表会被读锁定,阻塞对标数据的读取
  • Dump and import
    • 使用mysqldump先备份表
    • 编辑dump文件,修改表名字和引擎类型
    • mysqldump默认在CREATE TABLE前会写一个DROP TABLE语句,所以执行前要小心
  • CREATE and SELECT
    • 前两种方式的中和
    • 创建新表,并使用INSERT ... SELECT向新表中填充数据,适合数据不是很多时
    mysql> CREATE TABLE innodb_table LIKE myisam_table;
    mysql> ALTER TABLE innodb_table ENGINE=InnoDB;
    mysql> INSERT INTO innodb_table SELECT * FROM myisam_table;
    
    • 当数据较多时,使用增量插入更好一些
    mysql> START TRANSACTION;
    mysql> INSERT INTO innodb_table SELECT * FROM myisam_table WHERE id BETWEEN x AND y;
    mysql> COMMIT;
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容