专业表,班级和学生表。专业表有id和 name,id自增长为主建,在班级表下有id(主键)和名称备注,还有个classid关联专业表主键。学生表下也有单独的stuid关联班级表主键。可在vs中做,增,删时包有主外键约束报错,这SQL语句咋写啊,存储
过程了,关键是觉得是语句的问题,该咋写啊。
1. 不要设置外键引用,因为以后修改,不一定这个几个表要关联,关联关系在用到时候在SQL语句里进行条件判断就行
2.主键没有任何的意义,只是唯一标识,如果真的建立了约束关系,就必须考虑到级联删除和级联修改的问题,很简单。
3.总之企业开发很少设置外键约束
4.按照你的思路给你简要提一下:专业id <---------学生表下的classid (学生学的专业在专业表的专业里),这样如果删除专业id那么就会报错,因为如果删除了学生表的专业classid不在专业id里,因此回滚事务,解决的办法是删除学生表中该专业所有的classid再删除专业表的id,就OK了。
5.不明白可以联系我的QQ:2627673890
是啊,必须先删学生表在删上级啊
我们知道但不熟悉的人在删除时不会按顺序来啊,但这样会产生个错误啊,这杂解决啊
@zon: 不要外键,直接用条件语句维护就行。
BEGIN TRANSACTION
DECLARE @errorSum int
SET @errorSum=0
delete from 学生表 where +你要定义的条件例如classid,name=?等等 --删除学生表中的记录
SET @errorSum=@errorSum+@@error
delete form 专业表 where id no in (select classid as 专业id form 学生表) and+你要定义的条件例如classid,name=?等等
SET @errorSum=@errorSum+@@error --累计是否有错误
If @errorSum>0
Begin
rollback transaction
select '失败'
End Else
Begin
commit transaction
select'成功'
End
这样的思路就是必须先删除学生表中的专业记录才能删除专业表里的专业id记录,我没有用
外键,我用了事务控制,别的的方法特别多,而且灵活,理解了自己试试别的
@zon: delete FROM 专业表 WHERE id not in ( select classid FROM 学生表 ) and id =@num (我假设的条件)
删除学生表的记录不受专业id约束,所以只要给删除专业id加上条件就行,如上id不在学生表的学生专业的集合里同时 id等于你选择的数是才删除,给我给点分啊。
关注。。。
怎样解决添加时约束的问题啊
这个应该是你数据库设计的问题,参照完整性的限制,不能引用不存在的实体,也就是说从表中的数据必须在主表中存在,你可以查一下相关文档,解决这个问题。