MySQL的详细使用教程

article/2025/8/15 7:40:13

目录

  • 1. 连接到MySQL服务器
  • 2. 创建和删除数据库
    • 2-1创建数据库
    • 2-2删除数据库
  • 3. 数据表操作
    • 3.1 选择数据库
    • 3.2 创建数据表
    • 3.3 查询数据表
    • 3.4 修改数据表
    • 3.5 删除数据表
  • 4. 数据内容操作
    • 4.1数据操作
      • 1. 插入数据
      • 2. 查询数据
        • (1)like模糊查询(%表示通配符)
        • (2)限制查询的结果集
        • (3)分组查询
        • (4)分组统计
        • (5)结果集过滤
        • (6)结果集排序
      • 3. 更新数据
      • 4. 删除数据
    • 4.2表字段操作
      • 1.增加表字段
      • 2.修改表字段
      • 3.删除表字段
      • 4.表字段改名
  • 5.统计函数
    • 5.1常见的统计函数
  • 6.联合查询
    • 6.1内连接
    • 6.2外连接
    • 6.3子嵌套查询
  • 7.窗口函数
    • (1)序号函数:
    • (2)分布函数:
    • (3)前后函数:
    • (4)头尾函数:firs_value() / last_value()

1. 连接到MySQL服务器

在使用MySQL之前,需要先连接到MySQL服务器。可以使用命令行工具(如MySQL Shell或终端)或图形化工具(如phpMyAdmin)来连接。以下是使用命令行工具连接到MySQL服务器的示例:

mysql -u root -p

其中,root 是你的MySQL用户名。执行上述命令后,系统会提示你输入密码,输入正确的密码后即可连接到MySQL服务器。
(密码输入为不可见,这是正常的)
在这里插入图片描述

选项说明示例
-u指定用户名-u root
-p提示输入密码(密码可跟在后面但不安全)-p1234 或 -p
-h指定主机名(默认 localhost)-h 192.168.1.100
-P指定端口(默认 3306)-P 3307
–ssl启用 SSL 安全连接–ssl
–socket指定套接字文件–socket=/tmp/mysql.sock
–database登录后直接使用指定数据库–database=testdb

2. 创建和删除数据库

2-1创建数据库

在MySQL中,可以使用create database语句来创建数据库。以下是创建一个名为my_database的数据库的示例:

create database my_database;

在这里插入图片描述

执行上述语句后,MySQL将创建一个名为my_database的数据库。如果要查看所有数据库,可以使用show database语句

show databases;

在这里插入图片描述

2-2删除数据库

使用drop database语句来删除数据库,语法如下:

drop database my_database;
注意:删除数据库是一个危险操作,因为它将永久删除数据库及其包含的所有数据表和数据。在执行此操作之前,请确保你已经备份了重要的数据

3. 数据表操作

3.1 选择数据库

在创建数据表之前,需要先选择要在其中创建数据表的数据库。使用USE语句来选择数据库,语法如下:

use my_database;

3.2 创建数据表

使用create table语句来创建数据表,语法如下:

CREATE TABLE table_name (column1 datatype constraints,column2 datatype constraints,...
);

其中,table_name是数据表的名称column1column2等是数据表的列名datatype是列的数据类型constraints是列的约束条件(如主键、非空等)。

例如,创建一个名为users的数据表,包含idnameemail三个列:

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL,email VARCHAR(255) NOT NULL UNIQUE
)engine = innodb default charset = utf-8;

以下是MySQL中常见的数据库表字段数据类型的表格列举:

