依赖。
navicat中calzz依赖外键。创建外键可以打开Navicat,打开数据表所在的数据库,右击需要新增字段的数据库表,然后点击设计表,此时进入表设计界面,点击外键标签页,输入外键名称,字段选择对话框中选择要建外键的字段,如productid字段,然后点击确定,选择参考数据库,选择参考表,选择参考字段,设置外键删除时的 *** 作,设置外键更新时的 *** 作,如restrict,然后点击保存,创建外键就完成了。
外键的作用:
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。
阻止执行:
1、从表插入新行,其外键值不是主表的主键值便阻止插入;
2、从表修改外键值,新值不是主表的主键值便阻止修改;
3、主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
4、主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。
级联执行:
1、主表删除行,连带从表的相关行一起删除;
2、主表修改主键值,连带从表相关行的外键值一起修改。两种方法提供给用户选择。无论选取哪种方法,从表里都不会有多余行。从另一个角度理解,用拒绝同一事物在从表中的标志与主表不一致来实现与主表中的标志一致。
扩展资料:
外键使用原则:
1、 为关联字段创建外键。
2、 所有的键都必须唯一。
3、避免使用复合键。
4、外键总是关联唯一的键字段。
阻止执行和级联执行的两种实现方法,通过下面方式选择:
1、界面:设级联更新、级联删除两个选择方框,选取则级联执行、不选取则阻止执行;
2、命令:设E)kSCM)E、RESTRICT两个可选项,CASCADE为级联执行、RESTRICT为阻止执行。
参考资料来源:百度百科——外键
31
SQL
中的完整性约束
SQL把各种完整性约束作为数据库模式定义的一部分。既有效防止了对数据库的意外破坏,提高了完整性检测的效率,又可以减轻编程人员的负担。
SQL对三种不同完整性约束的设置及检测,采取了不同的方式加以实现。下面分别介绍。
311
实体完整性和主码
实体完整性规定,主码的任何属性都不能为空,因为,概念模型中实体和联系都是可区分的,而且它们以码为唯一性标识。如果,主码的属性值可以为空,则意味着在概念模型中存在着不以码为唯一性标识的实体。这显然是前后矛盾的。
那么怎样保证实体完整性呢?SQL中实体完整性是通过主码来实现的。一旦某个属性或属性组被定义为主码,该主码的每个属性就不能为空值,并且在关系中不能出现主码值完全相同的两个元组。
主码的定义是在Create
Table
语句中使用
Primary
Key关键字来实现的。方法有两种:
a)
在属性定义后加上关键字
Primary
Key;
b)
在属性表定义后加上额外的定义主码的子句:Primary
Key(<主码属性名表>)
说明:
²
如果主码仅由一个属性组成,上述两种方法都可定义,若由两个或以上的属性组成,则只能用上述第二种方法定义了。
²
对于候选码的说明方法,可以用Unique说明该属性的值不能重复出现。Unique的使用与Primary
Key相似。
²
一个表中只能有一个主码定义,但可以有多个Unique说明。
²
SQL中,并没有强制为每个关系指定主码,但为每个关系指定主码通常会更好一些。(因为主码的指定可以确保关系的实体完整性)
312
参照完整性约束与外部码
参照完整性是对关系间引用数据的一种限制。即:若属性组A是基本关系R1的外码,它与基本关系R2的主码K相对应,则R1中每个元组在A上的值必须:要么取空值,要么等于R2中某元组的主码值。
一、外部码约束的说明:
SQL中就是利用外部码的说明来实现参照完整性约束,限制表中某些属性的取值的。外部码的说明也有两种方法:
1、在该属性的说明后直接加上关键字”REFERENCES
<表名>(<属性名>)”,其中表名称为参照关系名,属性名称为参照关系的主码。
2、在Create
Table
语句的属性清单后,加上外部码说明子句,格式为:
FOREIGN
KEY
<属性名表1>
REFERENCES
<表名>(<属性名表2>)
上式中的属性名表1和属性名表2中属性可以多于一个,但必须前后对应。
二、参照完整性约束的实现策略
前面讲了,外部码的取值只有两种情况:要么取空,要么取参照关系中的主码值。可是当用户 *** 作违反了这个规则时,如何保持此约束呢?
SQL提供了三种可选方案:
1、RESTRICT(限制策略):
当用户对表进行违反了上述完整性约束、条件的插入、删除或修改 *** 作时,将会被系统拒绝。
2、CASCADE(级联策略):
当对参照关系进行删除和修改时,SQL所提供的一种方案。在这种策略下,当删除或修改参照关系中某元组的主码值时,被参照关系中,那些外部码具有该值的元组也将被删除或修改,以保证参照完整性。
3、SET
NULL(置空策略):
置空策略也是针对参照关系的删除或修改 *** 作的。在这种策略下,当删除参照关系中的某一元组或修改某一元组的主码值时,被参照关系中外码值等于该主码值的元组在该外码上的值将被置空
说明:
当用户不指定参照完整性的实现策略时,一般被默认为RESTRICT(限制策略)。实现策略的说明通常被加在外部码的说明后面,格式为:ON
DELETE
SET
NULL
ON
UPDATE
CASCADE。
313
用户自定义完整性约束
对于用户自定义完整性约束,SQL提供了非空约束、对属性的CHECK约束、对元组的CHECK约束、触发器等来实现用户的各种完整性要求。
1、非空约束:
在CRETE
TABLE
中的属性定义后面加上NOT
NULL关键字即定义了该属性不能取空值。
2、基于属性的CHECK约束
使用CHECK(检查)子句可保证属性值满足某些前提条件。其一般格式为:
CHECK(<条件>)
它既可跟在属性定义的后面,也可在定义语句中另增一子句加以说明。
如:CHECK(age>=18
AND
age<=65);
CHECK(sex
IN
(“男”,”女”));
CHECK(dno
IN(select
dno
from
department));
从上例中可以看出,CHECK子句的条件中还可以带子查询。
3、基于元组的CHECK约束
基于元组的CHECK约束往往要涉及到表中的多个域。所以它是元组约束。在对整个元组完成插入或对某一元组的修改完成之后,系统将自动检查是否符合CHECK条件表达式。若不符合条件,系统将拒绝该插入或修改 *** 作。
基于元组CHECK约束的说明方法是在CREATE
TABLE语句中的属性表、主码、外部码的说明之后加上CHECK子句。
314
约束的更新
约束与数据库中的表和视图一样,可以进行增、删、改的更新 *** 作。为了改和删约束,需要在定义约束时对其进行命名,在各种约束的说明前加上关键字CONSTRAINT
和该约束的名称即可。
例如:在employee表的create
table语句中:
eno
char(4)
CONSTRAINT
PK_employee
PRIMARY
KEY,
dno
char(4)CONSTRAINT
FK_employee
FOREIGN
KEY
REFERENCES
department(dno);
当对各种约束进行命名后,就可以用ALTER
TABLE语句来更新与属性或表有关的各种约束。如:
ALTER
TABLE
employee
DROP
CONSTRAINT
FK_employee;
ALER
TABLE
Salary
ADD
CONSTRAINT
RightSalary
CHECK(Insure+Fund<Rest);
上述的增加约束,实际上也是通过ALTER
TABLE语句定义约束的一种形式。
SQL不能直接修改约束,修改某一个约束实际上是用ALTER
TABLE
语句先删除该约束,然后再增加一个与该约束同名的新约束。
CASCADE为连锁删除,RESTRICT为约束删除,即没有对本列的任何引用时才能删除。
详情参看:
>
以上就是关于navicat中calzz依赖与什么是不是外键全部的内容,包括:navicat中calzz依赖与什么是不是外键、外键的作用是什么、关系数据库有哪几种完整性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)