1

myFooTable関連するすべてのレコードからレコードを削除するmyFooBarLinkTableと、削除も削除されるように、削除をカスケードしようとしmyBarTableています。現在の DB スキーマの試みの簡略版を以下に示します。myFooTable関連するレコードからレコードを削除すると、myFooBarTable削除されます。の記録myBarTableはまだ残っています。

public class MyDatabaseManager extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE myFooTable (fooID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "fooText1 TEXT," +
                "fooText2 TEXT " +    
                ");");

    db.execSQL("CREATE TABLE myBarTable (barID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "barText1 TEXT, " +
                "barText2 TEXT);" );

    db.execSQL("CREATE TABLE myFooBarLinkTable (fooBarLinkID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "fooLinkID REFERENCES myFooTable(fooID) ON DELETE CASCADE, " +
                "barLinkID REFERENCES myBarTable(barID) ON DELETE CASCADE);" );
4

1 に答える 1

1

ON DELETE CASCADE 一方向にしか機能しません。テーブル定義のこれらの句は、参照myFooBarLinkTableされるテーブルのレコードが削除された場合にのみトリガーされます。つまり、 または のいずれかです。myFooTablemyBarTable

他の方法で削除を行う場合は、独自のトリガーを作成するかDELETE、アプリから別のコマンドを実行する必要があります。

于 2013-01-21T16:11:33.413 に答える