1

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)

2番目の挿入に外部キーの不一致を与える

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 (?,?,?)

なぜそれが起こっているのですか?

4

2 に答える 2

10

外部キーに関するsqliteのドキュメント http://www.sqlite.org/foreignkeys.htmlによると 、次のいずれかを行う必要があります。

  • 主キーを外部キーとして使用する

    外部キー(value1fk)参照table_A(_id)

  • 一意の列を外部キーとして使用する

    存在しない場合はCREATETABLEtable_A(_id long主キー、value1 long UNIQUE);

于 2012-04-13T16:09:13.080 に答える
1

value_1フィールドtable_Aは主キーではありません。あるべきではない

FOREIGN KEY (value1fk) REFERENCES table_A (_id)...

代わりは?

于 2012-04-13T15:57:27.473 に答える