1.DDL数据定义语言

DDL是什么——————创建、修改、删除 数据库和表结构的命令。

基本语法

针对数据库的操作

-- 创建数据库
CREATE DATABASE 数据库名;
-- 比如
CREATE DATABASE myschool;
--查看所有数据库
SHOW DATABASES;
--使用某个数据库
USE myschool;
-- 删除数据库//需谨慎
DROP DATABASE myschool;

针对表的操作

-- 创建表
CREATE TABLE 表名 (字段名1 数据类型,字段名2 数据类型,...
);
-- 比如
CREATE TABLE LI(
name VARCHAR(10),
age INT,
hobby VARCHAR(20);
)--1.2.2 数据类型(常用)
--表格
--复制
--类型	说明	例子
--INT	整数	10, 20
--VARCHAR(n)	字符串	'张三'
--DATE	日期	'2025-08-09'
--FLOAT	小数	3.14--查看当前数据库的所有表
SHOW TABLES;
--查看表结构
DESC students;
--删除表
DROP TABLE students;-- 修改表结构(ALTER)
--添加一列
ALTER TABLE students ADD COLUMN email VARCHAR(50);
--删除一列
ALTER TABLE students DROP COLUMN email;
--修改列名或类型
ALTER TABLE students CHANGE COLUMN name fullname VARCHAR(30);
-- COLUMN :列  ALTER ;改变
--“建库用 CREATE,看库用 SHOW,用库写 USE,删库要小心!”
--“建表写 CREATE TABLE,看表结构用 DESC,改表结构用 ALTER。”

小练习

1.创建一个数据库叫 testdb
2.创建一个表叫 users,字段有:id INT,username VARCHAR(20)
3.查看表结构
4.添加一个字段 email VARCHAR(50)
5.删除这个表

1
CREATE DATABASE testdb;
2
CREATE TABLE users(
id INT,
username VARCHAR(20)
);
3
DESC users;
4 
ALTER TABLE users ADD COLUMN email VARCHAR(50);
5
DROP TABLE users;

2.DML (Data Manipulation Language)数据操纵语言

核心语法

插入数据(INSERT)

假设我们已经有了这张表

CREATE DATABASE testdb;
USE testdb;CREATE TABLE users (id INT,username VARCHAR(20),email VARCHAR(50)
);

但是现在我们想给这个数据库表插入数据我们可以选择运行

-- 单个数据插入
INSERT INTO users (id, username, email)
VALUES 
(1, '张三', 'zhangsan@qq.com');

这样子我们就有了张三这个数据库实例

当然一个一个添加太麻烦了我们可以批量添加

-- 多个数据插入
INSERT INTO users (id, username, email)
VALUES 
(2, '李四', 'lisi@qq.com'),
(3, '王五', 'wangwu@qq.com');

相对于来说就是加个逗号结尾还是用常规结束符;
我们也可以选择插入部分字段(其余为NULL)

-- 插入部分字段(其余为NULL)
INSERT INTO users (id, username)
VALUES (4, '赵六');
数据修改(UPDATE)
UPDATE users
SET email = 'new_email@qq.com'
WHERE id = 1;-- 意为修改id=1 的email为'new_email@qq.com'
数据删除(DELETE)
--从users表中删除一个id=4的数据
DELETE FROM users
WHERE id = 4;
练习

1插入 3 个用户:张三、李四、王五
2把张三的邮箱改成 zhangsan@new.com
3删除王五
4查看剩下的人

1
INSERT INTO users(username)
VALUES
('张三'),
('李四'),
('王五');
2
UPDATE users SET email ='zhangsan@new.com' WHERE username ='张三'
3
DELETE FROM users WHERE username ='王五'
4
SELECT * FROM users;

3.约束

什么是约束?

约束就是给表里的字段加“规矩”,让数据不能乱填,保证数据的正确性和一致性

3.1主键约束(PRIMARY KEY)

作用:唯一标识一条记录(就像身份证号)
要求:不能重复,不能为 NULL
通常配合:AUTO_INCREMENT(自动增长)(常用于id)

-- id 会自动从 1、2、3……往上加,保证每个学生都有独一无二的编号。
CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT
);

联合主键

由多个列组成的主键称为联合主键:

CREATE TABLE student (
student_id INT,
seat_id INT ,
...
PRIMARY KEY (student_id,seat_id))

修改表结构添加主键

ALTER TABLE student ADD PRIMARY KEY(cours_id )

