我正在测试Android中的外键,我遇到了一些我不明白的问题:
创建表格(带有硬编码值)
db.execSQL("CREATE TABLE IF NOT EXISTS table_A ( " +
"_id long primary key , value1 long );");
db.execSQL("CREATE TABLE IF NOT EXISTS table_B ( " +
"_id long primary key , value1fk long , value2 long,"+
"FOREIGN KEY (value1fk) REFERENCES table_A (value1) ON DELETE CASCADE);");
然后我执行:
ContentValues values = new ContentValues();
values.put("_id", 1);
values.put("value1", 200);
long result = mDb.insert("table_A", null, values);
Log.e("","done (" + result + ")");
values = new ContentValues();
values.put("_id", 1);
values.put("value1fk", 200);
values.put("value2", 10);
result= mDb.insert("table_B", null, values);
Log.e("","done (" + result + ")");
输出
done(1)
done(-1)
给第二个插入外键不匹配
E/SQLiteDatabase(25476): Error inserting _id=1 value1fk=200 value2=10
E/SQLiteDatabase(25476): android.database.sqlite.SQLiteException: foreign key mismatch: , while compiling: INSERT INTO table_B(_id,value1fk,value2) VALUES (?,?,?)
为什么会这样?
答案 0 :(得分:10)
根据外键上的sqlite文档 http://www.sqlite.org/foreignkeys.html 你需要:
使用主键作为外键
FOREIGN KEY(value1fk)REFERENCES table_A(_id)
使用Unique列作为外键
CREATE TABLE IF NOT NOT EXISTS table_A(_id long primary key,value1 long UNIQUE);
答案 1 :(得分:1)
value_1
中的table_A
字段不是主键。不应该是
FOREIGN KEY (value1fk) REFERENCES table_A (_id)...
代替?