Нормалните таблици на Sqlite са B*-дървета, които използват 64-битово цяло число като ключ. Това се нарича rowid. При вмъкване на ред, ако стойността не е изрично дадена за това, се генерира такава. INTEGER PRIMARY KEY
колона действа като псевдоним за този rowid. AUTOINCREMENT
ключова дума, която може да се използва само за посочения INTEGER PRIMARY KEY
колоната, противно на името, просто променя начина, по който се изчислява споменатият rowid - ако пропуснете стойност, ще бъде създадена такава, независимо дали тази ключова дума присъства или не, защото това наистина е rowid и трябва да има номер. Подробности тук. (rowid стойностите обикновено се генерират в нарастващ, но не непременно последователен ред и не трябва да се третират като номер на ред или нещо подобно, между другото).
Всеки първичен ключ, различен от единичен INTEGER
колоната се третира като уникален индекс, докато rowid остава истинският първичен ключ (освен ако не е таблица WITHOUT ROWID) и не се генерира автоматично. Така че, не, не можете (лесно) да правите това, което искате.
Вероятно бих разработил дизайн на база данни, където имате таблица с магазини, таблица с продукти, всеки със свои собствени идентификатори и таблица за свързване, която установява връзка много към много между двете. Това запазва идентификатора на продукта един и същ между магазините, което вероятно ще бъде по-малко объркващо за хората – не бих очаквал един и същи артикул да има различен артикул в два различни магазина от една и съща верига, например.
Нещо като:
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;