首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有自动增量的表上的单插入忽略

没有自动增量的表上的单插入忽略
EN

Database Administration用户
提问于 2022-06-17 09:05:09
回答 1查看 598关注 0票数 1

对于此表,在mysql 5.7中,

代码语言:javascript
复制
    CREATE TABLE `t` (
      `id` int(10) unsigned NOT NULL,
      `val` int(10) unsigned NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB;
  • 表没有自动增量列
  • 表没有分区
  • 只有在此表上执行的查询才会插入并选择
  • 该表不用于任何子查询。
  • sql_mode没有启用任何STRICT_*

我需要插入到这个表中,但是id值存在于超过50%的情况中。如果不存在" INSERT“,我希望使用单个INSERT忽略而不是"SELECT id”

当执行INSERT忽略时(而不是多插入键),并且主键存在,是否/是否涉及任何锁定?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2022-06-17 15:26:19

这可以在测试中得到证实。打开两扇窗户。

在第一个窗口:

代码语言:javascript
复制
mysql> insert into t values (1, 10), (3, 30);
mysql> begin;
mysql> insert ignore into t values (1, 10);
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-----------------------------------------+
| Level   | Code | Message                                 |
+---------+------+-----------------------------------------+
| Warning | 1062 | Duplicate entry '1' for key 't.PRIMARY' |
+---------+------+-----------------------------------------+

事务仍然未提交,因此如果我们锁定了行,则此事务仍然持有锁。

现在在第二个窗口:

代码语言:javascript
复制
mysql> update t set val = val * 2 where id = 1;
<hangs waiting for lock>

显然,第一个窗口中的INSERT忽略确实获得了一个锁。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/313465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档