如何解决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 问题时,
在第二次尝试添加相同的记录后,它抛出了 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 举报,一经查实,本站将立刻删除。