删除主键

ALTER TABLE student  DROP PRIMARY KEY;

3.2非空约束(NOT NULL)

作用:这个字段必须填,不能空着

name VARCHAR(20) NOT NULL
-- 如果你插入数据时不写 name,就会报错!

3.3唯一约束(UNIQUE)

作用:这个字段的值不能重复

email VARCHAR(50) UNIQUE
-- 两个人的邮箱不能一样,否则会报错。

3.4默认值约束(DEFAULT)

作用:如果你不填这个字段,就用默认值

age INT DEFAULT 18
-- 插入数据时不写 age,MySQL 自动填 18。

3.5零填充约束(ZEROFILL)!! mysql8.0以后版本已删除

作用:数字前面自动补 0

student_number INT(4) ZEROFILL
-- 插入 1,实际显示 0001;插入 25,显示 0025。

3.6自增约束(AUTO_INCREMENT)

作用:每次插入数据,自动加 1
只能用于:整数类型,并且必须是 主键 或 唯一键

id INT PRIMARY KEY AUTO_INCREMENT
-- 你不需要手动写 id,MySQL 帮你自动填。

3.7外键约束(FOREIGN KEY) (重点)!!!

作用:让两个表产生“关联”,保证数据一致性

class_id INT,
FOREIGN KEY (class_id) REFERENCES classes(id)
-- 学生表里的 class_id 必须是班级表里已经存在的 id,否则插不进去。

一、想像两份 Excel 表
班级表

idclass_name
1三年二班
2四年一班

学生表

idnameclass_id
1张三1 → 指向三年二班
2李四2 → 指向四年一班
3王五99 → ❌ 指向一个根本不存在的班级!

如果允许王五这条记录存在,数据就“脏”了。
外键的作用就是:
“students 表里的 class_id 只能填 classes 表里已经出现过的 id”

我们先创建一个父表

CREATE TABLE classes (id   INT PRIMARY KEY AUTO_INCREMENT,class_name VARCHAR(20)
);

再建(子表),并声明外键

CREATE TABLE students (id       INT PRIMARY KEY AUTO_INCREMENT,name     VARCHAR(20) NOT NULL,class_id INT,-- 外键声明:students.class_id 必须来自 classes.idCONSTRAINT fk_stu_clsFOREIGN KEY (class_id) --外键REFERENCES classes(id)
);

说明:
• fk_stu_cls 是外键的名字,可以随便取,最好见名知意。
• 数据类型必须一致:students.class_id 与 classes.id 都是 INT。
在这里插入图片描述
在这里插入图片描述
一对多关系-创建外键约束

CREATE TABLE  father_table (
id INT PRIMARY KEY,
son_id INT 
);
CREATE TABLE son_table (
id INT PRIMARY KEY ,
father_id INT,
FOREIGN KEY (father_id) REFERENCES father_table(son_id)
);.

在这里插入图片描述

练习1:外键创建

创建一个
orders 订单表,包含订单ID、订单号、客户ID、订单日期字段,其中客户ID作为外键引用
customers 表的主键。

练习2:外键验证

向e
mployees 表中插入一条dept_id为100的记录,会发生什么?为什么?

练习3:复合外键

如何创建一个
order_items 表,使其包含订单ID和产品ID两个外键,分别引用
orders 和
products
表?

删除外键


-- 查看表
SHOW CREATE TABLE 表名;
-- 删除外键
ALTER TABLE 表名 DROP  FOREIGN KEY 外键名;

4.查询

DQL = Data Query Language,就是用来 查询数据 的语言。它的核心命令是 SELECT。

简单查询

-- 查询表的所有列
SELECT * FROM studentl;
-- 查询指定列
SELECT name, age, id FROM student
-- 给予列别名
SELECT name AS 姓名 , age AS 年龄,  her AS MY_LOVE FROM student;-- 去重
SELECT DISTINCT id  FROM student;

条件查询(WHERE 子句)

在这里插入图片描述

-- 等于
SELECT * FROM students WHERE age = 18;
-- 不等于
SELECT * FROM LOVE WHERE age != 20;
-- 大于
SELECT * FROM students WHERE score > 80;-- BETWEEN...AND
SELECT * FROM LOVE WHERE lover BETWEEN she love me AND I love she ;
-- IN 
SELECT * FROM TOBELOVE WHERE  IAM IN her heart;
-- IS NULL
SELECT * FROM  why_she WHERE my-heart IS NULL ;
-- 逻辑运算符
SELECT * FROM LOVE WHERE me = 'Remance' AND me = 'rich' AND	 me = 'love she '

