mysql auto increment

ivzb

Registered
Има ли начин като изтриеш последния ред в някоя таблица, след това ID-то да става такова каквото е било преди изтриването. Пример: ID = 8, триеш последния ред и при следващата заявка ID-то да не става 9, а да става 8? Дано сте ме разбрали :D
 
То за това е ауто инкриймънт, увеличава се с едно винаги, за да е уникално. Пример ако имаш един потребител с ID - 13 и този потребител изтрие своя профил, 13 ще се заеме от нов човек, което обърква цялата схема.

Май може да се направи нещо подобно, все пак:

Код:
ALTER TABLE `tablica` auto_increment = $last_ai_field+1;

Като $last_ai_field го взимаш от базата данни.

Edit: Като се замисля това няма да работи правилно. :D
 
Махаш ауто инкремента, и при всяко следващо добавяне си взимаш последното ИД и добавяш +1.
 
Можеш да го направиш, при условие, че типа на таблицата е MyISAM

[sql]ALTER TABLE t2 AUTO_INCREMENT = value;[/sql]
You cannot reset the counter to a value less than or equal to any that have already been used. For MyISAM, if the value is less than or equal to the maximum value currently in the AUTO_INCREMENT column, the value is reset to the current maximum plus one.

С други думи, дори няма нужда да проверяваш кое е предишното най-голямо число, защото ако сложиш някое по-малко, MySQL автоматично ще го направи на сегашното съществуващо най-голямо плюс 1. Винаги можеш да го сетваш на нула и винаги ще бъде правилно:


[sql]ALTER TABLE t2 AUTO_INCREMENT = 0;[/sql]

Test case:

[sql]
create table book (
id int(10) unsigned primary key auto_increment,
title varchar(100) not null
) engine=MyISAM;

insert into book values (NULL, 'Lord of the Rings');
insert into book values (NULL, 'PHP 5');
insert into book values (NULL, 'Thinking in Java');

show table status like 'book'\G

Auto_increment: 4

delete from book where id = 3;

alter table book auto_increment = 0;

show table status like 'book'\G

Auto_increment: 3

[/sql]

Това обаче не е оптимален вариант, ако таблицата е голяма, защото за да се извърши това действие, MySQL създава временна таблица, копира цялата налична инфромация в новат атаблица, изтрива старата таблица, преименува новата таблица с името на старата.

Ето какво е предложението в този случай:

The bottom line for me is to go back to the "old fashioned way" - just insert a dummy row and explicitly set the AUTO_INCREMENT column to N - 1, then immediately delete the dummy row. The next row that is inserted will start at N and go from there.

Източник: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html#c10750
 

Back
Горе