insert的阻塞确实不常见,今天碰到了一个,看书又了解一个,整理下。

1、多个会话同时向unique字段插入相同的值

session1:

首先建测试表test,并在字段id上创建一个主键索引(唯一键也可以)。

SQL> create table test(id number,name char(1));

Table created.

SQL> insert into test values(1,'a');

1 row created.

SQL> rollback;

Rollback complete.

SQL> alter table test add constraint pk_test_id primary key(id);

Table altered.

SQL> insert into test values(1,'a');

1 row created.

SQL>

session2:

SQL> insert into test values(1,'b');

session2的insert被阻塞。

如果应用确实需要生成主键或唯一键,可以采用序列生成。

2、主外键关系的表可能会相互阻塞

将1中创建的test表作为父表,再创建一个子表,如test_sun。

session1:

SQL> create table test_sun(id number,name char(1));

Table created.

SQL> alter table test_sun add constraint fk_test_sun_id foreign key(id) references test(id);

Table altered.

SQL> delete from test where id=1;

1 row deleted.

SQL>

session2:

SQL> insert into test_sun values(1,'c');

session2 被阻塞。

测试发现,当在一个会话中对子表插入一行(2,'d'),也会阻塞对父表delete from test where id=1;

查锁等待为:

SQL> select event,blocking_session,row_wait_obj#,sid,serial# from v$session where username=user and status='ACTIVE';

EVENT BLOCKING_SESSION ROW_WAIT_OBJ# SID SERIAL#

---------------------------------------------------------------- ---------------- ------------- ---------- ----------

enq: TM - contention 38 13892 1 29

SQL> select object_id,object_name from dba_objects where object_id=13892;

OBJECT_ID OBJECT_NAME

---------- --------------------------------------------------------------------------------------------------------------------------------

13892 TEST_SUN

SQL> select * from dba_waiters;

WAITING_SESSION HOLDING_SESSION LOCK_TYPE MODE_HELD MODE_REQUESTED LOCK_ID1 LOCK_ID2

--------------- --------------- -------------------------- ------------------------------- ---------------------------------------- ---------- ----------

1 38 DML Row-X (SX) Share 13892 0

可以看到,父表正被子表test_sun阻塞,子表加的是一个行锁。

但是因为有主外键关系,主表必须保证子表的值都在主表里,所以必须能确定子表的值后才能做出回应,否则就处于等待状态了。

经测试发现:

因为主外表关系,导致主表必须保证子表的值都是主表里。当删除数据时,如果保证不报错,必须先删除子表数据再删除主表数据,插入数据时,必须先插入主表再插入子表。

1、删除时,先删除子表不提交或回滚,然后删除主表,会发现删除主表的会话处于等待。

2、插入时,先插入主表不提交或回滚,然后插入子表,会发现插入子表的会话处于等待。

mysql insert 阻塞_insert遭遇阻塞相关推荐

  1. mysql insert 主键冲突_insert 时防止出现主键冲突错误的方法

    最近几天,产品上线比较多,从内网测试库导出表的部分内容到线上也就比平时频繁多了,这时候可能会出现主键冲突: Error Code : 1062 Duplicate entry '1' for key ...

  2. mysql insert into select大量数据插入比较慢_史上最全MySQL锁机制

    本文主要记录学习MyISAM 和 InnoDB 这两个存储引擎. 为什么要学习锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制. 因为数据也是一种供许多用户共享的资源,如何保证数据并发访问的 ...

  3. 那些年让你迷惑的阻塞、非阻塞、异步、同步

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 在IT圈混饭吃,不管你用什么编程语言.从事前端还是后端,阻塞.非阻塞.异步.同步这些概念,都需要清 ...

  4. 32 | 答疑(四):阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系

    问题 1:阻塞.非阻塞 I/O 与同步.异步 I/O 的区别和联系 在文件系统的工作原理篇中,介绍了阻塞.非阻塞 I/O 以及同步.异步 I/O 的含义,这里我们再简单回顾一下. 首先我们来看阻塞和非 ...

  5. java 多线程阻塞队列 与 阻塞方法与和非阻塞方法

    Queue是什么 队列,是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的.无论使用哪种排序方式,队列的头都是调用remove()或poll()移 ...

  6. socket阻塞与非阻塞,同步与异步

    转自:http://blog.csdn.net/hguisu/article/details/7453390 socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网 ...

  7. 阻塞与非阻塞、同步与异步、I/O模型

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端:  同步: 所谓同步,就是在c端 ...

  8. 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一文搞定

    关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 ​阻塞IO情况下, ...

  9. linux 查看进程阻塞,linux进程 阻塞和非阻塞操作

    在我们看全功能的 read 和 write 方法的实现之前, 我们触及的最后一点是决定何时使 进程睡眠. 有时实现正确的 unix 语义要求一个操作不阻塞, 即便它不能完全地进行下去. 有时还有调用进 ...

最新文章

  1. 初探swift语言的学习笔记五(线程)
  2. 小米面试题:合并二叉树
  3. 成功解决but is 0 and 2 (computed from start 0 and end 9223372 over shape with rank 2 and stride-1)
  4. 在Python中将字符串拆分为字符数组
  5. beautifulsoup网页爬虫解析_爬虫第三天——初识Xpath
  6. vue 限制渲染条数_深入理解Vue 的条件渲染和列表渲染
  7. ufs2.0测试软件,UFS 2.1和UFS 2.0差距到底多大?跑分还有很多学问
  8. C#中面向对象编程中的函数式编程
  9. 样式中指定调用的效果
  10. 离散数学:等价关系与集合覆盖
  11. 2019年终总结——工作第二年
  12. 微信小程序开发:微信小程序里面集成百度地图的步骤
  13. JDK1.6支持TSL1.2协议
  14. EventBus原理源码分析和使用
  15. Android(一)
  16. 110115-07-6,Ac-LLM-CHOCalpain 抑制剂
  17. 输入一个字符串并原样输出。
  18. GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解
  19. 蘑菇街财报:短暂“盈利”惹众嘲
  20. SIKI学院:MySQL数据库从零到精通:八:课时 10 : 09-如何利用MySQL Workbench查看数据库和创建

热门文章

  1. reactjs 视频教程
  2. 三个等于号===与两个等于号==
  3. 【励志】俞敏洪励志演讲:摆脱恐惧
  4. google map
  5. 正则项的原理、梯度公式、L1正则化和L2正则化的区别、应用场景
  6. 设置非阻塞socket收发数据
  7. 计算机在材料科学与工程中的应用课后答案,材料科学与工程导论课后习题答案...
  8. java回溯算法解决数独_js回溯算法解决数独问题
  9. Eclipse插件简介
  10. 64位 Eclipse IDE for Java EE Developers 下载地址