android - sqlite 表中的每一行如何是唯一的。不仅仅是一列行

标签 android sqlite unique

我有一个 sqlite 表,其中包含姓名和姓氏两列。我希望姓名和姓氏必须不同,而不仅仅是姓名。

我的表代码是

private static final String MAKE_TABLE_NAME_SURNAME = "CREATE TABLE " +
 TABLE_DISEASE_SEMPTOM + "(" + KEY_DSID  " INTEGER PRIMARY KEY AUTOINCREMENT," +
 NAME + " TEXT, " + SURNAME + " TEXT) ";

我无法使用

private static final String MAKE_TABLE_NAME_SURNAME = "CREATE TABLE " +
 TABLE_DISEASE_SEMPTOM + "(" + KEY_DSID  " INTEGER PRIMARY KEY AUTOINCREMENT," +
 NAME + " TEXT UNIQUE, " + SURNAME + " TEXT UNIQUE) ";

因为如果我使用此代码,则无法添加相同的名字但不同的姓氏或相同的姓氏但不同的名称。如果两者相同,怎么能忽略。

最佳答案

我相信以下是您想要的:-

private static final String MAKE_TABLE_NAME_SURNAME = "CREATE TABLE " +
   TABLE_DISEASE_SEMPTOM + "(" + KEY_DSID  " INTEGER PRIMARY KEY AUTOINCREMENT," +
   NAME + " TEXT, " + SURNAME + " TEXT, UNIQUE(" + NAME + "," + SURNAME +")) ";

也就是说,您将名称列和姓氏列的组合定义为 UNIQUE 约束。

例如考虑:-

DROP TABLE IF EXISTS TABLE_DISEASE_SEMPTOM;
CREATE TABLE IF NOT EXISTS TABLE_DISEASE_SEMPTOM (KEY_DSID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, SURNAME TEXT, UNIQUE(NAME,SURNAME));
INSERT INTO TABLE_DISEASE_SEMPTOM (NAME,SURNAME) VALUES('Fred','Bloggs'),('Fred','Smith'),('Mary','Smith'),('Jane','Doe');
INSERT OR IGNORE INTO TABLE_DISEASE_SEMPTOM (NAME,SURNAME) VALUES('Fred','Bloggs'); -- will not be inserted as duplicate
SELECT * FROM TABLE_DISEASE_SEMPTOM;

前 4 个插入有效,最后一个(单独)被忽略(因为它是重复的)。 因此最终查询产生:-

enter image description here

日志是:-

INSERT INTO TABLE_DISEASE_SEMPTOM (NAME,SURNAME) VALUES('Fred','Bloggs'),('Fred','Smith'),('Mary','Smith'),('Jane','Doe')
> Affected rows: 4
> Time: 0.117s


INSERT OR IGNORE INTO TABLE_DISEASE_SEMPTOM (NAME,SURNAME) VALUES('Fred','Bloggs')
> Affected rows: 0
> Time: 0.117s

即最后一次插入没有插入任何行

关于android - sqlite 表中的每一行如何是唯一的。不仅仅是一列行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56001103/

相关文章:

android - 如何调整 ListView 项目的屏幕尺寸

android - sencha 包无法在 Release模式下运行 zipalign

Android在 fragment 和对话框 fragment 之间共享ViewModel?

swift - 无法访问 fts4 虚拟表 - SQLite 数据库错误 : 1 "no such table:"

sqlite - NHibernate、Sqlite、丢失的表和 IOC 乐趣

python - 如何通过选择元素中字符的唯一组合来过滤列表(Python)?

android - 应用程序如何在没有 root 的情况下访问 Android 6.0(API 级别 23)中 USB OTG 存储上的文件?

java - 如何从 JPA 唯一约束违规中获取值?

postgresql - postgres upsert json Prop

command-line - 以艰难的方式学习 SQL - 在 SQLite 3 中使用 .db 创建 .sql - 为什么以及如何?