powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Генерация первичного ключа
6 сообщений из 6, страница 1 из 1
Генерация первичного ключа
    #33374759
Mandrakelelix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица, одно из полей которой (первичный ключ) определено как AUTO_INCREMENT. Вот примерно так:

CREATE TABLE Tbl1 (
ID BIGINT NOT NULL AUTO_INCREMENT,
Name VARCHAR(255) NULL,
PRIMARY KEY(ID)
)
TYPE=InnoDB;


Есть stored procedur'а для добавления записей в эту таблицу. Один из параметров процедуры - выходной, через которой я возвращаю значение ключа новой записи. Допустим, вот такая вот:

create procedure AddToTbl1(out a_ID bigint, in a_Name varchar(255))
begin
insert into Tbl1 values(null, a_Name);
select max(ID) into a_ID from Tbl1;
end;


Так вот, вопрос. Переиспользуются ли значения для автоинкрементных полей? Т.е., если на данный момент макс. значение ID у меня 5321, и я грохну записи с ID со 100 по 200, то при следующем insert'е в таблицу ID новой записи у меня будет равен 100 или таки 5322 ? Есть ли вообще какие-то специфичные приемы генерации ключей в MySQL?

Сорри за глупый вопрос (сам понимаю, что глупый), но нужно срочно . MySQL только 2 дня как поставил, до сих пор ни с чем кроме DB2/400 не работал...

Если кто-нибудь вместо ответить ткнет носом в соответствующий раздел документации - тоже буду благодарен, абы оно работало и я не нервничал за свои процедуры...

Спасибо! :)
...
Рейтинг: 0 / 0
Генерация первичного ключа
    #33376200
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Так вот, вопрос. Переиспользуются ли значения для автоинкрементных полей?
Нет.

Ответьте на вопрос. Вам нужен ключ для однозначной идентификации строки или поле, которое будет нумеровать строки?
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
Генерация первичного ключа
    #33377278
Mandrakelelix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4m@t!c>Так вот, вопрос. Переиспользуются ли значения для автоинкрементных полей?
Нет.

Ответьте на вопрос. Вам нужен ключ для однозначной идентификации строки или поле, которое будет нумеровать строки?


Мне нужен таки _ключ для идентификации записи_, а не номер этой записи. Если значения полей не переиспользуются - то все ок, меня это как раз устраивает :).
...
Рейтинг: 0 / 0
Генерация первичного ключа
    #33377327
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5322
...
Рейтинг: 0 / 0
Генерация первичного ключа
    #33377342
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых не совсем корректно извлекать последний ключ так
create procedure AddToTbl1(out a_ID bigint, in a_Name varchar(255))
begin
insert into Tbl1 values(null, a_Name);
select max(ID) into a_ID from Tbl1;
end;

Лучше использовать функцию
SELECT LAST_INSERT_ID() INTO ...;
она возвращает для данного коннекта последний сгенерированный автоинкрементный ключ в любой таблице, в которой произошло последняя генерация ключа автоинкрементом.

Значения полей в автоинкременте не переиспользуются, то что ты удалил ключ - это не значит, что он будет использован.

Если же хочется сильно использовать дырки ключей в последовательности - пиши алгорит сам.

Можно например хранить ключи дырок в таблице и отбирать их для новых записей и удалять, а при удалении из таблицы - добавлять туда ключи дырок.
...
Рейтинг: 0 / 0
Генерация первичного ключа
    #33377702
Mandrakelelix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переиспользование дырок мне как раз не интересно. Задача у меня - вернуть наверх из процедуры ID-шник вставленной записи, а то, что я его select max()'ом выбирал - так это извернулся от незнания :). Собственно, LAST_INSERT_ID() - это именно то, что мне нужно. Cпасибо!!!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Генерация первичного ключа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]