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 程序在本地,数据库在云服务器上,它们怎么通信?靠网络。网络传输里有两个最基础的协议:TCPUDP

今天一篇搞定这两块,开整。

第一章 · MySQL 外键与约束

1.1 外键是干啥的?

一句话:防止乱填关联字段。

你有一个 users 表和一个 orders 表,每个订单都属于某个用户。如果 orders.user_id 填了 999users 表里压根没这人,那数据就脏了。

外键的作用:插入订单时,必须保证 user_idusers 表里真实存在,否则直接拒绝。

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。

下期见。🗄️🌐

相关推荐
小程序设计5 小时前
linux防火墙研究与实现
网络·安全
IpdataCloud5 小时前
高可用的IP数据接口平台有哪些?从可用性、P99延迟到离线部署的评估框架(含代码)
数据库·tcp/ip·ip
数据知道5 小时前
加密流量分析——JA3 指纹、TLS 指纹识别与规避
网络·安全·网络安全·密码学
呆萌很6 小时前
MySQL 数据库和表的管理操作(命令行)
数据库·mysql
网硕互联的小客服6 小时前
各个版本的Linux系统如何修改远程端口ssh端口?
linux·运维·服务器·网络
小程序设计6 小时前
Wi-Fi网络监控及无线终端定位系统的研究
网络·安全
毕业设计7036 小时前
(免费领源码)基于Python的博物馆研学活动管理系统的设计与实现22724- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·mysql·随机森林·pycharm·django·flask·推荐算法
Wang's Blog8 小时前
Java框架快速入门: Spring Security+OAuth2之RBAC与角色分层实践
java·网络·spring
Sophnet云平台8 小时前
2026:AI Agent应用元年,企业从试点到核心业务的跨越逻辑
网络·人工智能·llm·openai·agent
咏颜8 小时前
frp内网穿透使用
网络·p2p