微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mysql Auto_increment id number Order Missing

如何解决Mysql Auto_increment id number Order Missing

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,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,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

解决方法

-- 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 个并发进程应该尝试同时插入相同的值,那么其中一个将由于违反唯一约束而失败。所以避免平行插入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。