konto usunięte

Temat: auto_increment - czy możliwe jest zapełnianie pozycji po...

Witajcie,

Załóżmy, że mam taką tabelkę:

ID | ID_JAKIES | ID_JAKIESINNE
1 1 1
2 6 9
3 32 324


Pole ID posiada autoinkrementację. Następny rekord, który dodałbym do tej tabelki otrzyma ID = 4. Nawet jeżeli usunę w miedzyczasie rekord (przykładowo) z ID = 2. W tabelce powstanie "dziura" w numeracji, ale nowododany rekord będzie miał kolejną wartość (4). To jest wszystko jasne, logiczne i niezaprzeczalne.

Pytanie jest teraz takie - czy istnieje jakaś opcja/parametr, która będzie działać podobnie jak auto_increment, ale jednocześnie zapełniając "dziury" w numeracji? Czy jest taka opcja wbudowana w MySQL, czy trzeba to sobie dorobić z poziomu programu / bazy (trigger)?

Temat: auto_increment - czy możliwe jest zapełnianie pozycji po...

Ponieważ masz klucz prosty i do tego skalar to możesz stworzyć sobie funkcję, która wyznaczy ci ID.


DELIMITER $$

CREATE FUNCTION `your_schema`.`get_custom_id` ()
RETURNS INT
BEGIN
DECLARE new_id INT;

//do what you have to do to generate your fancy id

RETURN new_id;
END

DELIMITER ;


Example of use:

INSERT INTO `your_schema`.`your_table` VALUES (get_custom_id);
Ten post został edytowany przez Autora dnia 21.06.13 o godzinie 11:54
Tomasz Zadora

Tomasz Zadora programuję

Temat: auto_increment - czy możliwe jest zapełnianie pozycji po...

Nie ma takiego automatycznego mechanizmu w MySQL.

Natomiast zastanów się czy na pewno tego chcesz? Czasem do starego usuniętego id może być odnośnik w jakimś innym systemie, pliku, czymkolwiek. Wstawienie nowego rekordu "w miejsce" usuniętego może zepsuć spójność.

Jako autoincrement możesz użyć bardzo dużego INT-a (BIG int) i jeszcze dodatkowo dać atrybut UNSIGNED i wtedy maksymalny ID to jest liczba: 18446744073709551615.

Jeżeli to nie wystarczy (o_O?) to znaczy, że powinineneś zastosować jakiś mechanizm uniqid oparty o mikrosekundy + losowy ciąg znaków jako id.Ten post został edytowany przez Autora dnia 24.06.13 o godzinie 19:52

Następna dyskusja:

Skad szybciej mozna odczyta...




Wyślij zaproszenie do