MYSQL数据库细节详细分析
MYSQL数据库的数据类型(一般只需要用到这些)
整型类型:用于存储整数值,可以选择不同的大小范围来适应特定的整数值。
- TINYINT
- SMALLINT
- MEDIUMINT
- INT
- BIGINT
浮点型类型:用于存储带有小数部分的数值,提供了单精度(FLOAT)和双精度(DOUBLE)两种浮点数类型。
- FLOAT
- DOUBLE
定点数类型:用于精确存储十进制数值,例如货币或精确计数情况下使用。
- DECIMAL
- NUMERIC
日期与时间类型:用于存储日期、时间或日期时间组合。
- DATE
- TIME
- DATETIME
- TIMESTAMP
- YEAR
字符串类型:用于存储文本和字符数据,提供了不同长度和存储方式的选项。
- CHAR
- VARCHAR
- BLOB
- TEXT
- ENUM
- SET
操作数据 库 相关的语句:
数据库创建:
create database if not exists 数据库名
default character set utfmb4 -- 字符集
default collate utf8mb4_unicode_ci; -- 排序规则
- 【if not exists,default character set Xxx,default collate Xxx】可以选择是否使用
- 字符集:
- 字符集不同,数据库的存储和显示结果可能不同
- 如utf8mb3:可以存储中文,但不能存储一些特殊字符如表情符号。utf8mb4就可以表情符号。
- 排序规则:对字符进行排序使用的规则
- 比如不同排序规则对中文的标准可能不同,
- 像【一,二,三】这些数据,a规则可能将他们排为【一,二,三】,b规则可能将他们排为【三,一,二】
数据库删除:
drop database if exists 数据库;
- 【if exists】可以选择是否使用
数据库修改:
-- 修改数据库的character set:
alter database 数据库 character set utf8mb4;
-- 修改数据库的collate:
alter database 数据库 collate utf8mb4_general_ci;
数据库选择
use 数据库
操作数据 表 的相关的语句:
数据表创建:
CREATE TABLE IF NOT EXISTS 数据库.数据表 (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,age INT DEFAULT 18,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,active BOOLEAN DEFAULT TRUE,salary DECIMAL(10,2) DEFAULT 0.00,CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES department(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
- IF NOT EXISTS:用于检查是否存在同名的表,如果不存在则创建。
- AUTO_INCREMENT:使 id字段自动增长,并将其设置为主键。
- CHARACTER SET utf8mb4:设置name 字段的字符集。
- COLLATE utf8mb4_general_ci:设置name 字段的排序规则。
- NOT NULL:确保 name 字段不为空。
- DEFAULT 18:设置 age 字段的默认值为18。
- UNIQUE:确保 email 字段的值是唯一的。
- DEFAULT CURRENT_TIMESTAMP:设置 created_at字段的默认值为当前时间戳。
- BOOLEAN DEFAULT TRUE:设置 active 字段的默认值为 TRUE。
- DECIMAL(10,2) DEFAULT 0.00:设置 salary 字段的数据类型为 DECIMAL,精度为 10 位,小数位为 2位,默认值为 0.00。
- CONSTRAINT fk_department FOREIGN KEY (department_id)REFERENCES department(id):定义了外键约束,将 department_id 字段作为外键关联到department 表的 id 字段。
- ENGINE=InnoDB:设置表的引擎为 InnoDB。
- DEFAULT CHARSET=utf8mb4:默认字符集为 utf8mb4。
- COLLATE=utf8mb4_general_ci:排序规则为utf8mb4_general_ci。
数据表修改
添加新列:ALTER TABLE table_name ADD COLUMN column_name column_type;
修改现有列:ALTER TABLE table_name MODIFY COIUMN column_name new_column_tyoe;
删除列:ALTER TABLE table_name DROP COLUMN column_name;
修改表名:ALTER TABLE old_table_name RENAME TO new_table_name;
添加约束条件:ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_type(column_name);- constraint_type有:- UNIQUE:用于确保列中的所有值都是唯一的。- NOT NULL:用于确保列中的值不为空。CHECK:用于定义要求满足的条件。
删除约束条件:ALTER TABLE table_name DROP CONSTRAINT constraint_name;
添加主键:ALTER TABLE table_name ADD CONSTRAINT pk_constraint_name PRIMARY KEY(column_name);
删除主键:ALTER TABLE table_name DROP CONSTRAINT pk_constraint_name;
添加外键:ALTER TABLE table_name ADD CONSTRAINT fk_constraint_name FOREIGN KEY(column_name) REFERENCES other_table(other_column);
删除外键:ALTER TABLE table_name DROP CONSTRAINT fk_constraint_name;
数据表删除
完全删除数据表:DROP TABLE table_name;
仅删除数据表中的数据,保留数据表的结构:TRUNCATE TABLE table_name;
单表数据增删改查的语句
插入数据
INSERT INTO table_name(column1, column2, ...) VALUES (value1, value2, ...);
更新数据
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
删除数据
DELETE FROM table_name WHERE condition;
查询数据
SELETE column1, column2, ... FROM table_name WHERE condition;
condition的写法
1.等于(Equal to):WHERE column = value
2.不等于(Not Equal to):WHERE column <> value
3.大于(Greater than):WHERE column > value
4.小于(Less than):WHERE column < value
5.大于等于(Greater than or equal to):WHERE column >= value
6.小于等于(Less than or equal to):WHERE column <= value
7.包含(IN):WHERE column IN (value1, value2, ...)
8.不包含(NOT IN):WHERE column NOT IN (value1, value2, ...)
9.模糊匹配(LIKE):WHERE column LIKE 'pattern'
10.范围(BETWEEN):WHERE column BETWEEN value1 AND value2
11.空值(IS NULL):WHERE column IS NULL
12.非空值(IS NOT NULL):WHERE column IS NOT NULL
多表联查的SQL语句
以例子演示:表结构如下:
- students:student_id,student_name
- teachers:teacher_id,teacher_name
- courses:course_id,course_name,teacher_id
- scores:student_id,course_id,score
表数据:




内连接(Inner Join):连接学生、课程和成绩表,找出每个学生所修的课程及成绩
SELECT students.student_name, courses.course_name, scores.score
FROM students
INNER JOIN scores ON students.student_id = scores.student_id
INNER JOIN courses ON scores.course_id = courses.course_id;

左连接(Left Join):列出每门课程及其对应的老师,即使没有老师也要显示出来
SELECT courses.course_name, teachers.teacher_name
FROM courses
LEFT JOIN teachers ON courses.teacher_id = teachers.teacher_id;
联合查询(Union):
1、将学生表和教师表的姓名合并为一个结果集
SELECT student_name as name FROM students
UNION
SELECT teacher_name as name FROM teachers;

2、将学生、教师和课程表的姓名合并为一个结果集
SELECT student_name as name FROM students
UNION
SELECT teacher_name as name FROM teachers
UNION
SELECT course_name as name FROM courses;

右连接(Right Join):列出每个老师及其对应的课程,即使没有课程也要显示出来
SELECT teachers.teacher_name, courses.course_name
FROM teachers
RIGHT JOIN courses ON teachers.teacher_id = courses.teacher_id;

多重连接(Multiple Joins):连接学生、课程、教师和成绩表,找出每个学生所修的课程、对应的老师和成绩
SELECT students.student_name, courses.course_name, teachers.teacher_name, scores.score
FROM students
INNER JOIN scores ON students.student_id = scores.student_id
INNER JOIN courses ON scores.course_id = courses.course_id
INNER JOIN teachers ON courses.teacher_id = teachers.teacher_id;

分组联查(Group By):统计每门课程的平均成绩
SELECT courses.course_name, AVG(scores.score) as average_score
FROM courses
LEFT JOIN scores ON courses.course_id = scores.course_id
GROUP BY courses.course_name;

带有条件的联查(Join with Where Clause):找出某个学生所修的所有课程及成绩
SELECT students.student_name, courses.course_name, scores.score
FROM students
INNER JOIN scores ON students.student_id = scores.student_id
INNER JOIN courses ON scores.course_id = courses.course_id
WHERE students.student_name = "John";
子查询(Subquery):找出每位学生的平均成绩,并与学生信息进行关联
SELECT students.student_name, average_score
FROM students
LEFT JOIN (SELECT student_id,AVG(score) as average_scoreFROM scoresGROUP BY student_id
) AS subquery
ON students.student_id = subquery.student_id;

多重连接和条件(Multiple Joins with Conditions):找出每门课程及其对应的老师、学生选修情况和成绩
SELECT courses.course_name, teachers.teacher_name, students.student_name, scores.score
FROM courses
LEFT JOIN teachers ON courses.teacher_id = teachers.teacher_id
LEFT JOIN scores ON courses.course_id = scores.course_id
LEFT JOIN students ON scores.student_id = students.student_id;

多种连接类型组合(Combining Different Join Types):列出所有学生、他们所修的课程及成绩,即使没有成绩也要显示学生和课程信息
SELECT s.student_name, c.course_name, COALESCE(sc.course, "No score") as score
FROM student s
CROSS JOIN courses c
LEFT JOIN score sc ON s.student_id = sc.student_id AND c.course_id = sc.course_id;

联合查询与排序(Union with Ordering):将学生和老师姓名合并,并按字母顺序排序
SELECT name FROM (SELECT student_name as name FROM studentsUNIONSELECT teacher_name as name FROM teachers
) AS combined_names
ORDER BY name ASC;

多表联查与分组筛选(Join with Grouping and Filtering):统计每个老师所教课程数超过1门的情况
SELECT teachers.teacher_name, COUNT(courses.course_id) as num_courses_taught
FROM teachers
LEFT JOIN courses ON teachers.teacher_id = courses.teacher_id
GROUP BY teachers.teacher_name
HAVING COUNT(courses.course_id) > 2;

左连接与条件筛选(Left Join with Conditional Filter):找出没有分配老师的课程
SELECT courses.course_name
FROM courses
LEFT JOIN teachers ON courses.teacher_id = teachers.teacher_id
WHERE teachers.teacher_id IS NULL;

多表联查与排名(Join with Ranking):按照成绩排名找出每门课程的前三名学生
SELECT course_name, student_name, score, ranking
FROM (SELECT courses.course_name,students.student_name,scores.score,RANK() OVER (PARTITION BY courses.course_id ORDER BY scores.score DESC) AS rankingFROM courses INNER JOIN scores ON scores.course_id = courses.course_idINNER JOIN students ON students.student_id = scores.student_id
) AS ranked_scores
WHERE ranking <= 3;

联合查询与条件过滤(Union with Conditional Filtering):将学生和老师姓名合并,并只显示姓氏为“Smith”的人员
SELECT name FROM (SELECT student_name as name FROM students WHERE student_name LIKE 'Smith%'UNIONSELECT teacher_name as name FROM teachers WHERE teacher_name LIKE 'Smith%'
) AS combined_names;

MYSQL函数
-- 数学运算
SELECT abs(-10);/*绝对值:0*/
SELECT ceiling(9.4);/*向上取整:10*/
SELECT floor(9.4);/*向下取整:9*/
SELECT rand();/*生成随机数,0~1:0.40571950134422585*/
SELECT sign(122);/*值为0返回0,值为正数返回1,值为负数返回-1:1*/
-- 字符串相关操作
SELECT char_length('123456789');/*获取值的长度:9*/
SELECT concat('a','b','c');/*拼接字符串:abc*/
SELECT insert('1234567',1,2,'a');/*根据位置替换字符串,从第1个位置开始的2个数替换为'a':a34567*/
SELECT lower('Abc');/*小写:abc*/
SELECT upper('Abc');/*大写:ABC*/
SELECT replace('12345678','345','abc');/*根据内容替换字符串,把'345'替换为'abc':12abc678*/
SELECT substr('123456',2,2);/*返回第2个位置开始的2个数:23*/
SELECT instr('1234567','456');/*返回456的第一次的位置,找不到返回0:4*/
SELECT reverse('123456');/*反转:654321*/
-- 日期和时间函数
SELECT current_date();/*获取当前日期:2024-05-31*/
SELECT curdate();/*获取当前日期:2024-05-31*/
SELECT now();/*获取当前时间:2024-05-31 11:28:04*/
SELECT localtime();/*获取当前时间:2024-05-31 11:28:24*/
SELECT sysdate();/*获取当前时间:2024-05-31 11:28:44*/
SELECT year(now());/*获取当前年份:2024*/
SELECT month(now());/*获取当前月份:5*/
SELECT date(now());/*获取当前日期:2024-05-31*/
SELECT hour(now());/*获取当前小时:11*/
SELECT minute(now());/*获取当前分钟:32*/
SELECT second(now());/*获取当前秒数:56*/
-- 聚合函数
USE test;
-- count(...) 对查询到的数据进行统计
SELECT COUNT(1) FROM students;
-- SUM(...) 对查询到的数据进行求和,如果数据不能求和(字符串),返回0
SELECT SUM(scores.score) FROM scores;
-- AVG(...) 对查询到的数据进行求平均值
SELECT AVG(scores.score) FROM scores;
-- MAX(...) 返回查询到的数据的最大值
SELECT MAX(scores.score) FROM scores;
-- MIN(...) 返回查询到的数据的最小值
SELECT MIN(scores.score) FROM scores;
相关文章:
MYSQL数据库细节详细分析
MYSQL数据库的数据类型(一般只需要用到这些) 整型类型:用于存储整数值,可以选择不同的大小范围来适应特定的整数值。 TINYINTSMALLINTMEDIUMINTINTBIGINT 浮点型类型:用于存储带有小数部分的数值,提供了单精度(FLOA…...
vue 将图片url转base64
<img :src"imgList[0]" width"600" error"handleImageError" alt"0" load"onloadImg" />//当图片加载完成时,将图片url转成base64onloadImg(event) {this.urlTobase64(event.target.src, event.target.alt…...
Unity之XR Interaction Toolkit如何使用XRSocketInteractable组件
前言 在虚拟现实(VR)和增强现实(AR)开发中,交互性是提升用户体验的关键。Unity作为一个领先的游戏开发引擎,提供了多种工具支持VR/AR开发。Unity的OpenXR插件扩展了这一功能,提供了更强大和灵活的交互系统。其中一个非常有用的组件是XRSocketInteractable。本文将详细介…...
flutter3-os:基于flutter3.x+dart3+getx手机版os管理系统
flutter3-os-admin跨平台手机后台OS系统。 原创Flutter3.22Dart3.4Getxfl_chart等技术开发仿ios手机桌面OA管理系统。自研栅格化布局引擎、自定义桌面壁纸、小部件、底部Dock菜单、可拖拽悬浮球等功能。 全新自研栅格化OS菜单布局引擎。 使用技术 编辑器:VScode技术…...
C++ 用数组模拟队列
在C中,使用数组模拟队列通常涉及到两个主要的操作:入队(enqueue)和出队(dequeue)。由于数组是一个固定大小的数据结构,当使用数组模拟队列时,需要手动管理队列的头部和尾部位置。以下…...
每日一题34:数据分组之查找每个员工花费的总时间
一、每日一题 表: Employees ------------------- | Column Name | Type | ------------------- | emp_id | int | | event_day | date | | in_time | int | | out_time | int | ------------------- 在 SQL 中,(emp_id, event_day, in_time) 是…...
语言模型解构——Tokenizer
1. 认识Tokenizer 1.1 为什么要有tokenizer? 计算机是无法理解人类语言的,它只会进行0和1的二进制计算。但是呢,大语言模型就是通过二进制计算,让你感觉计算机理解了人类语言。 举个例子:单1,双2&#x…...
前端经验:导出表格为excel并设置样式
应用场景 将网页上的table标签内容导出为excel,并且导出的excel携带样式,比如字色、背景色、对齐等等 实施步骤 必备引入包 npm install xlsx-js-style步骤1:准备好table table可以是已经存在与页面中的,也可以动态创建。 行…...
UFS协议—新手快速入门(二)【5-6】
目录 五、UFS协议栈 六、UFS技术演进与详解 1、UFS应用层 设备管理器 任务管理器 2、UFS传输层 3、UFS互联层 UFS协议—新手快速入门(一)【1-4】 五、UFS协议栈 UFS(Universal Flash Storage)协议是针对固态存储设备&…...
手机建站介绍
随着科技的不断进步和移动互联网的普及,手机应用已经成为人们生活中最不可或缺的一部分。而手机建站作为一种新兴技术,在这一领域也有着广泛的应用。本文将为大家介绍手机建站的概念、优势和应用。 什么是手机建站? 手机建站是指将传统的网络…...
windows11 安装cnpm 报错 Error: EPERM: operation not permitted 没权限
全部试过: 您遇到的错误是EPERM: operation not permitted,这意味着npm在尝试重命名文件或目录时缺少必要的权限。这通常与操作系统的权限设置有关。为了解决这个问题,您可以尝试以下几个步骤: 以管理员身份运行命令行࿱…...
SQL 如何获取A列相同但是B列不同的数据项
用户表里有两个字段:部门和职位。一个部门可能对应多个职位,多个部门也可能都有同一职位。比如: 部门 职位 财务 部长 财务 副部长 财务 会计 财务 职员 编辑 部长 编辑 副部长 编辑 主编 编辑 副主编 现在想通过筛选,获取职位名称…...
如何在QGIS中加载高清卫星影像?
我们在《如何在GlobalMapper中加载高清卫星影像》一文中,分享了在GlobalMapper中加载卫星影像的方法。 这里再为你分享如何在QGIS中加载高清卫星影像的方法,并可以在文末查看领取软件安装包和图源的方法。 如何加载高清图源? 要在QGIS中在…...
后端返回图片格式乱码
try {const response await request.get(checkCodeUrl.value,{responseType:"arraybuffer"});console.log("验证码请求成功:", response);checkCodeUrl.value data: image/jpeg;base64,${btoa(new Uint8Array(response).reduce((data, byte) > data …...
C++基础编程100题-025 OpenJudge-1.4-05 整数大小比较
更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0104/05/ 描述 输入两个整数,比较它们的大小。 输入 一行,包含两个整数x和y,中间用单个空格隔开。 0 < x < 2^32, -2^31 < y < 2^31。 输出 一个字符。 若x &…...
[office] 16种常见的COUNTIF函数公式设置 #笔记#职场发展
16种常见的COUNTIF函数公式设置 1、返回包含值12的单元格数量 COUNTIF(A:A,12) 2、返回包含负值的单元格数量 COUNTIF(A:A,"<0") 3、返回不等于0的单元格数量 COUNTIF(A:A,"<>0") 4、返回大于5的单元格数量 COUNTIF(A:A,">5"…...
spring boot2.7.x遇到问题
validation报错 高版本已移除了validation以来,需手动添加 <dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId> </dependency>mybatis报错 升级版本 <dependency>&…...
Webpack 开发快速入门
WebPack详细入门教程(一)之简介 Webpack详细入门教程(二)之安装配置 WebPack详细入门教程(三)之loader加载器 Webpack详细入门教程(四)之Source Maps调试 Webpack详细入门教程&#…...
AI时代的多维探索
随着人工智能(AI)技术的迅猛发展,我们的生活正在经历一场深刻的变革。从智能家居到自动驾驶,从医疗诊断到金融投资,AI技术正逐渐渗透到社会的各个角落。为了更全面地了解AI时代的发展趋势,我们将通过十个具…...
您的游戏端被攻击了怎么办,德迅云安全的应用加速来帮您
游戏行业DDoS攻击的主要原因是因为游戏产品生命周期偏短,而DDoS供给成本又不高,只要发起攻击,企业为确保游戏稳定运营而不得不快速做出让步,致使敲诈勒索的成功率相对更高。在遭受DDoS攻击后,游戏公司的日损失甚至多达…...
别再死记硬背了!用PyTorch代码逐行拆解Transformer中的QKV矩阵计算
用PyTorch代码逐行拆解Transformer中的QKV矩阵计算 在自然语言处理领域,Transformer架构已经成为事实上的标准。但很多开发者发现,仅通过理论图示理解其核心的注意力机制仍然存在困难。本文将带你用PyTorch代码从零开始实现QKV矩阵的计算过程,…...
人工智能创意工作流:Pixel Script Temple 与 AI Agent 协同创作
人工智能创意工作流:Pixel Script Temple 与 AI Agent 协同创作 1. 多智能体协作的艺术革命 当三个专业AI Agent组成创意团队,会产生怎样的化学反应?这套由Pixel Script Temple驱动的协同工作流,正在重新定义数字艺术创作的可能…...
Ostrakon-VL扫描终端实操手册:档案上传与实时扫描切换技巧
Ostrakon-VL扫描终端实操手册:档案上传与实时扫描切换技巧 1. 像素特工终端简介 Ostrakon-VL扫描终端是一款专为零售与餐饮场景设计的智能图像识别工具。它基于Ostrakon-VL-8B多模态大模型开发,采用独特的8-bit像素艺术风格界面,将枯燥的数…...
工业数智化改造避坑:拒绝通用模板,定制化才是最优解
在工业数智化转型浪潮中,不少企业陷入了“投入与回报失衡”的困境:耗费大量资金、人力上线的数智化系统,却因与自身业务脱节、流程适配性差,难以发挥实际价值,最终沦为“摆设”。事实上,工业数智化改造的核…...
Python 闭包与装饰器
在 Python 学习中,闭包和装饰器是两个既关联又容易混淆的知识点,尤其是结合嵌套函数使用时,常常分不清执行逻辑。但其实只要抓住核心原理,再结合简单案例拆解,就能轻松掌握。 一、前置回顾:函数与局部变量的…...
Oak安全最佳实践:10个防范常见Web攻击的终极指南
Oak安全最佳实践:10个防范常见Web攻击的终极指南 【免费下载链接】oak A middleware framework for handling HTTP with Deno 🐿️ 🦕 项目地址: https://gitcode.com/gh_mirrors/oa/oak Oak是一个基于Deno的现代化中间件框架…...
GLM-4v-9b多图对比分析:上传两张产品图→自动识别差异点→生成结构化对比报告
GLM-4v-9b多图对比分析:上传两张产品图→自动识别差异点→生成结构化对比报告 1. 产品对比分析的新选择 在日常工作中,我们经常需要对比两个相似的产品图片——可能是不同版本的设计稿、竞品分析、或者产品质量检查。传统方法需要人工逐像素比对&#…...
NVIDIA Profile Inspector深度解析:解锁显卡隐藏性能与高级配置实战指南
NVIDIA Profile Inspector深度解析:解锁显卡隐藏性能与高级配置实战指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款面向技术爱好者和开发者的专业显卡配…...
WebPlotDigitizer终极指南:从科研图表到结构化数据的完整解决方案
WebPlotDigitizer终极指南:从科研图表到结构化数据的完整解决方案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 在科研和…...
OpenClaw安全实践:Kimi-VL-A3B-Thinking本地化部署的数据边界保障
OpenClaw安全实践:Kimi-VL-A3B-Thinking本地化部署的数据边界保障 1. 为什么选择本地化部署? 去年夏天,我接手了一个医疗影像分析项目,需要处理大量患者CT扫描图像和诊断报告。最初尝试使用公有云API服务时,每次上传…...

