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 = 阻止)。想要修改,必须先把当前表里的相关记录清空或改掉。
相关推荐
依然范特东13 小时前
RAG学习总结3--检索技术
笔记·学习
Csvn14 小时前
📊 SQL 入门 Day 2:排序与去重 — 让数据有序呈现
sql
白帽小阳14 小时前
[特殊字符]【2026最新】零基础入门学网络安全(详细路线图),看这篇就够了!
学习·安全·web安全·网络安全·安全运营·学习路线·web渗透
QQ骞14 小时前
【ECU-HIL 嵌入式车载软件测试学习路线和面试描述方式(1)】
学习·面试·职场和发展
鸽子一号15 小时前
c#之信号量Semaphore
笔记
kdxiaojie15 小时前
Linux 驱动研究 —— I2C (5)
linux·运维·笔记·学习
会周易的程序员15 小时前
从零构建多核CPU负载自适应控制系统
linux·c++·笔记·物联网·测试工具
龙仔72516 小时前
SQL Server 批量多库只读账号一键脚本(带逐行注释完整脚本 + 分段逐句详细解释)
服务器·数据库·sql·sqlserver·dba
茯苓gao16 小时前
机器人产业的三级火箭:卖电机、卖模组与卖整机,三种商业模式的终局推演
笔记·学习·机器人
mm99542017 小时前
PMI三大证书:PMP、PgMP、PfMP证书对比
学习·职场和发展·项目管理·学习方法·pmp