我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL 5.7 MyISAM并发插入特性是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL 5.7 MyISAM并发插入特性是什么

MySQL 5.7 MyISAM并发插入特性是什么 ,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

MyISAM存储引擎支持并发插入来减少表读写之间的竞争。如果一张MyISAM表的数据文件没有洞(在表的中间有删除行),在SELECT语句从表中读取行的同时,一条插入语句在执行的时候可以将新插入的行增加到表的最后。如果有多个INSERT语句,它们会排成队列并依次执行。并发插入的结果可能不会立刻可见。
 系统参数concurrent_insert可以用来更改并发插入的处理。默认,这个参数的值是AUTO(或1),并发插入是开启的;当这个参数设为NEVER (或0)时,并发插入是关闭的。当这个参数为ALWAYS (或 2)时,即使表中有删除的行,并发插入也允许在表的后端执行。如果MySQL使用了二进制日志,并发插入会被转化成普通的插入语句,例如CREATE...SELECT或INSERT ... SELECT语句。这样做是为了保证可以通过应用日志来重建表中的准确数据。另外,对于那些加了只读锁的表,并发插入动作会被阻塞,需要等待。
 
使用LOAD DATA INFILE语句,如果对一张满足并发插入条件的MyISAM表指定了CONCURRENT选项(这张表的终极没有空闲的数据块),当LOAD DATA语句执行时,其他会话可以从这张表中查询数据。使用CONCURRENT选项会对LOAD DATA的性能有少许影响,即使是在其他会话没有使用这张表的情况下。如果指定了HIGH_PRIORITY选项,当MySQL服务以--low-priority-updates参数启动时,它会覆盖--low-priority-updates参数。它同时也会导致并发插入不会被使用。

mysql> show variables like '%low%priority%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| low_priority_updates | OFF   |
+----------------------+-------+
1 row in set (0.00 sec)

如果这个参数的值设为1,所有的INSERT、UPDATE、DELETE和LOCK TABLE WRITE语句都会等待,直到在指定的MyISAM表上没有悬挂的SELECT或LOCK TABLE READ语句。
这个参数只对使用表级锁的存储引擎生效(例如MyISAM、MEMORY和MERGE)。

对于LOCK TABLE语句,READ LOCAL和READ语句的区别是,当加锁的时候,READ LOCAL允许插入语句和并发插入语句的执行。
mysql> show variables like '%concurrent%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| concurrent_insert | AUTO  |
+-------------------+-------+
1 row in set (0.00 sec)
 
concurrent_insert
 
 这个参数的默认值是AUTO,MySQL会允许并发插入,如果MyISAM表中间没有被删除的行,会在表尾插入数据。如果启动mysqld带有--skip-new参数,这个参数的是会被设为NEVER。
 
 NEVER (或 0)    关闭并发插入
 AUTO (或 1)    允许并发插入,如果MyISAM表中间没有被删除的行,会在表尾插入数据
 ALWAYS (或 2)    允许并发插入,无论MyISAM表中间没有被删除的行,都会在表尾插入数据
 
 mysql> show variables like 'concurrent%';
 +-------------------+-------+
 | Variable_name     | Value |
 +-------------------+-------+
 | concurrent_insert | AUTO  |
 +-------------------+-------+
 1 row in set (0.00 sec)
 
 会话①
 mysql> lock table test read local;
 Query OK, 0 rows affected (0.00 sec)
 
 同一会话内的插入或更新操作会失败
 mysql> insert into test values(90, 'Jimmy');
 ERROR 1099 (HY000): Table 'test' was locked with a READ lock and can't be updated
 mysql> update test set name='Trinity' where id=80;
 ERROR 1099 (HY000): Table 'test' was locked with a READ lock and can't be updated
 
 会话②
 允许插入操作
 mysql> insert into test values(90, 'Jimmy');
 Query OK, 1 row affected (0.00 sec)
 
 会话①
 查询会话②的新插入行,会查询到空集
 mysql> select * from test where id=90;
 Empty set (0.00 sec)

mysql> show variables like '%isolation%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)

 mysql> unlock tables;
 Query OK, 0 rows affected (0.00 sec)
 
 会话②
 更新操作会等待
 mysql> update test set name='Trinity' where id=80;
 Query OK, 1 row affected (1 min 10.11 sec)
 
 直到会话①执行unlock tables语句,会话②才会结束等待
 Rows matched: 1  Changed: 1  Warnings: 0
 
 会话①
 执行unlock tables语句后,可以成功查询到会话②中新插入的数据
 mysql> select * from test where id=90;
 +------+-------+
 | id   | name  |
 +------+-------+
 |   90 | Jimmy |
 +------+-------+
 1 row in set (0.00 sec)

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL 5.7 MyISAM并发插入特性是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql中MyISAM存储引擎的特性是什么

这篇文章将为大家详细讲解有关mysql中MyISAM存储引擎的特性是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、加锁和并发将整个表加锁到特定行上。对已读的表在读时加共享锁,在写时加排它锁。支持并
2023-06-15

编程热搜

目录