外键约束失效--级联更新删除

外键约束失效--级联更新删除,第1张

概述public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub String classesSQL = "CREATE TABLE classes(class_id varchar(10) primary key , " + "class_name varchar(20))";
public voID onCreate(sqliteDatabase db) 	{		// Todo auto-generated method stub		String classessql = "CREATE table classes(class_ID varchar(10) primary key," +        		"class_name varchar(20))";				String studentssql = "CREATE table students(student_ID varchar(10) primary key," +        		"student_name varchar(20),score varchar(4),class_ID varchar(10)," +        		"foreign key (class_ID) references classes(class_ID) " +        		"on delete cascade on update cascade )";		db.execsql(classessql);		Log.d("my","create table classes:"+classessql);		db.execsql(studentssql);		Log.d("my","create table students:"+studentssql);					}
@H_404_2@ 在创建表的时候有创建外键,进行了级联更新和级联删除,但是在删除一个班级的时候,发先属于该班级的学生却没有删除,也就是说
on delete cascade on update cascade

失效了。

经查资料知道:sqlite在3.6.19版本中才开始支持外键约束,但是为了兼容以前的程序,默认并没有启用该功能,如果要启用该功能每次都要需要使用如下语句:PRAGMA foreign_keys = ON来打开。

@H_404_2@

也就是说,在执行删除一个班级的语句的时候需要执行db.execsql("PRAGMA foreign_keys=ON")

@H_404_2@

/**	 * 删除一个班级	 * 同时会删除students中该班级的学生	 * @param class_ID	 */	public voID deleteClass(String class_ID)	{	    sqliteDatabase localsqliteDatabase = this.dbhelper.getWritableDatabase();	    //设置了级联删除和级联更新	    //在执行有级联关系的语句的时候必须先设置“PRAGMA foreign_keys=ON”	    //否则级联关系默认失效	    localsqliteDatabase.execsql("PRAGMA foreign_keys=ON");	    Object[] arrayOfObject = new Object[1];	    arrayOfObject[0] =class_ID;	    localsqliteDatabase.execsql("delete from classes where class_ID=?",arrayOfObject);	    localsqliteDatabase.close();	}
总结

以上是内存溢出为你收集整理的外键约束失效--级联更新删除全部内容,希望文章能够帮你解决外键约束失效--级联更新删除所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存