在SQLite中自动生成复合密钥
我有一个SQLite的复合主键{shop_id,product_id} 现在,我想要一个product_id的自动增量值,如果店铺id被更改,它将重置为1。基本上,我想要自动生成的复合键 e、 g 店铺ID产品ID 11 1 2 13 2.1 2.2 3.1在SQLite中自动生成复合密钥,sqlite,android-sqlite,composite-primary-key,Sqlite,Android Sqlite,Composite Primary Key,我有一个SQLite的复合主键{shop_id,product_id} 现在,我想要一个product_id的自动增量值,如果店铺id被更改,它将重置为1。基本上,我想要自动生成的复合键 e、 g 店铺ID产品ID 11 1 2 13 2.1 2.2 3.1 我可以用自动增量来实现这一点吗?如何使用?普通Sqlite表是使用64位整数作为键的B*树。这就是所谓的。插入行时,如果没有为此显式给定值,则会生成一个值。INTEGER主键列用作此rowid的别名。AUTOINCREMENT关键字只能用于
我可以用自动增量来实现这一点吗?如何使用?普通Sqlite表是使用64位整数作为键的B*树。这就是所谓的。插入行时,如果没有为此显式给定值,则会生成一个值。
INTEGER主键
列用作此rowid的别名。AUTOINCREMENT
关键字只能用于所述的INTEGER主键
列,与名称相反,它只会改变所述rowid的计算方式-如果您省略一个值,则无论该关键字是否存在,都会创建一个关键字,因为它实际上是rowid,并且必须有一个数字。细节。(rowid值通常是按递增顺序生成的,但不一定是按顺序生成的,顺便说一句,不应将其视为行号或类似的东西)
除了单个整数
列之外的任何主键都被视为唯一索引,而rowid仍然是真正的主键(除非它是表),并且不会自动生成。所以,不,你不能(轻易地)做你想做的事
我可能会设计一个数据库,其中有一个商店表,一个产品表,每个表都有自己的ID,还有一个连接表,在两者之间建立多对多关系。这使得商店之间的产品id保持相同,这可能会减少人们的混淆-例如,我不希望同一商品在同一连锁店的两个不同商店中有不同的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;