【问题标题】:Mysql Auto_increment id number Order MissingMysql Auto_increment id number 订单缺失
【发布时间】:2021-06-16 14:54:17
【问题描述】:
CREATE TABLE TableA(
  id  int  auto_increment unique,
  user_id INTEGER, 
  content_id VARCHAR(10), 
  points  INTEGER, 
  content_type INTEGER, 
  description VARCHAR(100), 
  created_date DATETIME,
  PRIMARY KEY(user_id, content_id, content_type)
)

我创建了 TableA,但问题是当我将记录插入 TableA 时,遇到了 id Auto_increment 问题,

在下表中首先,我添加了一个唯一的对然后 id=1

在第二次尝试添加相同的记录之后,它会抛出 user_id、content_id 和 content_type 组合的错误 BCS 是唯一的,我认为它工作正常

第三次,我以不同的方式添加它然后将它添加到桌子上但是 ID = 3,我的问题是为什么 ID 丢失以及如何修复它,任何人都可以帮助我,请

:id user_id, content_id, points, content_type, description, created_date: 
1    1        1a1           5        1              null     2021-02-26 08:26:54
3    1        1a1           5        2              null     2021-02-26 08:26:56
5    1        1a2           5        1              null     2021-02-26 08:26:54
6    1        1a3           5        2              null     2021-02-26 08:26:56

我想将记录插入到没有缺少 ID 号订单的表中,如下所示

:id user_id, content_id, points, content_type, description, created_date: 
1    1        1a1           5        1              null     2021-02-26 08:26:54
2    1        1a1           5        2              null     2021-02-26 08:26:56
3    1        1a2           5        1              null     2021-02-26 08:26:54
4    1        1a3           5        2              null     2021-02-26 08:26:56

【问题讨论】:

  • 这是常态,不用担心。如果您需要没有间隙的枚举,请为此目的使用附加列并以编程方式分配它,或在查询中枚举。
  • @Akina,感谢您的宝贵时间,您能否通过在查询中枚举来提供有关如何使用附加列编写它的建议
  • 是否可以同时插入行(同时从 2 个不同的源/应用程序)?是否可以从此表中删除行?
  • 在复合材料上贴上唯一的替代品和主要产品有点奇怪;通常情况正好相反。

标签: mysql sql unique-constraint composite-primary-key unique-key


【解决方案1】:
-- add a column for enumeration
ALTER TABLE TableA
ADD COLUMN enumeration INT UNSIGNED UNIQUE;
-- create trigger which assigns enumeration values
CREATE TRIGGER tr_bi_TableA
BEFORE INSERT
ON TableA
FOR EACH ROW
SET NEW.enumeration = COALESCE(1 + (SELECT MAX(enumeration) FROM TableA), 1);

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0119b35e59188a0ecec70fdec7fe4d41

如果 2 个并发进程应尝试同时插入相同的值,则其中一个将因违反唯一约束而失败。所以避免并行插入。

【讨论】:

    猜你喜欢
    • 2012-10-30
    • 2020-11-01
    • 2011-04-12
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2014-11-04
    相关资源
    最近更新 更多