数据类型描述示例
整数类型
tinyint1字节,取值范围: -128~127CREATE TABLE test (id TINYINT);
smallint2字节,取值范围: -32768~32767num SMALLINT;
mediumint3字节,取值范围: -8388608~8388607count MEDIUMINT;
int4字节,取值范围: -2147483648~2147483647age INT;
bigint8字节,取值范围: -9223372036854775808到9223372036854775807big_num BIGINT;
浮点数类型
float(m,d)单精度浮点数,占用4个字节,m总个数,小数位。price float(5,2);
double(m,d)双精度浮点数,占用8个字节,比FLOAT有更高的精度和更大的表示范围。weight double(10,2);
decimal(m,d)精确数值类型,用于存储精确的小数。可以指定精度和小数位数。amount DECIMAL(10,2);
字符串类型
char固定长度的字符串,长度在创建时指定,不足指定长度时会用空格填充。code CHAR(5);
varchar可变长度的字符串,长度在创建时指定,存储时只占用实际字符串长度的空间。name VARCHAR(255);
text用于存储较长的文本数据,有TINYTEXTTEXTMEDIUMTEXTLONGTEXT等不同的长度限制。description TEXT;
日期和时间类型
date用于存储日期,格式为YYYY-MM-DDbirth_date DATE;
time用于存储时间,格式为HH:MM:SSstart_time TIME;
datetime用于存储日期和时间,格式为YYYY-MM-DD HH:MM:SScreate_time DATETIME;
timestamp也用于存储日期和时间,范围比DATETIME小,从1970-01-01 00:00:01到2038-01-19 03:14:07。并且在插入或更新记录时,TIMESTAMP列会自动更新为当前时间。last_update TIMESTAMP;
二进制类型
binary固定长度的二进制数据,类似于CHARbinary_data BINARY(10);
varbinary(M)可变长度的二进制数据,类似于VARCHARvarbinary_data VARBINARY(255);
blob用于存储大量的二进制数据,有TINYBLOBBLOBMEDIUMBLOBLONGBLOB等不同的长度限制。CREATE TABLE test (image_data BLOB);

3.3 查询数据表

要查看数据库中的所有数据表,可以使用show tables语句:

show tables;

在这里插入图片描述
这将列出当前选择的数据库中的所有数据表。

要查看数据表的结构,可以使用describe(可以缩写成desc)或show colunmns from语句,如查看名为users的数据表结构:

 describe users;

在这里插入图片描述

3.4 修改数据表

语法:alter table 旧数据表名 rename 新数据表名字;
示例:

alter table users rename new_users;

3.5 删除数据表

使用drop table 语句来删除数据表,如删除名为users的数据表:

drop table users;

在这里插入图片描述

4. 数据内容操作

4.1数据操作

1. 插入数据

使用insert into语句来向数据表中插入数据,语法如下:

insert into table_name (column1, column2,...) values (value1, value2,...);   

例如,向名为users的数据表中插入一条记录:

 insert into users (name,email) values ('john','john@qq.com');
注意值的数量和数据表字段的数量保持一致,除非有默认值可以不用写

如果要插入多条记录,写法如下:

INSERT INTO users (name, email) VALUES ('Jane Smith', 'jane@example.com'),('Bob Johnson', 'bob@example.com');    

2. 查询数据

使用select语句来查询数据表中的数据,语法如下:

SELECT column1, column2,... FROM table_name WHERE condition;

其中,column1column2等是要查询的列名,如果要查询所有列,可以使用*代替;table_name是要查询的数据表名称;WHERE子句用于指定查询条件,可根据需要省略。

例如,查询名为users的数据表中的所有记录:

SELECT * FROM users;

查询名为users的数据表中nameJane Smith的记录:

SELECT * FROM users WHERE name = 'Jane Smith';   

指定字段组合不重复记录

类型说明
基本语法select distinct 字段名 from 数据表名;#distinct 表示去重;
示例select distinct username from users;
示例说明表示查询users表中username不重复的记录
(1)like模糊查询(%表示通配符)

示例:

select * from users where username like '王%'; #表示查询姓名中姓王的数据
(2)限制查询的结果集
类型说明
基本语法select 字段 from 表名 limit 数量;
示例select * from users limit 3;
示例说明查询users表中的前3条数据
(3)分组查询
类型说明
基本语法select 字段 from 表名 group by 字段名;
示例select username from users group by username;
示例说明查询users表中的数据按用户名分组,查询总共有哪些用户;
(4)分组统计
类型说明
基本语法select count(字段名) ,字段名 from 表名 group by 字段名;
示例select count(*) as 数量,province from users group by province ;
示例说明统计users表中各个省份的明星的数量;
(5)结果集过滤
类型说明
基本语法select count(字段名) as result,字段名 from 表名 group by 字段名 having 条件;
示例select count(*) as result,province from users group by province having result >=2;
示例说明统计users表中明星的数量大于等于2的省份;
(6)结果集排序
  1. 单字段排序,基本语法:
