gpt4 book ai didi

mysql - 跳过mysql自增中的某个数字

转载 作者:行者123 更新时间:2023-11-30 23:52:42 25 4
gpt4 key购买 nike

我目前做了一个简单的记录表,以recordID作为自增主键,问题是,由于宗教原因,我的雇主希望包括数字4和 recordID 中的 6,所以不是每次在创建记录后检查 recordID,有没有更简单的方法来解决我当前的问题?

编辑:

这是我根据 Vanojx1 的回答创建的快速测试表。那我做错了什么?

CREATE TABLE `test` (
`ID` int(11) NOT NULL,
`value` int(11) NOT NULL
)

DELIMITER $$
CREATE TRIGGER `jump4and6` BEFORE INSERT ON `test` FOR EACH ROW BEGIN
SET @nextId = (SELECT MAX(`id`) FROM `test`);
IF (@nextId IN (4,6)) THEN
SET NEW.id = @nextId + 1;
SET @nextId = @nextId + 2;
ELSE
SET NEW.id = @nextId;
SET @nextId = @nextId + 1;
END IF;
INSERT INTO `test`(`id`) VALUES (@nextId);
END
$$
DELIMITER ;

ALTER TABLE `test` ADD PRIMARY KEY (`ID`);
ALTER TABLE `test` MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT;

到目前为止一切正常,但是当我尝试插入一行时:

INSERT INTO `test`(value) VALUES (123456);

这会发生。

#1442 - Can't update table 'test' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

最佳答案

您可以将主键创建为整数,然后在插入前使用触发器,如下所示:

DELIMITER $$
CREATE TRIGGER jump4and6
BEFORE INSERT
ON your_table
FOR EACH ROW BEGIN
SET @nextId = (SELECT MAX(current_index) FROM your_table_sequence);
IF (@nextId IN (4,6)) THEN
SET NEW.id = @nextId + 1;
SET @nextId = @nextId + 2;
ELSE
SET NEW.id = @nextId;
SET @nextId = @nextId + 1;
END IF;
INSERT INTO your_table_sequence (current_index) VALUES (@nextId);
END$$

您还需要一个表来存储您的主键序列

关于mysql - 跳过mysql自增中的某个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41584968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com