android - 如何在sqlite中使用外键?

标签 android sqlite foreign-keys android-sqlite

我在 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/

相关文章:

java - SQLiteOpenHelper 中的 onDowngrade() (或降级时不崩溃的另一种方法)

mysql - 我无法将外键指向日期时间字段类型

MySQL 一直提示外键。错误 150

android - 我可以扩展一个简单的对象类来创建一个 Room 数据库对象吗?

android - 程序类型已经存在 : com. android.common.constant.HttpConstants

sqlite - 如何快速了解 SQLite 中的表结构?

sqlite - 如何用red连接sqlite3

java - JSOUP:无法解析方法标题()

android - 可以在 logcat 中有自定义日志吗?

asp.net - Entity Framework 与相关实体更新