常用查询

排序查询
-- 升序 上小下大
SELECT * FROM  MYBRO ORDER BY AGE ASC;
-- 降序 上大下小
SELECT * FROM  MYBRO ORDER BY AGE DESC;
-- 多列排序
SELECT * FROM students ORDER BY id ASC, age DESC;

聚合查询

在这里插入图片描述

-- 统计总数
SELECT COUNT(*) AS 好友总数 FROM friends;
-- 统计我列表的男性总数
SELECT COUNT(*) AS 我的好兄弟有多少 FROM friends WHERE  gender = '男'-- 计算平均身高
select COUNT(*) AS 平均身高 FROM  men_high;
-- 计算总成绩
SELECT SUM(score) AS 总成绩 FROM students;
-- 最高分和最低分
SELECT MAX(score) AS 最高分, MIN(score) AS 最低分 FROM students;

聚合查询-null值处理
COUNT(*) 包含NULL值的行
COUNT(列名) 不包含NULL值的行
SUM、AVG、MAX、MIN 忽略NULL值

分组查询

分组查询: GROUP BY 列名;
分组后筛选: HAVING 条件;

-- 按班级分组,统计每个班级的学生数量
SELECT class_id, COUNT(*) AS 学生数量 FROM students GROUP BY class_id;
-- 按班级分组,计算每个班级的平均成绩
SELECT class_id, AVG(score) AS 平均成绩 FROM students GROUP BY class_id;
-- 分组后筛选,只显示学生数量大于2的班级
SELECT class_id, COUNT(*) AS 学生数量 FROM students GROUP BY class_id HAVING COUNT(*) >2; 
分页查询

核心内容
分页查询: LIMIT 偏移量, 每页数量;
偏移量从0开始

-- 每页显示2条数据,查询第一页
SELECT * FROM students LIMIT 0, 2;
-- 每页显示2条数据,查询第三页
SELECT * FROM students LIMIT 2, 2
练习题
  1. 什么是约束?MySQL支持哪些类型的约束?
 约束 是一组规则,用于限制表中数据的类型、取值范围或数据之间的关系,从而保证数据的完整性和一致性
约束类型关键字作用说明
主键约束PRIMARY KEY唯一标识每一行记录,不能为 NULL,且不能重复。
唯一约束UNIQUE保证某列或某组合列的值唯一,但允许 NULL(不同版本对 NULL 的处理略有差异)。
非空约束NOT NULL禁止该列的值为 NULL。
默认值约束DEFAULT当未指定值时,自动使用默认值。
外键约束FOREIGN KEY建立表与表之间的关系,确保引用完整性(子表中的值必须在父表中存在)。
检查约束CHECK限制列中的值必须满足特定条件(MySQL 8.0.16+ 才支持,早期版本语法支持但无效)。
  1. 简述主键约束和唯一约束的区别。
对比项主键约束(PRIMARY KEY)唯一约束(UNIQUE)
是否允许 NULL不允许允许(可有多条 NULL)
表中个数只能有 1 个(或复合主键 1 组)可以有多个
用途唯一标识整行记录仅保证列值不重复
自动索引自动创建聚簇索引自动创建二级索引
  1. 自增约束有哪些特点?

  2. 在这里插入图片描述

  3. 编写SQL语句,查询students表中年龄大于20且成绩大于85的学生信息。

SELECT * FROM students WHERE age > 20 AND grand > 85;
  1. 编写SQL语句,按班级分组,统计每个班级的学生数量和平均成绩,并按平均成绩降序排序。
SELECTclass_id,COUNT(*)  AS student_count,AVG(score) AS avg_score
FROMstudents
GROUP BYclass_id
ORDER BYavg_score DESC;
  1. 编写SQL语句,查询students表中成绩排名前3的学生信息
SELECT *
FROM students
ORDER BY score DESC
LIMIT 3;

联合查询

联合查询是同时查询多个表中的数据,包括

交叉连接(CROSS JOIN)

交叉连接(CROSS JOIN)是 SQL 中最简单、最暴力的一种多表查询方式。它把左表的每一行和右表的每一行全部拼在一起,形成一张“大表”。
实际生产中很少直接使用,除非:
你想生成笛卡尔积(例如做组合测试、穷举所有配对)。
两张表本来就很确定只有 1 行(比如常量表)。

