Tabel Sqlite normal adalah B*-tree yang menggunakan integer 64-bit sebagai kuncinya. Ini disebut rowid. Saat menyisipkan baris, jika nilai tidak diberikan secara eksplisit untuk ini, satu akan dihasilkan. Sebuah INTEGER PRIMARY KEY
kolom bertindak sebagai alias untuk rowid ini. AUTOINCREMENT
kata kunci, yang hanya dapat digunakan pada INTEGER PRIMARY KEY
kolom, bertentangan dengan namanya, hanya mengubah cara menghitung rowid - jika Anda mengabaikan nilai, nilai akan dibuat apakah kata kunci itu ada atau tidak, karena itu benar-benar rowid dan harus memiliki nomor. Rincian di sini. (nilai rowid umumnya dihasilkan dalam peningkatan, tetapi tidak harus berurutan, berurutan, dan tidak boleh diperlakukan seperti nomor baris atau semacamnya, btw).
Kunci utama apa pun selain satu INTEGER
kolom diperlakukan sebagai indeks unik, sedangkan rowid tetap menjadi kunci utama yang sebenarnya (Kecuali jika tabel TANPA ROWID), dan tidak dibuat secara otomatis. Jadi, tidak, Anda tidak dapat (dengan mudah) melakukan apa yang Anda inginkan.
Saya mungkin akan membuat desain database di mana Anda memiliki tabel toko, tabel produk, masing-masing dengan id mereka sendiri, dan tabel persimpangan yang menetapkan hubungan banyak-ke-banyak di antara keduanya. Hal ini membuat id produk tetap sama antar toko, yang mungkin tidak akan terlalu membingungkan orang - saya tidak berharap barang yang sama memiliki SKU yang berbeda di dua toko berbeda dari rantai yang sama, misalnya.
Sesuatu seperti:
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;