我在 sqlite 中有两个表,它们通过 id“连接”。使用此表的应用程序在 Android 操作系统上运行。
表 1;:
|id| entry 1| entry2|
|1 | aaaaaa | aaaaa |
|2 | bbbbbb | bbbbb |
表 2:
|id| entryx| constant|
|1 | aaaaa | aaaaaaaa|
|1 | baaaa | baaaaaaa|
|1 | caaaa | caaaaaaa|
|2 | ababa | baabaaba|
目前,我使用循环使用以下查询删除条目:
do{
db.delete("Table 1","id='"+cid+"'",null);
db.delete("Table 2","id='"+cid+"'",null);
}
while(getNextID());
我想使用外键,它允许我删除表 1 中的条目,并且表 2 中的所有条目也会被删除。此外,我必须考虑表1中的数据是在表2中插入之前插入的。我如何使用外键来做到这一点?该表使用 id 作为 int 并且它是主键,第二个表也使用相同的主键。
最佳答案
正如塞尔文建议使用删除级联
http://www.sqlite.org/foreignkeys.html
表1
CREATE TABLE table1 (
id PRIMARY KEY
,entry1 text,entry2 text
);
然后
insert into table1 values(1,"aaaa","aaaaa");
insert into table1 values(2,"bbbb","bbbbb");
表2
CREATE TABLE table2(
id int references table1(id) ON DELETE CASCADE, entryx text, constant text
);
insert into table2 values(1,"aaaa","aaaaa");
insert into table2 values(1," baaaa ","baaaaaaa");
insert into table2 values(1," caaaa ","caaaaaaa")
insert into table2 values(2,"bbbb","bbbbb");
输入后的表格
sqlite> select * from table1;
id entry1 entry2
---------- ---------- ----------
1 aaaa aaaaa
2 bbbb bbbbb
sqlite> select * from table2;
id entryx constant
---------- ---------- ----------
1 aaaa aaaaa
1 baaaa baaaaaaa
1 caaaa caaaaaaa
2 bbbb bbbbb
删除
sqlite> delete from table1 where id=1;
删除后的表格
sqlite> select * from table2;
id entryx constant
---------- ---------- ----------
2 bbbb bbbbb
sqlite> select * from table1;
id entry1 entry2
---------- ---------- ----------
2 bbbb bbbbb
关于android - 如何在sqlite中使用外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21312276/