语法示例
-- 显式写法
SELECT *
FROM A
CROSS JOIN B;-- 隐式写法(逗号分隔,效果相同,但不推荐)
SELECT *
FROM A, B;
内连接查询

内连接(INNER JOIN)是关系型数据库里最常用、最“安全”的连接方式。它只保留两张表中满足连接条件的行,其余全部丢弃,因此结果集不会爆炸,语义也最贴近“匹配”这一业务需求。

SELECT * FROM table1 INNER JOIN table2 ON 连接条件;-- 或
SELECT * FROM table1 JOIN table2 ON 连接条件;-- 或(隐式内连接)
SELECT * FROM table1, table2 WHERE 连接条件-- 显式内连接
SELECT e.id, e.name, d.name AS dept_name, e.salary 
FROM employees e INNER JOIN departments d 
ON e.dept_id = d.id;-- 隐式内连接
SELECT e.id, e.name, d.name AS dept_name, e.salary 
FROM employees e, departments d 
WHERE e.dept_id = d.id

比如现有两个表

Employees(emp_id, dept_id, name)Departments(dept_id, dept_name)
1, 10, ‘Alice’10, ‘Sales’
2, 20, ‘Bob’30, ‘HR’
3, 10, ‘Cara’

我们运行


SELECT e.emp_id, e.name, d.dept_name
FROM Employees AS e
JOIN Departments AS dON e.dept_id = d.dept_id;

结果为

emp_idnamedept_name
1AliceSales
3CaraSales

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918697.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918697.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918697.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型微调【1】之入门

文章目录说明一 大模型微调技术1.1 微调基础1.2 量化概念1.3 高效微调方法LoRA&QLoRA1.4 LoRA VS QLoRA1.5 高效微调的应用场景二 主流微调工具2.1 unsloth2.2 LLama-Factory2.3 ms-SWIFT2.4 ColossalAI2.5 底层微调框架推荐2.6 模型性能评估框架EvalScope三 微调所需软硬件…

深入解析Linux poll()系统调用

🔄 Linux poll() 系统调用详解一、poll 是干什么的?poll 是 Linux(及 POSIX 标准)中用于实现 I/O 多路复用(I/O Multiplexing) 的系统调用,它的核心作用是:让一个线程能够同时监视多…

文献阅读 | PLoS ONE | SRplot:一个免费的在线平台,用于数据可视化和图形

文献介绍文献题目: SRplot:一个免费的在线平台,用于数据可视化和图形 研究团队: Yewei Wang(中南大学湘雅二医院) 发表时间: 2023-11-09 发表期刊: PLoS ONE 影响因子: 3…

分布式与微服务宝典

分布式理论基础 1、分布式架构有哪些特点,优势和缺陷 特点:微服务架构的优点微服务架构的缺陷自由使用不同技术增加故障排除挑战每一个微服务都侧重于单一功能由于远程调用增加延迟支持单个可部署单元增加了配置与其他操作的工作量允许经常发布软件难以保…

利用生成式AI与大语言模型(LLM)革新自动化软件测试 —— 测试工程师必读深度解析

