问题一、外键的开启和关闭
- 老版本的SqLite数据库不支持外键,现在的SqLite3数据库支持。
SqLite3数据库的外键默认是关闭的,所以需要手动打开:
PRAGMA foreign_keys; //结果为 0 <=>关闭; 1 <=> 打开 PRAGMA foreign_keys = ON; //打开外键 PRAGMA foreign_keys = OFF; //关闭外键
问题二、外键设置需要注意的地方
- 在一个表中,一个列既可以是主键,也可以是外键。
- 如果,A表中的列1是外键,参照的是B表的列1’,那么列1’必须是B的主键(列1’具有unique约束)。但是不能有在B表中 primary key(1’,2’,…) 这种有和列1’共同形成的联合主键出现,否则操作表时将会出现错误。
问题三、查询语句问题
- 两个表的列名一样时,做select column_name时,一定要标明哪个表的列名。
在做删除操作时,
DELETE FROM code WHERE course_id = (SELECT course_id FROMR course WHERE teacher_id = ?)
一个teacher_id对应的course_id可能是多条,那么这条语句只能删除code表中一种course_id的记录。此时要设置一个while循环删除干净。