select 字段名 from 数据表名字 order by 字段 排序关键字;
关键词说明
asc升序排序(默认值)
desc降序排序

示例:

select * from users order by age asc; #查询出users的数据,按照age字段的升序排序
  1. 多字段排序:
类型说明
基本语法select 字段名 from 表名 order by 字段1 desc
示例select * from users order by money desc ,age asc;
示例说明查询users表中所有的数据,按照money字段降序,若money字段值一样,按照age字段升序
  1. 限制排序后的结果集:
类型说明
基本语法select 字段名 from 表名 order by 字段 排序规则 limit 数量;
示例select * from users order by money desc limit 3;
示例说明查询users表中所有的数据,按照money字段降序,最有钱的3个人;
  1. 结果集区间选择:
类型说明
基本语法select 字段名 from 表名 order by 字段 排序规则 limit 偏移量 数量;
示例select * from users order by money desc limit 3 3;
示例说明查询users表中按照money字段降序,从第4条数据开始往后取3条数据;

3. 更新数据

使用update语句来更新数据表中的数据,语法如下:

update 数据表名 set 字段1 = 新的值, 字段2 = 新的值,... where 条件;

例如,将名为users的数据表中id1的记录的name字段更新为John Smith

update users set name = 'John Smith' where id = 1;

在这里插入图片描述

4. 删除数据

使用delete from 语句来删除数据表中的数据,语法如下:

delete from 数据表名 where 条件;   

例如,删除名为users的数据表中id1的记录:

delete from users where id = 1;

在这里插入图片描述

注意,如果where后面没有跟条件,默认是删除所有数据

在这里插入图片描述

4.2表字段操作

1.增加表字段

类型说明
基本语法alter table 数据表名称 add 字段名 类型;
示例alter table users add age int;
示例说明向users 表中添加一个age字段,类型为int;

2.修改表字段

类型说明
基本语法alter table 数据表名称 modify 字段名 类型;
示例alter table users modify username varchar(33);
示例说明将users表中的username字段的类型修改为varchar(33);

3.删除表字段

类型说明
基本语法alter table 数据表名称 drop 字段名;
示例alter table users drop password;
示例说明将表users中的password字段删除;

4.表字段改名

类型说明
基本语法alter table 数据表名称 change 原字段名 新字段名 类型;
示例alter table users change age nianling int(3);
示例说明将表users中的age字段名称改为nianling 类型为int(3);

5.统计函数

5.1常见的统计函数

类型说明示例
sum求和select sum(money) as 别名 from users;统计users表中的money字段的总和
count统计数量select count(id) as 别名 from users;统计users表中的数据总条数
max最大值select max(money) as 最大值 from users;统计users表中的money字段的最大值
min最小值select min(money) as 最大值 from users;统计users表中的money字段的最小值
avg平均值select avg(money) as 最大值 from users;统计users表中的money字段的平均值

6.联合查询

多表联合查询
先创建几个表单和数据

create table user(id int auto_increment,username char(100),	password char(100),	gid int,primary key(id));
insert into user(username,password,gid) values('张三',123,2),('李四',987,4),('王五',5677,1),('赵六',88776,3),('宋琦',23435,0),('刘元',34545,7),('郭德纲',456,2),('王波',123,0),('王强',123,3),('宋桥',123,3);
create table goods(	id int auto_increment,	name char(100),	price int(20),	primary key(id));
insert into goods(name,price) values('奥迪',99999),('比亚迪',99999),('奔驰',99999),('大众',99999),('特斯拉',99999),('宝马',99999),('丰田',99999);

6.1内连接

  • 隐式内连接
类型说明示例
基本语法select 表1.字段名【as 别名】,表n.字段名 from 表1【as 别名】,表n where 条件;
示例select user.username,goods.name from user,goods where user.gid=goods.id;
示例说明查询用户表中的哪些用户购买过商品以及商品名称;gid和goods中的id必须一一对应

注意:以上的方式属于隐式内连接,是因为sql语句中未出现inner join关键字。

在这里插入图片描述

  • 显式内连接
