作者:狮子座刘娜_676 | 来源:互联网 | 2023-05-29 11:43
有点令人困惑。...如果我为每个表实现BaseColumns,它会自动为我创建一个称为_ID的自动递增主键,但是我是否还需要为每个表都创建自己的主键?多余甚至不必要?
如果我需要自己的主键,例如_MyID,我想主键将由_ID和我自己的(_MyID)组成,对吗?因此,在这种情况下,可以插入多个具有相同_MyID ....的寄存器,因为_ID是自动自动递增的,即:
_ID _MyID Other Fields.....
1 1000 ....
2 1000 ....
3 1000 ....
... 等等
因此,在这种情况下,如何控制_MyID只有一个寄存器的值可以为1000?
另外,我想我可以使用_ID列作为其他表的外键,对吗?
1> Karakuri..:
主要用途BaseColumns._ID
是Android CursorAdapter
会在您为其指定的游标中查找该列名称。也许还有其他的类可以做到这一点,但是我想不起任何东西。如果您不使用CursorAdapter
,那么实际上并没有什么可绑定的,可以使用_id作为表中的列名,并且可以随意命名该列。
它会自动为我创建一个自动递增的主键,称为_ID
根据您到目前为止所显示的内容,没有自动的方法。如果执行如下所示的SQL,则只有这样的列:
CREATE TABLE tableName (_id INTEGER PRIMARY KEY AUTOINCREMENT, ...);
您可以轻松地将其省略,也可以为主键指定其他名称。此外,没有什么要求您的主键可以自动增加。只要值是唯一的,它就满足主键要求。换句话说,这也很好:
CREATE TABLE tableName (_id INTEGER PRIMARY KEY, ...);
如果我需要自己的主键,例如_MyID,我想主键将由_ID和我自己的(_MyID)组成,对吗?
不完全的。您将必须执行以下操作:
CREATE TABLE tableName (_id INTEGER, _myId INTEGER, ..., PRIMARY KEY(_id, myId));
这将创建一个组合键,但是请注意,这两列本身都不被声明为主键。坦白说,如果您不需要这样的安排,请坚持使用一个主键。
最后一件事:
如果你正在计划使用CursorAdapter
,你可能想命名为方便起见,列_id,但即使如此,你不必。唯一重要的是,光标在该名称旁边有一列。表中的实际列可以具有不同的名称,您只需要在查询时对其加上别名即可在游标中使用正确的名称:
SELECT _myId as _id, ... FROM ...;