`
gengu
  • 浏览: 86557 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

mysql存储引擎MyISAM的并发插入

阅读更多

都知道MySQL数据库是一个具有多种存储引擎的数据库,最常用的有MyISAM和InnoDB,两种存储引擎。

 

InnoDB支持外键,支持事务安全,数据多版本读取,锁定机制的改进等诸多优点,这里就不多说了。

 

那么MyISAM,是一个sun公司自己开发的存储引擎,只支持表级锁定。

 

我做了这样一个测试,使用root登录然后创建一个数据库test1

mysql> create database test1;
Query OK, 1 row affected (0.00 sec)

 创建一张表book

mysql> create table book(id int primary key,
    -> name varchar(20));
Query OK, 0 rows affected (0.00 sec)

 创建一个用户user1,具有数据库test1上所有表的权限

mysql> grant create,update,delete,create,insert on test1.* to 'user2'@'localhost' identified by '0312';
Query OK, 0 rows affected (0.00 sec)

 然后在另外打开一个终端,使用user2登录


在root这里我给表book添加一个读锁

mysql> lock table book read local;
Query OK, 0 rows affected (0.00 sec)

 再在user2端操作,然后我发现很奇怪的一件事,我能够对表book进行插入,但是却没有办法对他进行更新。

 

 插入操作

mysql> insert into book values(1,'gengu');
Query OK, 1 row affected (0.00 sec)

 更新操作

mysql> update book set name = 'gengu_update' where id = 1;


 然后就一直被阻塞掉

 

 

当对它update的时候它总是会被阻塞掉,当时的我百思不得其解,怎么会这样呢?按道理说root把增长表都锁定了,为什么可以插入呢?又为什么不能更新呢?

 

然后翻了很多文章终于弄清楚了原因,原来是MyISAM这个引擎还有一个非常有用的特性那就是Concurrent Insert(并发插入)的特性。

 

当一个session给一张表设置了read local,就表明给了它一个之允许在当前session读取的权利,但是却没有删除,插入和更新的权利。

比如下面的root操作

mysql> update book set name = 'gengu2' where id = 1;
ERROR 1099 (HY000): Table 'book' was locked with a READ lock and can't be updated
mysql> insert into book values(3,'gengu3');
ERROR 1099 (HY000): Table 'book' was locked with a READ lock and can't be updated
mysql> delete from book where id = 3;
ERROR 1099 (HY000): Table 'book' was locked with a READ lock and can't be updated
mysql> 

 

其他的session虽然也不能进行删除和更新操作但是却能进行并发插入操作

 

具体的Concurrent Insert有三个参数可以配置分别是0,1,2在其他的博文中有很多的描述,这里就不多说了。

 

分享到:
评论

相关推荐

    MySQL存储引擎简介

    MySQL存储引擎是数据库管理系统中负责数据存储和索引管理的核心组件,它允许MySQL数据库系统在不同的存储需求下灵活选择最优的存储方案。在众多数据库系统中,MySQL独树一帜,提供了多种存储引擎供用户选择,使得...

    mysql的myisam解决并发读写解决方法

    在MySQL数据库系统中,MyISAM是一种非常常用的存储引擎。它以其高效性和简单的结构而在许多场景下得到广泛应用,尤其是在那些读取操作远多于写入操作的应用场景中。然而,当面对高并发的读写操作时,MyISAM的表现...

    MySQL存储引擎学习

    MySQL存储引擎学习 MySQL存储引擎是MySQL数据库管理系统的核心组件之一,负责数据的存储和提取。 MySQL的存储引擎架构可以分为四个层次:连接层、服务层、引擎层和存储层。其中,引擎层是存储引擎的真正实现者,...

    MySQL存储引擎MyISAM与InnoDB区别总结整理

    MySQL存储引擎是数据库管理的核心部分,它决定了数据的存储方式、锁定机制以及事务处理能力。在MySQL中,MyISAM和InnoDB是最常见的两种存储引擎,它们各自有独特的特性和适用场景。 首先,我们来看一下MySQL默认...

    第6章MySQL存储引擎与数据库.docx

    MySQL存储引擎是数据库管理系统的核心组件,它决定了数据如何在MySQL中存储、检索和管理。不同的存储引擎具有不同的特性和用途,以适应各种应用场景。在MySQL中,存储引擎主要负责数据的物理存储方式、事务处理、...

    8.MySQL存储引擎--MyISAM与InnoDB区别1

    MySQL存储引擎--MyISAM与InnoDB区别 MySQL是一种关系型数据库管理系统,它支持多种存储引擎,每种存储引擎都有其特点和优缺。MyISAM和InnoDB是MySQL中最常用的两种存储引擎,它们都有其优缺点,本文将对比MyISAM...

    MySQL存储引擎解析.doc

    MySQL存储引擎是数据库管理系统的核心组成部分,负责数据的存储和访问方式。MySQL系统由多个组件构成,包括管理工具、连接池、SQL接口、分析器、优化器、缓存、存储引擎和硬盘。其中,存储引擎是专门处理表数据的...

    mysql存储引擎比较

    ### MySQL存储引擎比较 #### 一、概述 MySQL是一款广泛使用的开源关系型数据库管理系统,在不同的应用场景下,选择合适的存储引擎至关重要。MySQL支持多种存储引擎,每种存储引擎都有其独特的特性和适用场景。本文...

    MySQL课程之MySQL存储引擎入门

    MySQL提供了多种存储引擎,包括MyISAM、InnoDB、BDB、Memory、Merge、Archive、Federated、BLACKHOLE、Cluster/NDB、CSV和Example等。其中,InnoDB、NDB和BDB支持事务处理,提供了一定的数据一致性保障,而其他引擎...

    MyISAM引擎与InnoDB引擎性能的对比

    MySQL数据库系统提供了多种存储引擎,其中最常用的两种是MyISAM和InnoDB。它们各自具有独特的特性和适用场景,理解二者的性能差异对于优化数据库设计至关重要。 MyISAM引擎是MySQL早期的默认存储引擎,以其高速度和...

    MySql教程-数据库存储引擎.pdf

    InnoDB存储引擎特别适合处理多重并发的更新请求、事务处理和自动灾难恢复等场景。在MySQL 5.7版本中,InnoDB存储引擎成为默认的存储引擎。InnoDB存储引擎的优点包括: * 支持事务处理 * 行级锁定 * 外键约束 * 自动...

    mysql插件式存储引擎体系结构

    接下来,我们将详细介绍几种常用的MySQL存储引擎: - **MyISAM**:这是MySQL的默认存储引擎之一,适用于Web应用和数据仓库环境。MyISAM不支持事务处理,但它提供了较快的读写速度,非常适合于读多写少的应用场景。 ...

    浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析

    MySQL存储引擎的选择是一个重要的决策,因为它直接影响到数据库的性能、可靠性和功能。本文主要讨论了两种最常用的存储引擎——InnoDB和MyISAM,并分析了它们的优缺点。 首先,MyISAM是MySQL的默认存储引擎,适用于...

    mysql 存储引擎和表类型

    1. **MyISAM**:MyISAM是MySQL的默认存储引擎,适用于读取频繁的场景。它提供了高速的存储和检索,并支持全文搜索。MyISAM表的数据文件和索引文件是分开存储的,不支持事务处理,因此在并发写入和数据完整性方面相对...

    MySQL2:四种MySQL存储引擎.doc

    - MyISAM是早期MySQL广泛使用的存储引擎,适用于读取密集型应用,插入和查询速度较快,但不支持事务处理。 - 它支持大文件,最大文件长度取决于操作系统和文件系统的支持。 - MyISAM在删除和插入操作混合时,能...

    MySQL存储引擎及其面向的数据库应用[收集].pdf

    MySQL存储引擎是数据库管理系统的核心组成部分,它决定了数据的存储方式、事务处理机制、索引类型以及其他关键特性。MySQL提供多种存储引擎,每种引擎针对不同的数据库应用场景进行了优化。以下是几种常见的MySQL...

    MySQL数据库存储引擎探析.docx

    本文将深入探讨 MySQL 数据库中常用的存储引擎,包括 InnoDB、MyISAM、Memory(HEAP)和 Archive 等。 一、InnoDB 存储引擎 InnoDB 是 MySQL 的默认存储引擎,它提供了强大的事务处理、行级锁定和外键约束功能。...

    MySQL存储引擎中的MyISAM和InnoDB区别详解

    MySQL存储引擎中的MyISAM和InnoDB是两种最常见的选择,它们各自有独特的特性和适用场景。以下是关于这两种存储引擎的详细对比: 1. **存储结构**: - MyISAM:每个表由三个文件组成,分别是`.frm`(表定义)、`....

    mysql数据存储引擎介绍ppt

    在“mysql数据存储引擎介绍ppt”中,我们将会深入探讨MySQL的体系结构以及各种存储引擎,特别是InnoDB存储引擎。 首先,MySQL体系结构是理解其工作原理的关键。MySQL通常由服务器层、客户端库、网络接口和存储引擎...

    MySql的存储引擎.doc

    它的核心特性之一就是插入式的多存储引擎机制,这使得MySQL能够根据不同的应用场景选择最适合的存储方式。 存储引擎是数据库管理系统中负责数据存储、索引创建、数据更新和查询等操作的具体实现方式。MySQL支持多种...

Global site tag (gtag.js) - Google Analytics