类型说明示例
基本语法select 表1.字段名【as 别名】,表n.字段名 from 表1 inner jion 表n on 条件;
示例select user.username,goods.name from user inner join goods on user.gid=goods.id;
示例说明查询用户表中的哪些用户购买过商品以及商品名称;gid和goods中的id必须一一对应

注意:在显式内连接,通过inner join 关键字实现表之间的连接,inner可以省略。

6.2外连接

  • 外连接之左连接
类型说明示例
基本语法select 表1.字段名【as 别名】,表n.字段名 from 表1 left jion 表n on 条件;
示例select * from user left join goods on user.gid=goods.id;
示例说明以(左表suer)为主,查询出用户购买过哪些商品,并且将商品信息查询出来;

注意:左外连接会把左表中所有的数据查询出来,会把右表中符合条件的数据查询出来。

注意:在显式内连接,通过inner join 关键字实现表之间的连接,inner可以省略。

  • 外连接之右连接
类型说明示例
基本语法select 表1.字段名【as 别名】,表n.字段名 from 表1 right jion 表n on 条件;
示例select * from user right join goods on user.gid=goods.id;
示例说明以(右表goods)为主,查询出哪些商品被用户购买过,并且将用户信息查询出来;

注意:右外连接会把右表中所有的数据查询出来,会把左表中符合条件的数据查询出来。
在这里插入图片描述

6.3子嵌套查询

类型说明示例
基本语法select 字段名 from 表名 where 字段 in (子查询语句);
示例select * from user where gid in (select id from goods);
示例说明将购买过商品的用户信息查询出来;

在这里插入图片描述

7.窗口函数

用法:窗口函数 over(partition by 分组字段 order by 排序字段)

(1)序号函数:

类型说明
rank()返回数据集中每个值的排名。排名值是管局当前行之前的行数加1,不包含当前行。因此排序的关联值可能产生顺序上的空隙。这个排名会对每个窗口分区进行计算;
dense_rank()返回一组数值中每个数值的排名。这个函数与rank()相似,除了关联值不会产生顺序上的空隙;
row_number()为每行数据返回一个唯一的顺序的序号,从1开始,根据行在窗口的分区内的顺序;

例如:

select *,
rank() over(partition by class order by score desc) as ranking,
dense_rank() over(partition by class order by score desc) as decse,
row_number() over(partition by class order by score desc) as rownumber
from student;

在这里插入图片描述

(2)分布函数:

类型说明
cume_dist()表示当前行及小于当前行在窗口分区总行数中的占比;

需求:按照订单数统计在总订单数中的占比

select *,cume_dist() over(partition by user_num order by amount desc) as cume from order1;

在这里插入图片描述

(3)前后函数:

  • lag() 向上偏移
  • lead()向下偏移

应用场景:

  1. 取时间间隔为N天的记录
  2. 计算本次记录与上次记录的差值
  3. 取某一字段的前N行数据或后N行数据

三个参数:第一个参数是表达式或字段,第二个参数是偏移量,第三个参数是控制赋值。

如:查询上一个订单距离当前订单的时间间隔

select *datediff(dt,last_date) as diff from(select user_num,dt,lag(dt,1,dt) over w as last_date from order1window w as (order by dt) #给窗口函数起个别名
)t;#t表示给sql语句起别名

在这里插入图片描述

(4)头尾函数:firs_value() / last_value()

按照时间顺序记录每个用户的最早订单和最晚订单,并不是最小金额和最大金额的订单;
需求:截止当前订单,按照日期排序第一个订单和最后一个订单的订单金额;

select * from(select *,first_value(amount) over w as first_amount,last_value(amount) over w as last_amountfrom order1window w as (partition by user_num order by dt)
)t; #t表示给sql语句起个别名

