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;

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

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

相关文章

uniapp小程序开发 | 从零实现一款影视类app (后台接口实现,go-zero微服务的使用)

uniapp小程序开发实战系列&#xff0c;完整介绍从零实现一款影视类小程序。包含小程序前端和后台接口的全部完整实现。系列连载中&#xff0c;喜欢的可以点击收藏。 该篇着重介绍获取轮播图后台接口和获取正在热映电影的两个后台接口的实现。 后台服务使用golang&#xff0c;…

解决MAC M1 Docker Desktop启动一直在starting

问题描述&#xff1a; 今天使用docker buildx 构建Multi-platform&#xff0c;提示如下错误&#xff1a; ERROR: Multi-platform build is not supported for the docker driver. Switch to a different driver, or turn on the containerd image store, and try again. 于是按…

关系代数与规范化

本文是根据自己的理解&#xff0c;结合实践整理所得&#xff0c;有兴趣的可以参考学习。

在k8s中部署Kafka高可用集群超详细讲解

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《数据流专家&#xff1a;Kafka探索》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Kafka简介 2、为什么在Kubernetes中部署Kafka 二、…

金融科技发展报告:移动支付的市场格局、趋势与优缺点

一、引言 随着科技的飞速发展,金融科技已成为推动全球经济发展的重要力量。移动支付作为金融科技的重要分支,其市场格局与趋势日益受到业界的关注。本报告将详细剖析移动支付的市场格局,并深入探讨其发展趋势,同时结合相关案例和数据,为读者呈现移动支付的优缺点,以及国…

idea 中:运行 Application 时出错。命令行过长

一、问题描述&#xff1a; idea 导入新项目&#xff0c;在编译后&#xff0c;运行项目时&#xff0c;报以下错误&#xff1a; 14:47 运行 Application 时出错运行 Application 时出错。命令行过长。通过 JAR 清单或通过类路径文件缩短命令行&#xff0c;然后重新运行。二、问题…

小程序丨最大填表限制如何开启?

老师在新建填表时&#xff0c;希望设置最大数量限制&#xff0c;若填表达到限制&#xff0c;后续的学生将不能继续提交填表。 通过开启【表格最大限制】功能即可实现&#xff0c;下面就来教大家如何制作吧。 &#x1f50e;如何开启表格最大限制功能&#xff1f; 按照常规流程…

C++结合OpenCV进行图像处理与分类

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

GPT-4o:重塑人机交互的未来

一个愿意伫立在巨人肩膀上的农民...... 一、推出 在人工智能&#xff08;AI&#xff09;领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术一直被视为连接人类与机器的桥梁。近年来&#xff0c;随着深度学习技术的快速发展&#xff0c;NLP领域迎来了前所未有的变革…

使用正则表达式分割字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 split()方法用于实现根据正则表达式分割字符串&#xff0c;并以列表的形式返回。其作用同字符串对象的split()方法类似&#xff0c;所不同的就是分割…

【Vue】路由的基本使用

文章目录 一、固定5个固定的步骤二、代码示例三、两个核心步骤四、完整代码 vue-router插件作用 修改地址栏路径时&#xff0c;切换显示匹配的组件 说明 Vue 官方的一个路由插件&#xff0c;是一个第三方包 官网 https://v3.router.vuejs.org/zh/ VueRouter的使用&#xff0…

【java基础】内部类

1、 非静态成员内部类可以访问所在类的全部方法和对象&#xff08;就相当于一个对象方法&#xff08;属于对象阶层和非静态方法同时加载在类加载之后&#xff09;&#xff09; 2、非静态成员内部类无法在该类&#xff08;就是非静态成员内部类所在的类&#xff09;的静态方法中…

期望18K,4年前端Cvte 视源股份一面挂

一面 1、自我介绍&#xff1f;毕业的时候一直在 xx 公司&#xff0c;你基本都在做什么项目&#xff1f; 2、你讲一下你主要负责哪一块的&#xff1f;balabala 3、你们的 json 是怎么定义组件间的联动的&#xff1f; 4、怎么确定区分两个 input&#xff1f; 5、你们是怎么触…

3. 使用tcpdump抓取rdma数据包

系列文章 第1章 多机多卡运行nccl-tests 和channel获取第2章 多机多卡nccl-tests 对比分析第3章 使用tcpdump抓取rdma数据包 目录 系列文章一、准备工作1. 源码编译tcpdump2. 安装wireshark 二、Tcpdump抓包三、Wireshark分析 一、准备工作 1. 源码编译tcpdump 使用 tcpdump…

基于web的垃圾分类回收系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;公告管理&#xff0c;运输管理&#xff0c;基础数据管理 用户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;运输管理&#xff0c;公告…

基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五)

上一篇&#xff1a;搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL&#xff08;四&#xff09; 下一篇&#xff1a;基于Django的博客系统之增加类别导航栏&#xff08;六&#xff09; 功能概述 添加搜索框用于搜索博客。 需求详细描述 1. 添加搜索框用于搜索博客 描…

C语言 | Leetcode C语言题解之第133题克隆图

题目&#xff1a; 题解&#xff1a; struct Node** visited; int* state; //数组存放结点状态 0&#xff1a;结点未创建 1&#xff1a;仅创建结点 2&#xff1a;结点已创建并已填入所有内容void bfs(struct Node* s) {if (visited[s->val] && state[s->val] 2…

图片和PDF展示预览、并支持下载

需求 展示图片和PDF类型&#xff0c;并且点击图片或者PDF可以预览 第一步&#xff1a;遍历所有的图片和PDF列表 <div v-for"(data,index) in parerFont(item.fileInfo)" :key"index" class"data-list-item"><downloadCard :file-inf…

【面试八股总结】锁:互斥锁、自旋锁、读写锁、乐观锁、悲观锁

使用加锁操作和解锁操作可以解决并发线程/进程的互斥问题。任何想进入临界区的线程&#xff0c;必须先执行加锁操作。若加锁操作顺利通过&#xff0c;则线程可进入临界区&#xff1b;在完成对临界资源的访问后再执行解锁操作&#xff0c;以释放该临界资源。 一、互斥锁与自旋锁…

【C语言】详解函数(下)(庖丁解牛版)

文章目录 1. 前言2. 数组做函数形参3. 函数嵌套调用和链式访问3.1 嵌套调用3.2 链式访问 1. 前言 详解C语言函数(上)的链接&#xff1a;http://t.csdnimg.cn/EGsfe 经过对函数的初步了解之后,相信大家已经对C语言标准库里的函数已经有初步的认知了&#xff0c;并且还学会了如…