Скажем, у меня есть таблица MySQL с автоматически увеличивающимся полем id, после чего я вставляю 3 строки. Затем я удаляю вторую строку. Теперь идентификатор таблицы равен 1,3. Могу ли я заставить MySQL исправить это и сделать его 1,2 без необходимости писать программу для этого?удалить пробелы в auto increment
ответ
MySQL не позволит вам изменить индексацию столбца Auto-Index после его создания. То, что я делаю, это удалить столбец Auto-Index, а затем добавить новый с тем же именем, mysql будет индексировать вновь созданный столбец без пробелов. Делайте это только в таблицах, где Auto-Index не относится к остальным данным, а просто используется в качестве ссылки для обновлений и удалений.
Например, я недавно сделал это только для таблицы, содержащей пословицы, где столбец «Автоиндекс» использовался только тогда, когда я обновлял или удалял пословицу, но мне нужен был автоматический индекс, чтобы быть последовательным, поскольку пословицы вытягиваются через случайное число между 1 и числом пословиц, имеющее пробелы в последовательности, могло привести к случайному числу, указывающему на несуществующий индекс.
НТН
, но у меня есть некоторые связанные данные в другой таблице относительно auto increment id как внешнего ключа ,,, тогда как я это сделаю? –
@ReNiShAR См. Http://stackoverflow.com/a/5437720/14660 – Schwern
Цитируя The Access Ten Commandments (и это может быть расширяемой с другими СУБД:. «Ты не будешь использовать Autonumber (или Auto Incremental), если поле предназначено, чтобы иметь смысл для пользователей твоих»
Единственной альтернативой я могу думать (использовать только MySQL) заключается в следующем:
- Создать триггер, который добавляет номер строки в колонке (не первичный ключ)
- Создать процедуру для удаления строк и обновить номер строки (я не мог сделать эту работу с триггерами, извините)
Пример:
create table tbl_dummy(
id int unsigned not null auto_increment primary key,
row_number int unsigned not null default 0,
some_value varchar(100)
);
delimiter $$
-- This trigger will add the correct row number for each record inserted
-- to the table, regardless of the value of the primary key
create trigger add_row_number before insert on tbl_dummy
for each row
begin
declare n int unsigned default 0;
set n = (select count(*) from tbl_dummy);
set NEW.row_number = n+1;
end $$
-- This procedure will update the row numbers for the records stored
-- after the id of the soon-to-be-deleted record, and then deletes it.
create procedure delete_row_from_dummy(row_id int unsigned)
begin
if (select exists (select * from tbl_dummy where id = row_id)) then
update tbl_dummy set row_number = row_number - 1 where id > row_id;
delete from tbl_dummy where id = row_id;
end if;
end $$
delimiter ;
Обратите внимание, что вы» будут вынуждены удалять записи один за другим, и вы будете вынуждены получить правильное значение первичного ключа для записи, которую вы хотите удалить.
Надеюсь, это поможет
- 1. auto increment первичные остаточные пробелы при подсчете
- 2. MySql upsert и auto-increment вызывает пробелы
- 3. Auto Increment Проблема
- 4. AUTO INCREMENT в Starcounter
- 5. Как работает Auto Auto Increment?
- 6. как переменная auto increment
- 7. Auto increment in C#
- 8. Auto Increment пропускает числа?
- 9. codeigniter auto increment foreignkey
- 10. auto increment second column
- 11. Auto increment wint update
- 12. Auto Increment вручную
- 13. Mongoose auto increment
- 14. Hibernate Auto Increment ID
- 15. javascript enum auto-increment?
- 16. Hive auto increment
- 17. MySql Java auto increment
- 18. Weird auto increment issue
- 19. Auto increment id JSON
- 20. MongoDB auto increment ID
- 21. Мой SQL AUto Increment
- 22. Java auto increment issue
- 23. JsGrid - Auto Increment ID
- 24. Auto increment ID C#
- 25. Mongoose auto-increment
- 26. MySQL auto increment
- 27. Php Class Auto Increment
- 28. Auto increment number
- 29. Auto Increment HexValue
- 30. Auto-increment ClearDB
Это не намерение первичного ключа. Если вам нужны последовательные номера, не смотрите на первичный ключ. Чего вы пытаетесь достичь? –
... (для продолжения из Ian Wood), если вы хотите последовательную нумерацию, а не PK, используйте 'rowid'. – slashmais
Я пытаюсь изменить идентификатор строки от 1,2,4,5,7,8 и т. Д. до 1,2,3,4,5,6 и т. д. –