![(https://i-blog.csdnimg.cn/direct/23f2e65460ed476f84a4e81666ef95c1.png)


http://www.hkcw.cn/article/tSCrqTIeVa.shtml

相关文章

IDEA编写SpringBoot项目时使用Lombok报错“找不到符号”的原因和解决

目录 概述|背景 报错解析 解决方法 IDEA配置解决 Pom配置插件解决 概述|背景 报错发生背景:在SpringBoot项目中引入Lombok依赖并使用后出现"找不到符号"的问题。 本文讨论在上述背景下发生的报错原因和解决办法,如果仅为了解决BUG不论原…

【中间件】Pulsar集群安装

目录 一、Pulsar介绍 1.1 Pulsar基本介绍 1.2 Pulsar架构 Producer & Consumer Apache Zookeeper Pulsar Brokers Apache Bookkeeper 二、Zookeeper集群安装 三、Pulsar集群安装 3.1 bookie与broker配置 3.1.1 修改bookie配置文件 3.1.2 修改broker配置文件 3…

41-dify案例分享-基于database插件实现Text2sql的数据库查询图表工作流

1 前言 Text2SQL(或称NL2SQL)是一种自然语言处理技术,旨在将自然语言(Natural Language)问题转化为关系型数据库中可执行的结构化查询语言(Structured Query Language,SQL)&#xf…

数据库-MySQL 实战项目——学生选课系统数据库设计与实现(附源码)

一、前言 该项目非常适合MySQL入门学习的小伙伴,博主提供了源码、数据和一些查询语句,供大家学习和参考,代码和表设计有什么不恰当还请各位大佬多多指点。 所需环境 MySQL可视化工具:navicat; 数据库:MySq…

中小型企业大数据平台全栈搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆级配置指南

目录 背景‌一、环境规划与依赖准备‌1. 服务器规划(3节点集群)2. 系统与依赖‌3. Hadoop生态组件版本与下载路径4. 架构图二、Hadoop(HDFS+YARN)安装与配置‌1. 下载与解压(所有节点)2. HDFS高可用配置3. YARN资源配置‌4. 启动Hadoop集群三、MySQL安装与Hive元数据配置…

从 0~1 保姆级 详细版 PostgreSQL 数据库安装教程

PostgreSQL数据库安装 PostgreSQL官网 【PostgreSQL官网】 | 【PostgreSQL安装官网_Windows】 安装步骤 step1: 选择与电脑相对应的PostgreSQL版本进行下载。 step2: 双击打开刚才下载好的文件。 step3: 在弹出的setup窗口中点击 …

【Spring Boot】网页五子棋项目中遇到的困难及解决方法

目录 一、HikariPool-1 - Starting异常二、Invalid bound statement (not found)异常三、The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary异常四、The server time zone value时区报错异常五、补充知识点…

上海启动3-6岁儿童近视监测 推进视力健康关口前移

6月1日,第30个全国“爱眼日”上海市儿童青少年眼健康主题活动发布了上海市儿童青少年近视率最新监测情况。2024年上海市6-18岁儿童青少年近视率比2023年下降1.5个百分点。为推进近视预防关口前移,上海市眼病防治中心启动了“低龄儿童近视监测与干预服务项目”,聚焦3-6岁近视…

郑钦文首次晋级法网8强 刷新个人最佳战绩

北京时间6月1日晚,在法网女单1/8决赛中,8号种子郑钦文以7-6(5)、1-6、6-3战胜19号种子俄罗斯选手萨姆索诺娃,职业生涯首次跻身法网女单八强,刷新个人赛会最佳战绩。这也是中国选手时隔14年再次闯进法网八强。首盘比赛中,郑钦文两次先被破发但迅速回破,双方战至抢七。最终…

新势力5月销量榜解读 零跑三连冠

零跑汽车再次夺得新势力月销量冠军。6月1日,各大造车新势力发布了5月份的交付数据。零跑汽车连续三个月稳居榜首,鸿蒙智行和理想汽车分别位列第二、第三,销量均重回4万辆。整体来看,5月车市进一步回暖,尤其是极氪获得了最高的环比增速,达37.74%。5月,零跑汽车全系交付再…

江苏城市联赛:南通队4-0客胜泰州队 多点开花完胜对手

北京时间6月1日,江苏城市联赛第3轮比赛中,泰州队主场迎战南通队。下半场,郭凯楠单刀过掉门将后推射破门,为南通队首开纪录。随后张浩楠边路超车后传球,文俊秀破门扩大比分。接着程鑫门前补射得手,进一步巩固了南通队的领先优势。比赛尾声,李贤成过掉对手后单刀推射再下一…

当地回应上海迪士尼游客扭打 因拍照起冲突

5月31日,有网友发布视频称,在上海迪士尼发生了一起情侣和一家三口之间的冲突事件,引发了广泛关注。视频中可以看到双方在现场扭打,周围的人纷纷上前劝阻。据了解,该事件发生在5月31日,地点并非排队区域,而是游客自由打卡拍照的地方。情侣和一家三口因拍照问题产生了争执…

上海迪士尼有游客打架 警方通报 因拍照引发冲突

近日,一段上海迪士尼度假区内情侣与带孩子的夫妇发生争执的视频引起了网友们的广泛关注。根据浦东公安分局的通报,5月31日傍晚6点左右,警方接到报警称迪士尼乐园内有人打架。经初步调查,事件起因是22岁的闫某某与女友在拍照时,36岁的刘某某夫妻的女儿进入了拍摄画面,双方…

生涯首次!郑钦文晋级法网8强 三盘激战创佳绩

北京时间6月1日晚,法网女单第四轮较量中,中国选手郑钦文与俄罗斯选手萨姆索诺娃展开激烈对决。经过三盘大战,郑钦文以2比1胜出,成功晋级八强,创造了个人在法网的最佳战绩。郑钦文和萨姆索诺娃此前曾交手5次,郑钦文以2胜3负略处下风。不过,在红土场上两人唯一的一次交手中…

苏超为何“比赛第一友谊第十四” 城市荣耀与纯粹竞技

足球世界中,许多充满底蕴比拼与恩怨情仇的高手对决,被冠以“德比”之名享誉全球。例如意大利米兰德比、西班牙国家德比、英格兰曼彻斯特德比以及阿根廷河床和博卡青年超级德比等,无不令球迷激动不已,话题度极高。然而在2025年初夏,首届江苏城市足球联赛舞台上,“十三太保…

百名“奇迹宝宝”庆六一 抗癌妈妈的希望之光

“我想当航天员,飞向太空。”“我想当白衣天使,治愈患者。”“我想有个美丽的花园。”31日,在北京大学人民医院综合行政楼10层的小会议厅里,孩子们的欢声笑语充满了整个空间。他们都是在妈妈抗癌过程中出生的“奇迹宝宝”,这次聚会是为了迎接即将到来的“六一”国际儿童节…

上海警方通报迪士尼游客打架 因拍照引发冲突

近日,一段上海迪士尼度假区内两对游客发生纠纷的视频引起了广泛关注。事件发生在5月31日18时左右,浦东公安分局接到报警称迪士尼乐园内有人打架。经初步调查,22岁的闫某某与女友在拍照时,因36岁的刘某某夫妻的女儿进入拍摄画面而引发争执,随后双方发生了肢体冲突。冲突导致…

法网:斯瓦泰克艰难逆转莱巴金娜 豪取25连胜

6月1日,在法国网球公开赛女单第四轮比赛中,四届赛会冠军、5号种子斯瓦泰克以2-1(1-6、6-3、7-5)逆转战胜12号种子莱巴金娜,本赛季第三次击败对手,实现了法网25连胜。波兰名将因此获得了430分和44万欧元奖金。她已连续六年闯入法网八强,并且这是她第11次跻身大满贯八强。…

姆巴佩去年采访称不希望巴黎赢欧冠 未来再夺桂冠

北京时间6月1日,巴黎圣日耳曼在欧冠决赛中以5-0战胜国际米兰,夺得冠军。这一胜利让人们重新关注姆巴佩去年12月份接受CANAL+采访时的言论。当时,姆巴佩被问及“巴黎能否赢得欧冠冠军”的问题时,他表示自己并不希望巴黎立即拿到欧冠奖杯。姆巴佩在那次采访中谈到了许多场内场…

一舟载千年的中式浪漫具象化了 从古至今的文化传承

端午节活动中最具节日气氛的莫过于赛龙舟。“舟”在中国历史悠久,不仅是一种交通工具,还承载着丰富的文化内涵。我国古代造船技艺可以追溯到新石器时代。浙江跨湖桥遗址出土的一艘距今8000年的马尾松独木舟被称为“中华第一舟”。这艘独木舟采用“火焦法”凿制而成,证明了刳…