当前位置: 首页 > news >正文

数据库MySQL学习——day3(主键与外键约束)

文章目录

  • 1、主键(PRIMARY KEY)
    • 1.1. 主键的概念
    • 1.2. 主键的使用
  • 2、外键(FOREIGN KEY)
    • 2.1. 外键的概念
    • 2.2. 外键的使用
  • 3、外键与数据完整性
    • 3.1. 数据完整性的概念
    • 3.2. 外键的操作与级联规则
  • 4、外键约束的删除与更新
    • 4.1. 删除外键约束
    • 4.2. 更新外键约束
  • 5、常见问题与技巧
    • 5.1. 外键约束违反错误
  • 6、今日小结

1、主键(PRIMARY KEY)

1.1. 主键的概念

  • 主键 是用于唯一标识表中每一行数据的字段。主键字段的值必须是唯一的,并且不能为空。
  • 每个表只能有 一个主键。
  • 主键通常用于查询、更新和删除操作,确保每条记录的唯一性。

1.2. 主键的使用

  • 在创建表时,可以使用 PRIMARY KEY 约束来定义主键。

  • 可以为单个字段设置主键,也可以使用多个字段(组合主键)来构成主键。

  • 示例:为学生信息表中的学生 ID 字段设置主键

CREATE TABLE student (student_id INT NOT NULL PRIMARY KEY,  -- student_id 作为主键name VARCHAR(100) NOT NULL,age INT,birth_date DATE,gpa DECIMAL(3,2)
);
  • 在此示例中,student_id 是主键,意味着每个学生的 student_id 必须是唯一的,且不能为空。

2、外键(FOREIGN KEY)

2.1. 外键的概念

  • 外键 是一个表中的字段,它链接到另一个表的主键字段,用于表示两个表之间的关系。
  • 外键约束用于确保数据的完整性,确保一个表的字段的值必须在另一个表中存在。

2.2. 外键的使用

  • 外键通常用于表示表之间的父子关系,保证子表中的数据必须在父表中有对应的记录。

  • 使用 FOREIGN KEY 约束时,我们需要指定外键字段和父表的主键字段。

  • 示例:创建一个“成绩表”,将学生 ID 设置为外键,关联到“学生表”

CREATE TABLE grade (grade_id INT NOT NULL PRIMARY KEY,student_id INT,  -- 外键字段subject VARCHAR(100),score DECIMAL(5,2),FOREIGN KEY (student_id) REFERENCES student(student_id)  -- 设定外键关联
);
  • 在这个示例中,grade 表中的student_id字段是外键,它指向student表的student_id字段,确保 grade 表中的学生 ID 必须在 student 表中存在。

3、外键与数据完整性

3.1. 数据完整性的概念

  • 数据完整性指的是数据库中的数据在逻辑上保持一致和有效。
  • 外键约束有助于保持数据的完整性,确保:
    • 参照完整性:在子表中不能出现父表中不存在的记录。
    • 删除/更新的级联:当父表中的数据被删除或更新时,子表中的数据也会相应变化,以保持数据一致性。

3.2. 外键的操作与级联规则

  • 级联删除(ON DELETE CASCADE):如果删除父表中的一行记录,自动删除子表中所有相关的记录。

  • 级联更新(ON UPDATE CASCADE):如果更新父表中的主键字段,自动更新子表中所有相关的外键字段。

  • 示例:级联删除与更新

CREATE TABLE grade (grade_id INT NOT NULL PRIMARY KEY,student_id INT,subject VARCHAR(100),score DECIMAL(5,2),FOREIGN KEY (student_id) REFERENCES student(student_id)ON DELETE CASCADE        -- 级联删除ON UPDATE CASCADE;       -- 级联更新
);
  • 在此示例中,如果删除了某个学生(父表),则 grade 表中所有与该学生相关的成绩记录也会被删除。
  • 如果更新了某个学生的 ID,grade 表中所有相关的记录会自动更新该学生的 ID。

4、外键约束的删除与更新

4.1. 删除外键约束

如果需要删除外键约束,可以使用 ALTER TABLE 来删除外键:

ALTER TABLE grade DROP FOREIGN KEY fk_grade_student;
  • fk_grade_student 是外键约束的名称(可以通过 SHOW CREATE TABLE 查看外键名称)。

4.2. 更新外键约束

外键约束一旦设置,不可以直接修改。如果需要修改,可以先删除旧的外键约束,然后重新添加新的外键约束。

5、常见问题与技巧

5.1. 外键约束违反错误

如果你在向有外键约束的表插入数据时,插入的值在父表中不存在,则会出现如下错误:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`database`.`grade`, CONSTRAINT `grade_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`))
  • 这种情况通常是由于外键字段的值在父表中没有对应的记录,确保父表中已存在相应的主键记录。

6、今日小结

技能内容
主键(PRIMARY KEY)用于唯一标识每一行记录,保证字段值唯一且不能为空。
外键(FOREIGN KEY)用于表之间的关联,保证子表的外键值在父表中有对应记录。
外键约束的级联操作ON DELETE CASCADE ON UPDATE CASCADE 保证父表数据更新或删除时,子表数据也做相应操作。
数据完整性外键约束帮助保持参照完整性,确保数据的一致性和可靠性。

相关文章:

  • 开源世界模型AETHER实战:3D决策网络的突破与填坑指南——从GitHub 2400星到产线翻车,开发者如何驾驭这场认知革命?
  • maven构建时报错:was cached in the local repository...
  • size() in vector C++
  • Mysql主从复制和读写分离
  • Linux下载与安装——笔记
  • 什么混合检索?在基于大模型的应用开发中,混合检索主要解决什么问题?
  • Lambda表达式
  • 硬件知识点-----SPI串联电阻、振铃、过冲
  • onlyoffice8.3.3发布了-豆豆容器市场同步更新ARM64版本
  • 220V降24V500mA非隔离恒压芯片WT5110
  • SFINAE(Substitution Failure Is Not An Error)
  • MySQL数据库概述
  • 【Java实战经验】泛型-类型灵活使用与限制
  • flutter 小知识
  • BERT BERT
  • Nginx 安装与配置全流程指南(2025 最新版)
  • (树状数组)洛谷 P6119/P3657 Why Did the Cow Cross the Road II G/P 题解
  • QLExpress 深度解析:构建动态规则引擎的利器
  • 摘要 | 李录在北大光华管理学院的演讲《价值投资》
  • Spark-Streaming核心编程
  • 全球84%的珊瑚礁已遭受白化事件影响
  • 中美正在就关税问题谈判甚至会达成协议?外交部:都是假消息
  • 从“龙队”到“龙副主席”,国乒这批退役球员为何不当教练了
  • 生态环境部:我国正在开展商用乏燃料后处理厂的论证
  • 上海银行换帅:顾建忠出任党委书记,金煜辞任董事长
  • 受贿超8.22亿元,新疆维吾尔自治区党委原副书记李鹏新一审被判死缓