我有一个 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 个插入有效,最后一个(单独)被忽略(因为它是重复的)。 因此最终查询产生:-
日志是:-
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/