文章目录
[第一章 · MySQL 外键与约束](#第一章 · MySQL 外键与约束)
[1.1 外键是干啥的?](#1.1 外键是干啥的?)
[1.2 约束 · 字段级别把关](#1.2 约束 · 字段级别把关)
[第二章 · TCP 与 UDP 协议](#第二章 · TCP 与 UDP 协议)
[2.1 TCP · 像打电话一样靠谱](#2.1 TCP · 像打电话一样靠谱)
[2.2 UDP · 像寄信一样快](#2.2 UDP · 像寄信一样快)
[2.3 TCP vs UDP · 一张表分清楚](#2.3 TCP vs UDP · 一张表分清楚)
概述
上回我们讲了 MySQL 的增删改查和用户权限------数据能存了,账号能管了。
但有个问题:你往订单表里插数据的时候,能不能随便写一个用户 ID?万一那个用户压根不存在呢?数据不乱套了。还有,用户的年龄能不能填 -18?能不能填 999?这明显不合理,但 MySQL 默认都让你填。
外键和约束就是专门管这两件事的------让数据长点脑子,别什么乱七八糟的都往里塞。
数据存好了,问题又来了:你的 Python 程序在本地,数据库在云服务器上,它们怎么通信?靠网络。网络传输里有两个最基础的协议:TCP 和 UDP。
今天一篇搞定这两块,开整。
第一章 · MySQL 外键与约束
1.1 外键是干啥的?
一句话:防止乱填关联字段。
你有一个 users 表和一个 orders 表,每个订单都属于某个用户。如果 orders.user_id 填了 999 而 users 表里压根没这人,那数据就脏了。
外键的作用:插入订单时,必须保证 user_id 在 users 表里真实存在,否则直接拒绝。
sql
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
amount DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
FOREIGN KEY (user_id) REFERENCES users(id)的意思是:orders.user_id必须是users.id里有的值,不能瞎填。
外键的两个常用选项:
| 选项 | 效果 |
|---|---|
ON DELETE CASCADE |
用户删了,订单自动跟着删,省得你手动清理 |
ON DELETE SET NULL |
用户删了,订单的 user_id 自动变成 NULL,留着当历史记录 |
1.2 约束 · 字段级别把关
除了外键,MySQL 还有五种内置约束,帮你在字段级别把关:
| 约束 | 作用 | 示例 |
|---|---|---|
NOT NULL |
不准空着 | name VARCHAR(50) NOT NULL |
UNIQUE |
不能重复 | email VARCHAR(100) UNIQUE |
PRIMARY KEY |
主键(唯一 + 非空) | id INT PRIMARY KEY |
DEFAULT |
默认值 | age INT DEFAULT 18 |
CHECK |
自定义条件 | age INT CHECK (age >= 0 AND age <= 150) |
最容易被忽略的是 CHECK------它能挡住明显不合理的数据,比如负数的年龄。让你的表自己替你把关,不用每次插数据都靠人工提醒。
第二章 · TCP 与 UDP 协议
2.1 TCP · 像打电话一样靠谱
TCP 是面向连接的、可靠的、按序到达的传输协议。
先建立连接再通信(三次握手) 丢包就重传,保证数据完整先发的先到,不会乱序
什么时候用 TCP? 需要数据完整、准确、不丢的时候:
| 场景 | 原因 |
|---|---|
| 网页(HTTP/HTTPS) | 网页缺一块就显示不全 |
| 文件传输(FTP) | 文件丢一个字节就坏了 |
| MySQL 连接 | 数据不能丢 |
2.2 UDP · 像寄信一样快
UDP 是无连接的、不可靠的、不保证顺序的传输协议。
不用握手,直接发 丢了就丢了,不重传先发的不一定先到速度快,开销小
什么时候用 UDP? 追求速度快、延迟低的场景:
| 场景 | 原因 |
|---|---|
| 视频直播 | 偶尔花一帧无所谓,卡顿才烦人 |
| 在线游戏 | 延迟比丢包更致命 |
| DNS 查询 | 丢包了再问一次就行 |
2.3 TCP vs UDP · 一张表分清楚
| 对比 | TCP | UDP |
|---|---|---|
| 连接 | 有连接(先握手) | 无连接(直接发) |
| 可靠性 | 可靠,丢包重传 | 不可靠,丢了不管 |
| 顺序 | 按序到达 | 可能乱序 |
| 速度 | 慢 | 快 |
| 场景 | 网页、文件、数据库 | 直播、游戏、视频 |
总结
今天的内容分两块:
MySQL 外键与约束------外键管关联字段不乱填,CHECK 挡不合理数据进门,NOT NULL 不让你空着手。几条约束加上去,MySQL 就从"无脑存数据的仓库"变成了"替你操心的管理员"。
TCP 与 UDP------TCP 像打电话,先拨号再说话,保证对方听清每一句;UDP 像寄信,写地址扔邮筒,不管收没收到。要可靠选 TCP,要速度选 UDP。
下期见。🗄️🌐