SQL 表结构定义(索引与约束)学习笔记一——索引、外键与级联约束

📖 SQL 表结构定义学习笔记一

【代码总览】

sql 复制代码
PRIMARY KEY (`id`) USING BTREE,
KEY `fk_brls2_cc` (`carrier_code_id`) USING BTREE,
KEY `fk_loading_seq_ac_reg` (`ac_reg_id`) USING BTREE,
CONSTRAINT `fk_brls2_cc` FOREIGN KEY (`carrier_code_id`) REFERENCES `base_carrier_codes` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `fk_loading_seq_ac_reg` FOREIGN KEY (`ac_reg_id`) REFERENCES `base_carr_reg_no` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT

这段代码通常出现在 CREATE TABLE 的尾部,用于定义当前表的主键普通索引 以及外键约束


逐行/逐词详细拆解

第一行:定义主键

复制代码
PRIMARY KEY (`id`) USING BTREE,
  • PRIMARY KEY
    • 含义:主键声明。
    • 作用 :用来唯一标识表中的每一行记录。主键列的值必须唯一,且绝对不能为 NULL
  • (id)
    • 含义 :指定当前表的主键列名为 id
    • 反引号( :这是 MySQL 中的标识符引用符。它的作用是防止列名(或表名)与数据库的保留关键字冲突。养成加反引号的习惯是个好习惯。
  • USING BTREE
    • 含义 :指定底层使用 B-Tree(B树/B+树) 数据结构来构建这个索引。
    • 作用 :B-Tree 是关系型数据库中最常用的索引结构,非常适合"精确匹配"和"范围查找"(比如 id > 10)。
  • ,(逗号)
    • 含义:语法分隔符。表示这一个定义结束,后面还有其他定义。

第二、三行:定义普通索引(辅助查询)

复制代码
KEY `fk_brls2_cc` (`carrier_code_id`) USING BTREE,
KEY `fk_loading_seq_ac_reg` (`ac_reg_id`) USING BTREE,

这两行结构完全一样,我们以第一行为例:

  • KEY
    • 含义 :在 MySQL 中,KEYINDEX(索引)的同义词。出现在这里表示"我要创建一个普通索引"。
  • fk_brls2_cc
    • 含义 :这是你给这个索引取的名字
    • 命名规范 :前缀 fk_ 通常代表 Foreign Key(外键),这说明设计者特意为后面的外键列建了索引,方便日后管理和排查。
  • (carrier_code_id)
    • 含义 :指定该索引要建在哪个具体的列上。这里是建在 carrier_code_id 列上。
  • USING BTREE
    • 含义 :同样指定使用 B-Tree 算法构建索引,加快基于 carrier_code_id 的查询速度。

第四、五行:定义外键约束(保证数据逻辑)

复制代码
CONSTRAINT `fk_brls2_cc` FOREIGN KEY (`carrier_code_id`) REFERENCES `base_carrier_codes` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT

(注:第五行逻辑同第四行,故此处只剖析第四行)

这是最长、包含信息最多的一行,定义了表与表之间的生死契约。

  • CONSTRAINT
    • 含义:声明一个"约束"。约束是数据库用来强制执行数据校验规则的机制。
  • fk_brls2_cc
    • 含义 :这个约束的名字。注意,这里约束的名字和上面索引的名字一样,这在 MySQL 中是允许且常见的,方便统一管理。
  • FOREIGN KEY
    • 含义:指明这个约束的类型是"外键约束"。
  • (carrier_code_id)
    • 含义 :指定当前表中,哪一列充当外键。
  • REFERENCES
    • 含义:"引用"关键字。用来指向目标表(父表)。
  • base_carrier_codes
    • 含义:目标表(父表)的名字。当前表的数据要依赖这张表。
  • (id)
    • 含义:目标表(父表)中的列名。通常被引用的都是父表的主键。
    • 整体翻译 :当前表的 carrier_code_id 里面的值,必须在 base_carrier_codes 表的 id 列中真实存在。
  • ON DELETE CASCADE
    • 含义 :删除时的触发动作(级联删除)。
    • 作用 :如果有人在 base_carrier_codes 表里删除了某条 id 记录,那么当前表里所有 carrier_code_id 等于那个 id 的记录,都会被数据库自动无声无息地删除
  • ON UPDATE RESTRICT
    • 含义 :更新时的触发动作(限制/拒绝更新)。
    • 作用 :如果有人想修改 base_carrier_codes 表里某个 id 的值,但当前表里已经有记录引用了这个 id,数据库会直接报错并拒绝这次修改(RESTRICT = 阻止)。想要修改,必须先把当前表里的相关记录清空或改掉。
相关推荐
二等饼干~za8986682 小时前
豆包GEO优化源码开发全解析:技术架构、实现逻辑与实操指南
数据库·sql·重构·架构·mybatis·音视频
鹓于3 小时前
Notion AI,智能笔记
笔记·notion
光影少年3 小时前
平时如何学习新技术?
后端·学习·前端框架
一定要AK3 小时前
java基础
java·开发语言·笔记
快乐非自愿3 小时前
MySQL优化全攻略:索引、SQL与分库分表的最佳实践
android·sql·mysql
lizhihai_993 小时前
股市学习心得-龙头持股法
学习
HenbCode3 小时前
# Hive 性能优化实战
sql·apache hive
知识分享小能手4 小时前
MongoDB入门学习教程,从入门到精通,MongoDB事务知识点梳理(8)
数据库·学习·mongodb
xw-busy-code4 小时前
npm 包管理笔记整理
前端·笔记·npm