建立数据库外键需在创建表时使用 FOREIGN KEY 关键字定义,或通过 ALTER TABLE 添加约束,确保外键列数据类型与主表主键一致。表间关联技巧包括一对一、一对多及多对多关系,多对多需建立中间表。高效管理数据需依靠主键、外键及唯一键三重保障,设置级联更新或删除规则(如 CASCADE)可维护数据一致性,避免无效关联,同时利用约束规则防止错误操作,确保数据库结构清晰稳固。
数据库入门开发案例,真的是入门级别的!!看了不后悔。
数据库入门开发案例,真的是入门级别的!!看了不后悔。\n(如一个学生对应一个档案,一个档案对应一个学生。学生表为 A 表,档案表为 B 表) 唯一外键方式:在 A 和 B 任意一表中添加唯一外键 (注意是添加完外键后,再点唯一键,进行设置) 具体方式点此。(注意是“我们就认为”,数据库中并没有提供主键关联的约束方式。) 中间关系表:创建一张新表作为中间关系表,两个列分别记录 A 和 B,并且每一列的取值中,值均不能重复 (即将这两列均设置为唯一外键,注意:将这两列“既设置为主键,又设置为外键”的方式不能实现该功能,因为可能会出现一列相等而另一列不相等的情况)。 (如一个班级对应多个学生) 1 在多的一方添加外键:在学生表中添加一列,记录该学生是哪一个班的,该列设置成外键,取值为班级表的主键。2 建立中间表:创建一个新表,该表至少有两列,分别记录学生和班级。学生列要设置成为“外键 + 唯一键”,以防有两行数据的学生列的值一样 (防止一个学生有两个班级的情况出现)。班级列不必设置成唯一键,设置成为外键即可,因为不同学生可以有一样的班级。 (学生和课程:一个学生可以选多门课,一门课可以由多个学生选) 两列均为外键,一列取值为学生表中的唯一标识,一列取值为课程中的唯一标识。两列不用设置成为唯一键,因为每一列中均可有重复,但不能有两行数据在两列上完全重复。所以将两列均设置成为主键 + 外键 (即联合主键 + 外键) 2) 针对目前疫情的情况,为某个小区设计一个人员管理的系统。3) 为教务处开发一个教室管理的系统。关系模式:Student(Sid,Sname,Sgrade,Sclass,Smajor,Ssex):学生信息表 Teacher(Tid,Tname,Tdep):教师信息表 Course(Cid,Cno,Cname,Cscore):课程信息表 TC(Tid,Cid,Cno):教师课程关系表 (均为外码) SC(Sid,Cid,Cno,Scj):学生课程成绩关系表 (均为外码) Creat database StuGrade;use StuGrade--建立一个学生信息表 CREATETABLEStudent(SidCHAR(10)PRIMAR
外键
外键\n外键 (foreign key) 是数据库术语,指一个表中引用另一表主键或唯一约束的属性列,用于建立表间关联关系,保障数据完整性。主键所在表称为被参照表,外键所在表称为参照表,外键约束确保参照表插入数据时必须存在被参照表的对应主键。外键功能包括控制数据一致性、防止无效关联,典型应用如学生表与成绩表通过学号建立关联。外键定义要求属性域与被引用主键匹配,但名称可不相同。在 SQL 中通过 FOREIGN KEY 关键字创建,支持级联更新、限制操作等触发规则。外键约束可临时禁用以实现特殊数据操作,恢复后继续保障数据完整性。外键列允许空值,但若为空则跳过验证;自引用表中外键可指向同一表的主键。创建外键时需区分主键表与外键表,支持在现有表中添加约束,同一表可含多个外键。数据库引擎默认检查现有数据是否符合约束,通过 WITH NOCHECK 可跳过检查。中文名:外键 外文名:foreign key 别名:外码 应用学科:数据库 作用:保持数据一致性,完整性 定义 设 F 是基本关系 R 的一个或一组属性,但不是关系的键,Ks 是基本关系 S 的主键。如果 F 与 Ks 相对应,则称 F 是 R 的外键,并称基本关系 R 为参照关系,基本关系 S 为被参照关系或目标关系。换而言之,如果关系模式 R 中的某属性集不是 R 的主键,而是另一个关系 R1 的主键则该属性集是关系模式 R 的外键,通常在数据库设计中缩写为 F。在实际操作中,将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值 (在必要时可包括复合主键值)。此时,第二个表中保存这些值的属性称为外键 (foreign key)。显然目标关系的主码和参照关系的外码必须定义在一个或同一组的域上。关系 R 和 S 不一定是不同的关系,即外键不一定要与相应的主键同名。如在学生 (学号,姓名,性别,专业号,年龄,班长) 关系中,“学号”是主键,“班长”属性表示该学生所在班级的班长的学号,它引用了本关系中“学号”属性,因此“班长”是外键,这里学生关系既是参照关系也是被参照关系。不过在实际应用中为了便于识别,当主键与相应的外键属于不同关系时,往往取相同的名字。作用 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。使两张表形成关联,外键只能引用外表中的列的值或使用空值。学号在成绩表 (表 2) 中是主键,在学生表 (表 1) 中是外键。如果不使用外键,表 1 的学号字段插了一个值 (比如 20140999999),但是这个值在表 2 中并没有,这个时候,数据库允许插入,并不会对插入的数据做关系检查。然而在设置外键的情况下,插入表 1 学号字段的值必须要求在表 1 的学号字段能
MySQL 数据库中外键 (foreign key) 用法详解
MySQL 数据库中外键 (foreign key) 用法详解\n1. 创建表时定义外键 创建表时,可以通过 FOREIGN KEY 关键字来定义外键约束。代码语言:javascript AI 代码解释 orders 表中,customer_id 列是外键,指向 customers 表的 customer_id 列。REFERENCES 后面是目标表和列。2. 创建外键时指定约束名称 你也可以给外键约束命名,方便管理和调试。代码语言:javascript AI 代码解释 这里 fk_customer 是外键约束的名称。3. 添加外键到已有表中 如果表已经创建,你也可以通过 ALTER TABLE 语句来添加外键约束。代码语言:javascript AI 代码解释 外键的约束选项 在定义外键时,可以使用以下几种约束选项来控制外键的行为:ON DELETE:指定删除父表数据时,子表数据的处理方式。CASCADE:删除父表数据时,自动删除子表中与之相关的数据。SET NULL:删除父表数据时,将子表中相关的数据设置为 NULL。RESTRICT:不允许删除父表数据,如果有子表数据依赖于该父表数据。NO ACTION:与 RESTRICT 相同,但不同的是,NO ACTION 在查询时不会有显式限制。SET DEFAULT:如果父表数据被删除,子表中的外键字段将被设置为其默认值。ON UPDATE:指定更新父表数据时,子表数据的处理方式。与 ON DELETE 选项类似,支持 CASCADE、SET NULL、RESTRICT、NO ACTION 等。示例 代码语言:javascript AI 代码解释 在这个例子中,ON DELETE CASCADE 表示删除父表 customers 中某个客户时,所有相关的订单也会被自动删除。ON UPDATE CASCADE 表示如果 customers 表中的 customer_id 被更新,orders 表中所有相关的 customer_id 也会自动更新。外键约束的基本要求 数据类型一致性:外键列的数据类型必须与目标列的数据类型完全一致 (包括长度、类型、符号等)。
主键、外键和约束:让数据库“有规矩”才能不出错!| 转行学 DB 第 5 天
主键、外键和约束:让数据库“有规矩”才能不出错!| 转行学 DB 第 5 天\n一、为什么数据库需要“规矩”没有红绿灯和斑马线,马路上会乱成什么样?数据也一样。约束就是数据库给表里的数据定下的规则,违反规则的操作会被直接拒绝。新手阶段,主键和外键是最常用也最重要的,我重点讲。二、主键:每条数据的“身份证”主键就是表中每一行数据的唯一标识。就像每个人都有身份证号,不会重复。建表时设置主键 CREATE TABLE students ( id INT PRIMARY KEY, -- 这列就是主键 name VARCHAR(50) ); 主键的规矩 不能重复:插两条 id=1 的数据会报错 不能为空:不写 id 也会报错 一张表只能有一个主键 (但可以由多列组成,叫联合主键) 💡 小技巧:很多表会用 id 作为主键,然后设置 AUTO_INCREMENT(自动递增),这样插入时不用自己写数字,数据库自动给。CREATE TABLE students ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) ); 我踩过的坑 第一次建表忘了设主键,结果插入了两条一模一样的学生记录。后面想删除一条,发现没法区分它们……后来才知道,每张表都应该有一个主键。三、外键:两张表之间的“锁链”外键是用来连接两张表的。比如:学生表 (主表):存放学生基本信息 成绩表 (从表):每个学生有多条成绩记录 成绩表里需要记录“这个成绩属于哪个学生”,于是存学生表的 id。这个 student_id 就是外键——它指向学生表的主键。建表时设置外键 – 学生表 (主表) CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50) ); – 成绩表 (从表) CREATE TABLE scores ( id INT PRIMARY KEY, student_id INT, score INT, FOREIGN KEY (student_id) REFERENCES students(id) ); 外键的规矩 插入成绩时:student_id 必须在学生表里存在,否则报错
FAQ
外键约束有哪些作用?
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。使两张表形成关联,外键只能引用外表中的列的值或使用空值。
创建外键时需要注意什么?
外键中列的数据类型必须和主表主键列的数据类型相同。主键不能包含空值,但允许在外键中出现空值。
删除父表数据时子表如何处理?
可以使用 CASCADE 自动删除子表数据,SET NULL 设置为空,或 RESTRICT 不允许删除。