В настоящее время я создал простую таблицу записей с идентификатором recordID в качестве первичного ключа с автоматическим приращением, вопрос в силу религиозных причин, мой работодатель НЕ ДЕЛАЕТ. число 4 и 6 в идентификаторе записи, поэтому вместо проверки идентификатора записи каждый раз после записи была ли гораздо более простой способ решить мою текущую проблему?Пропустить определенное число в auto-increment mysql
EDIT:
Вот быстрый стол тест, который я создал на основе ответа 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.
автоинкрементируемых всегда будет увеличивать идентификатор записи при создании списка. поэтому вы можете вставлять и удалять эти строки, но вы не можете пропустить автоуровень в/или перед созданием. –
Это действительно интересно. Я не знаю никакой такой функции и хотел бы следовать этой теме. Единственный тигр, о котором я могу думать, - это проверить идентификатор последней вставленной строки, а если следующий 4 || 6, то просто вставьте строку FOO и немедленно удалите ее, чтобы сохранить пространство DB. По информационным причинам я также хотел бы знать, к какой религии обращаются здесь, и к отношениям с этими цифрами, если вы не возражаете. –
@RuslanAbuzant Я кодирую медицинскую карту, номер 4 на китайском языке имеет похожий звук с «Смертью» (следовательно, медицинские здания часто пропускают номер 4), а для 6 - более христианский, из-за ссылки 666 для сатаны. –