约束

来源:互联网 发布:摄像头人脸识别软件 编辑:程序博客网 时间:2024/05/10 03:55

直到现在才明白为什么数据库里的数据有点乱。对不上。原来是删除除得不完全。

select *from tbUsers

有32条记录。

select dense_rank() over(order by nUserID) ,*from tbUserGroup

这个有36个不同用户记录,使用排名函数对nUserID排序,相同nUserID会得到num相同,得到连续的序号。

也就是说,删除了4个用户记录在tbUsers,但是tbUserGroup里还用着删除了的nUserID,导致从tbUserGroup里找用户资料时出问题

仔细一看原来少了一人外键约束。

将tbUserGroup表的nUserID设为外键之后就不会出现这个数据不一致问题。

如果加了外键还只删除主键数据会提示:The DELETE statement conflicted with the REFERENCE constraint "FK_tbUserGroup_tbUsers".

外键是相对于主键说的,是建立表之间 的联系的必须的前提。
   比如:学生表 、学生成绩表一一对应是因为 他们都具有相同的字段:学号,把学生表作为主表,学号是他的主键,相对于主表来说,学生成绩的字段 学号就是学生表的外键。
  没有外键,两个表就没办法建立联系啊!

最直观的作用是防止非法数据录入,就是说录入外键数据时必须在它所属的主表中存在相应数据,如果录入空字符或其他数据会报错。

主键约束:列内容不能重复,且不能为空
外键约束:内容必须是所关联主键的值其中的值
空值约束:不能为空
默认约束:当插入时没有赋值,会使用默认值
唯一约束:列的内容都是唯一的,不以重复
检查约束:列的内容必须符合要求。如CHECK (JOB IN(‘Engineer’,’Sales’,’Manager’));