(3359 www.cn blogs.com/Chen xiaohei/p/6909318.html数据库(理解外键及其约束)一)首先定义外键
如果一个表(表1 )中的字段x不是主键,另一个表)中的字段x不是主键,则字段x称为表2中的外键。 也就是说,如果关系模型R1的属性集是关系模型R2的主键,而不是关系模型R1的主键,则该属性集被称为关系模型R1的外键。
2 :了解主键表和外键表
(1)以公用键为主键的表为主键表(父表、主表) )。
)使用公共关键字作为外键的表作为外键表(从表到外观) )。
举个例子:
这里有两张表(student和depart )学生表和系表。 这里的字段departNum是学生表的外键。 这里的外键表是学生表,主键表是系表。
(四)外键作用
各种书籍和网络资料大多是抽象空洞的解释。 保证数据的完整性和一致性。
个人理解和下面的外键约束一起说。
(五)外键约束
在Mysql下,设置外键:
on delete规则:
1、级联
(1)级联删除是指在删除主键表的同时,也同时删除外键表。
)在上面的示例中,如果删除了有系表的系,则在学生表中查找与此删除的系号对应的院信息时会出错。 由于该系已不存在,因此在删除系表(主键表)时,必须删除其他与其相关的表。 在此说明外键的作用,保持数据的完整性、完整性。 当然反过来说,删除学生表的记录也不会影响院系表的数据。 即使查了本科号码也能正确地查出来。 因此,从外键表中删除数据不会影响主键表。
2、NO ACTION (非活动、默认)、RESTRICT :约束/限制
如果值为No Action或Restrict,则从主键表中删除相应记录时,首先检查是否存在与该记录对应的外键,如果存在,则不允许删除。 也就是说,外键表约束主键表
3、设置空值
如果值为Set Null,则在从主键表中删除相应记录时,首先检查是否存在与该记录对应的外键,如果存在,则将子表的外键值设置为null。 (同样,外键表约束主键表,但必须允许外键为空。
NO ACTION与RESTRICT之间的区别:只有在和单独的情况下,前者在其他受约束的操作之后执行,后者是最高优先级的执行。
6 .实用化
模型中的数据如下:
package org.model;
公共类事件{
私有字符串常量;
私有字符串stuname;
span style=’color:#FF0000;’ 私有部门部门; /span
公共字符串获取三星
返回三星;
}
公共字符串获取stuname
返回稳态;
}
公共部门获取部门
返回部件;
}
publicvoidsetstunum (字符串常量)。
this.stuNum=stuNum;
}
公共语音设置名称(字符串名称)。
this.stuName=stuName;
}
publicvoidsetdepart (部门部门)。
this.depart=depart;
}
}
在此设计对象模型时,属性是整个depart对象,而不是将其设计为名为DepartNum的外键。 这具有以下优点:查询不需要通过外键或连接查询再次执行查询
要使用外键进行咨询,请:
span style=’font-size:18px;’ query query=session.create query (fromstudentasstudwherespanstyle=’ color : # ff 0000;’ stud.depart.depart num=: num/span ‘; query.setstring(‘num )、’ 890 ); /span