引言 自动化测试是现代软件工程的基石,然而,随着软件复杂度和迭代速度的飞速提升,传统自动化测试方法正面临越来越多的挑战。 近年来,生成式人工智能(Generative AI)和大语言模型(LLM&#xff0…

JS 与 C++ 双向通信实战:基于 WebHostViewListener 的消息处理机制

前言在现代浏览器和桌面应用开发中,WebView 嵌入已经成为一种非常常见的 UI 技术方案。无论是基于 Chromium 的 CEF(Chromium Embedded Framework)、Qt WebEngine,还是自研浏览器内核,嵌入 WebView 都能带来极高的灵活…

模板打印技术——Office XLS 打印模板:为政务土地确权定制的纸张替换利器—仙盟创梦IDE

代码public static int cyberwin_replaceExcelandoutputPrint(string fisrcpathleurl, DataTable dtInfo, string despath){if (File.Exists(despath) true){//删除目标文件File.Delete(despath);}File.Copy(fisrcpathleurl, despath);string 目标文件 despath;MSEXCEL.Appli…

可直接运行的 Playwright C# 自动化模板

目录 目录结构 1. appsettings.json(账号、URL、路径配置) 2. Program.cs(启动入口) 3. SchedulerConfig.cs(定时调度) 4. SocialSecurityTask.cs(自动报社保任务) 5. QuerySo…

云平台监控-云原生环境Prometheus企业级监控实战

目录 一、基于 Kubernetes 的 Prometheus 监控方案概述 1. 核心组件及功能 2. 监控流程详解 3. 关键监控指标说明 二、Prometheus 与相关组件部署 1. 克隆项目代码 2. 安装 Prometheus Operator 3. 安装 Prometheus Stack 4. 查看容器运行状态 三、ServiceMonitor 配…

GPT-5 有点不太顺

GPT-5 有点不太顺 OpenAI 的新模型 GPT-5 盼了很久,结果一上线就问题不少。 发布会刚过,CEO 山姆・奥特曼就说,要给部分用户恢复 GPT-4o 这些老模型的使用权限,还承认 GPT-5 上线 “比预想的坎坷”。 简单题都做错了 不少用户发现,GPT-5 连一些简单问题都答不对,比之前…

《卷积神经网络(CNN):解锁视觉与多模态任务的深度学习核心》

1.概述卷积神经网络(CNN)是深度学习在计算机视觉领域的重要突破,专为处理网格状数据(如图像)设计,后也扩展到自然语言处理等领域。它解决了全连接网络处理大图像时计算代价高、特征保留差的问题&#xff0c…

React Native + Expo搭建APP项目+安卓模拟器

Expo 尝试一下就好,毕竟参考代码太少,相当于闭关造轮子,不建议。 一、需要的工具 1. node.js,推荐使用(TLS版本),版本不是太低就行,测试用的v20.12.2的Node 2. 开发工具 VS CODE或…

第六十五章:AI的“精良食材”:图像标注、视频帧抽帧与字幕提取技巧

ai 数据处理前言:从“原始食材”到“AI盛宴”第一章:图像标注:为AI“指点江山”1.1 什么是图像标注?—— AI的“视觉标签”1.2 分类任务:图像的“身份识别”1.3 目标检测:图像的“区域识别”与“边界框”1.…

2025 开源语音合成模型全景解析:从工业级性能到创新架构的技术图谱

一、引言:开源浪潮下的语音合成技术跃迁 语音合成(TTS)作为人工智能领域的核心技术,近年来在开源社区的推动下取得了突破性进展。从早期的基于规则的拼接合成,到深度学习驱动的端到端模型,再到当前与大语言…

前端懒加载技术全面解析

懒加载(Lazy Loading)是一种优化前端性能的重要技术,核心思想是延迟加载非关键资源,只在需要时加载它们。 一、懒加载的基本原理 懒加载的核心思想是通过以下方式优化性能: 减少初始加载实践: 只加载首屏所需资源 节省带宽和内存: 避免加载用户可能不会查看的内容 提高…

B3DM,OSGB,PLY,OBJ,S3MB,I3S这几种格式有什么区别

B3DM、OSGB、PLY、OBJ、S3MB、I3S 都是三维模型/地理空间数据的文件格式,但它们的用途、结构和适用场景差别很大。1. B3DM(Batched 3D Model)来源/用途:属于 Cesium 3D Tiles 规范,用于在 Cesium、Mapbox 这种 WebGIS …

Matlab(4)

一、Basic plotting1.plot()plot(x,y) :x图片中点的横坐标,y图片中点的纵坐标plot(y) :y图片中点的纵坐标,x图片中点的横坐标默认为1,2,3,4,5........plot(co…

Pycharm选好的env有包,但是IDE环境显示无包

一、异常现象 Pycharm选好的env(yolov7): 有Numpy这个包: IDE环境愣是报没有: 二、尝试解决 2.1 重新启动pycharm 重新打开.py文件: 还是不行: 看看好使的windows上的pycharm参数&#xff1a…

深入理解 Linux 下的 GDB 调试工具

引言 在软件开发中,调试是一个不可避免且至关重要的环节。无论是简单的逻辑错误,还是复杂的内存泄漏问题,调试工具都能帮助我们快速定位并修复问题。而在 Linux 系统中,GDB(GNU 调试器)是最强大、最常用的…

让齿轮与斑马线共舞:汽车文化驿站及安全教育基地的展陈实践

当汽车文化驿站及安全教育基地的展陈项目图纸在绘图仪上初现轮廓时,我们就明确了一个核心命题:如何让 “速度与激情” 的汽车文化,与 “规则与敬畏” 的安全教育在同一空间里和谐共生,而非简单拼接。这不是两个独立展区的物理叠加…