MySQL 与网络基础 · 外键约束及 TCP/UDP 协议

文章目录

概述

[第一章 · 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。

下期见。🗄️🌐

相关推荐
于指尖飞舞4 分钟前
mysql和redis面试题总结
数据库·redis·mysql
ao-weilai10 分钟前
MySQL数据库:复合查询
android·数据库·mysql
FYKJ_201019 分钟前
SpringSecurity教室智能预约系统73972-计算机课程设计、毕业设计
java·vue.js·spring boot·python·mysql·spring·django
要开心吖ZSH30 分钟前
系统并发与 QPS 上限:从 200 个线程到每秒几万请求
redis·mysql·tomcat·并发·连接池·qps
FYKJ_201044 分钟前
springboot游泳馆管理系统79222-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·mysql·django·课程设计
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】C++ ChatSDK使用手册
开发语言·网络·c++·人工智能·学习·大模型
闲云自留地3 小时前
主库倒下 30 秒自动扶正:MySQL MHA 高可用实战
数据库·mysql
XiaoMaqqqq11 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
ShyanZh12 小时前
【Python3基础】19-Socket 与 TCP、UDP 编程
python·网络协议·tcp/ip·udp
汤姆yu13 小时前
Gemini 4 Argon模型综述:技术、能力与实际使用指南
网络·安全·web安全·ai·大模型