通常のSqliteテーブルは、64ビット整数をキーとして使用するB*ツリーです。これはROWIDと呼ばれます。行を挿入するときに、この値が明示的に指定されていない場合は、値が生成されます。 INTEGER PRIMARY KEY
columnは、このROWIDのエイリアスとして機能します。 AUTOINCREMENT
キーワード。上記のINTEGER PRIMARY KEY
でのみ使用できます。 列は、名前とは逆に、上記のROWIDの計算方法を変更するだけです。値を省略すると、そのキーワードが存在するかどうかに関係なく作成されます。これは、実際にはROWIDであり、数値が必要なためです。詳細はこちら。 (rowid値は通常、昇順で生成されますが、必ずしも順番に生成されるわけではなく、行番号などのように扱うべきではありません)。
単一のINTEGER
以外の主キー 列は一意のインデックスとして扱われますが、ROWIDは真の主キーのままであり(ROWIDテーブルがない場合を除く)、自動生成されません。ですから、いいえ、あなたは(簡単に)あなたが望むことをすることはできません。
私はおそらく、ショップのテーブル、製品のテーブル、それぞれが独自のIDを持ち、2つの間に多対多の関係を確立するジャンクションテーブルがあるデータベース設計を考え出すでしょう。これにより、店舗間で商品IDが同じになり、人の混乱が少なくなる可能性があります。たとえば、同じチェーンの2つの異なる店舗で同じ商品のSKUが異なるとは思われません。
次のようなもの:
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;