/ / В какви случаи трябва да се използва AUTOINCREMENT вместо стандартния ROW ID? - sqlite, sqlite3

В какви случаи трябва да се използва AUTOINCREMENT вместо стандартния ROW ID? - sqlite, sqlite3

В Sqlite има два начина за създаване на монотонно увеличаващи се първични ключове, генерирани от двигателя на базата данни, по подразбиране ROWID механизъм или чрез AUTOINCREMENT механизъм.

sqlite> -- Through the default ROWID mechanism
sqlite> CREATE TABLE foo(id INTEGER NOT NULL PRIMARY KEY, foo);
sqlite> INSERT INTO foo (foo) VALUES ("foo");
sqlite> INSERT INTO foo (foo) VALUES ("bar");
sqlite> SELECT * FROM foo;
1|foo
2|bar
sqlite>
sqlite> -- Through the AUTOINCREMENT mechanism
sqlite> CREATE TABLE bar(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, bar);
sqlite> INSERT INTO bar (bar) VALUES ("foo");
sqlite> INSERT INTO bar (bar) VALUES ("bar");
sqlite> SELECT * FROM bar;
1|foo
2|bar
sqlite> -- Only the AUTOINCREMENT mechanism uses the sqlite_sequence table
sqlite> SELECT * FROM sqlite_sequence WHERE name in ("foo", "bar");
bar|2

Най- документация изглежда, предполага, че използването AUTOINCREMENT Лошо е:

Ключовата дума AUTOINCREMENT налага допълнителни режими на процесора, паметта, дисковото пространство и дисковите входно / изходни режими и трябва да се избягва, ако не е абсолютно необходимо. Обикновено това не е необходимо.

Ако след това се покаже ключовата дума AUTOINCREMENTINTEGER PRIMARY KEY, който променя автоматично алгоритъма за задаване на ROWID, за да се предотврати повторното използване на ROWIDs през целия живот на базата данни. С други думи, целта на AUTOINCREMENT е да се предотврати повторното използване на ROWID от преди изтритите редове.

[С AUTOINCREMENT,] SQLite следи занай-голямата ROWID, която някога е имала таблица, използвайки вътрешна таблица с име "sqlite_sequence". Таблицата sqlite_sequence се създава и инициализира автоматично, когато се създава нормална таблица, която съдържа колона AUTOINCREMENT. Съдържанието на таблицата sqlite_sequence може да бъде променено чрез обикновени изрази UPDATE, INSERT и DELETE. Но правенето на промени в тази таблица вероятно ще наруши алгоритъма за генериране на ключ AUTOINCREMENT. Уверете се, че знаете какво правите, преди да предприемете такива промени.


В какви случаи е подходящо да се използва ключовата дума AUTOINCREMENT?

Отговори:

2 за отговор № 1

Документацията казва това

целта на AUTOINCREMENT е да се предотврати повторното използване на ROWID от преди изтритите редове.

Затова е подходящо да използвате AUTOINCREMENTключова дума, когато трябва да предотвратите повторното използване на ROWID от преди изтрити редове. Това може да е необходимо, ако имате външни препратки към тези изтрити редове и не трябва да ги бъркате с нови редове.