SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Automatycznie generuj klucz złożony w SQLite

Normalne tabele Sqlite to drzewa B*, w których kluczem jest 64-bitowa liczba całkowita. Nazywa się to rowidem. Podczas wstawiania wiersza, jeśli wartość nie jest wyraźnie podana, zostanie wygenerowana. INTEGER PRIMARY KEY kolumna działa jako alias dla tego wiersza. AUTOINCREMENT słowo kluczowe, które może być użyte tylko ze wspomnianym INTEGER PRIMARY KEY kolumna, w przeciwieństwie do nazwy, zmienia jedynie sposób obliczania tego wiersza - jeśli pominiesz wartość, zostanie ona utworzona bez względu na to, czy to słowo kluczowe jest obecne, czy nie, ponieważ tak naprawdę jest to wiersz i musi mieć liczbę. Szczegóły tutaj. (wartości rzędów są zwykle generowane w rosnącej, ale niekoniecznie sekwencyjnej kolejności i nie powinny być traktowane jako numer wiersza ani nic w tym stylu, btw).

Dowolny klucz podstawowy inny niż pojedynczy INTEGER kolumna jest traktowana jako unikalny indeks, podczas gdy rowid pozostaje prawdziwym kluczem podstawowym (chyba że jest to tabela BEZ ROWID) i nie jest generowana automatycznie. Więc nie, nie możesz (łatwo) robić tego, co chcesz.

Prawdopodobnie opracowałbym projekt bazy danych, w której masz tabelę sklepów, tabelę produktów, każdy z własnymi identyfikatorami, oraz tabelę połączeń, która ustanawia między nimi relację wiele do wielu. Dzięki temu identyfikator produktu jest taki sam w różnych sklepach, co prawdopodobnie będzie mniej mylące dla ludzi – na przykład nie spodziewałbym się, że ten sam produkt będzie miał różne SKU w dwóch różnych sklepach tej samej sieci.

Coś takiego:

CREATE TABLE stores(store_id INTEGER PRIMARY KEY
                  , address TEXT
                    -- etc
                   );
CREATE TABLE product(prod_id INTEGER PRIMARY KEY
                   , name TEXT
                     -- etc
                   );
CREATE TABLE inventory(store_id INTEGER REFERENCES stores(store_id)
                     , prod_id INTEGER REFERENCES product(prod_id)
                     , PRIMARY KEY(store_id, prod_id)) WITHOUT ROWID;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przecięcie SQLite

  2. Znaleziono wyciek bazy danych SQLite

  3. Uprawnienia użytkownika SQLite

  4. SQLiteException:nieznana baza danych

  5. Aktualizacja bazy danych i aplikacji Android SQLite