iPhone-使用文本主键的SQLite

iPhone-使用文本主键的SQLite,iphone,database,sqlite,core-data,uuid,Iphone,Database,Sqlite,Core Data,Uuid,有人知道我是否可以为SQLite iPhone数据库使用文本(UUID)主键吗? 我没有使用CoreData。SQLite允许您使用文本作为主键,如果您使用的是SQLite api,您应该没有问题。是的。您可以将文本字段用作主键: CREATE TABLE myTable (uniqueText VARCHAR NOT NULL PRIMARY KEY, text VARCHAR) 有些人插入: INSERT INTO myTable (uniqueText, text) VALUES ('h

有人知道我是否可以为SQLite iPhone数据库使用文本(UUID)主键吗?
我没有使用CoreData。

SQLite允许您使用文本作为主键,如果您使用的是SQLite api,您应该没有问题。

是的。您可以将文本字段用作主键:

CREATE TABLE myTable (uniqueText VARCHAR NOT NULL PRIMARY KEY, text VARCHAR)
有些人插入:

INSERT INTO myTable (uniqueText, text) VALUES ('hello', 'world')
结果:好的

另加插入:

INSERT INTO myTable (uniqueText, text) VALUES ('hello', 'world')

结果:错误-列uniqueText不唯一

当您尝试它时会发生什么?尚未尝试它,因为对整个项目的修改不在测试步骤中。我需要确保一切都能正常工作,因为截止日期快到了,与服务器的同步过程会变慢。为了优化它,我们希望使用UUID作为主键。好的,非常感谢。但是我应该如何处理这个SQLite API函数:SQLite_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);?它应该返回一个int64(长)变量。我可以修改一下吗?或者有没有其他方法可以检索最后插入行的主键?您可以看看我的其他注释吗?我真的需要一些帮助来评估我的源代码的更新。谢谢!我的回复考虑了您在上一篇文章中的最后一条评论:sqlite3_last_insert_rowid并没有返回主键,而是返回系统“hidden”表列的值。如果你想检索主键,你可以先获取rowid,然后构建一个查询,比如:从你的表中选择你的主键,其中rowid=row\u id\u retrieved\u,最后插入rowid。我不太理解你的回答。我想删除整数行id(主键),只使用UUID。你能再解释一下你的建议吗?感谢您无法删除ROWID这是一个系统列。来自sqlite文档:“每个sqlite表的每一行都有一个64位带符号整数键,该键唯一地标识其表中的行。该整数通常称为“rowid”。可以使用一个与大小写无关的特殊名称“rowid”、“oid”或“rowid”访问rowid值“代替列名。如果表包含一个名为“rowid”、“oid”或“rowid”的用户定义列,则该名称始终引用显式声明的列,并且不能用于检索整数rowid值。“好的,现在我明白了。非常感谢!