《MySQL基础 | 从0到1学会写SQL》

张开发
2026/4/11 21:24:09 15 分钟阅读

分享文章

《MySQL基础 | 从0到1学会写SQL》
思维导图前言本文是MySQL系列的第一章节目的是最求让大家尽可能快的学会使用MySQL,之后的原理会在进阶篇进行介绍对于学技术而言我认为会用知道原理。我们大部分人都不知道角动量守恒但是这不妨碍我们骑小电驴。所以会用知道原理。QMySQL是什么呢A是个数据库。Q要怎么用呢A用SQL来操作。这就是本文要解决的两个问题。MySQL的核心概念MySQL数据库的核心概念数据库数据库管理系统SQL语句简称全称英文名数据库存储数据的仓库有组织的进行存储数据DataBase数据库管理系统操作和管理数据库的大型软件DataBase Management SystemSQL用来操作关系型数据库的语言统一标准Structured Query LanguageSQL(结构化查询语言) 语句是什么内涵是操作关系型数据库的语言无论面对什么样的关系型数据库都可以操作MySQL SQL Server Oracle等都可以分类根据不同的对象和功能SQL语句主要分为四类DDL,DML,DQL,DCLDDL(Data Defintion Language)用于定义数据库的对象数据库、表、字段如创建 / 删除数据库、创建 / 修改表结构等DML(Data Manipulate Language)用于对数据库表中的数据进行增、删、改操作DQL(Data Query Language)用于查询数据库表中的数据,使用频率最高DCL(Data Control Language)用于管理数据库用户、控制数据库访问权限如创建用户、授予 / 撤销权限等SQL语句要怎么写呢SQL的通用语法SQL 语句可单行或多行书写必须以分号结尾可使用空格(可以是1个可以是多个)来增强语句可读性不影响执行结果MySQL 中的 SQL 语句不区分大小写DDL(数据定义语言)DDL 作用于数据库、数据表、字段等结构层级对象其核心用于定义与维护数据架构不操作业务明细数据。DDL主要分为对数据库操作和对表操作。代码注意点说明[]里面的都是可选参数。在不指定参数时会自动使用MySQL服务的全局默认配置分版本而不同。不过目前大家也不需要知道那么多。对数据库操作1.创建数据库create database[if not exists]数据库的名字[default charset 字符集] [collate 排序规则]2.删除数据库drop database [if exists] 数据库的名字3.使用/切换数据库use 数据库的名字;4.查询数据库查询数据库又分为查询所有数据库和查询当前数据库1.查询所有数据库show databases;2.查询当前数据库select database();对表操作1.创建表create table 表的名字( 字段1 字段1的类型 [comment 字段1的注释], 字段2 字段2的类型 [comment 字段2的注释], ..... 字段n 字段n的类型 [comment 字段n的注释] )[comment 表的注释]要注意咯最后一个字段是没有 , 的字段定义的格式字段名 类型 [约束] [注释]说到表中的数据那么有哪些类型呢主要分为三种数值类型、字符串类型、日期时间类型要根据不同的应用场景选择不同的类型数值类型顾名思义用于存储整数、小数等数值数据目的是 “节省存储空间” 和 “保证精度”类型大小(Byte)有符号SIGNED范围无符号UNSIGNED范围具体描述TINYINT1(-128, 127)(0, 255)小整数值如年龄、状态码SMALLINT2(-32768, 32767)(0, 65535)中整数值如数量较少的 IDMEDIUMINT3(-8388608, 8388607)(0, 16777215)大整数值INT/INTEGER4(-2147483648,2147483647)(0,4294967295)常用大整数值如用户 ID、订单 IDBIGINT8(-2^63, 2^63-1)(0, 2^64-1)极大整数值如海量数据的 IDFLOAT4(-3.4E38, 3.4E38)0 和 (1.2E-38, 3.4E38)单精度浮点数精度较低不适合金额DOUBLE8(-1.8E308, 1.8E308)0 和 (2.2E-308,1.8E308)双精度浮点数精度较高仍不适合金额DECIMAL可变依赖 M(精度)和 D(标度依赖 M(精度)和 D(标度定点小数精确存储适合金额、分数等字符串类型适用于存储文本、符号等字符数据分类是 “定长与变长”类型大小(Byte)具体描述CHAR0-255定长字符串设定长度后无论实际值多长均占用固定字节VARCHAR0-65535变长字符串仅占用实际值长度 1-2 字节的长度标识节省空间TINYTEXT0-255短文本适合存储少量文字如备注TEXT0-65535长文本适合存储文章、评论等MEDIUMTEXT0-16777215中等长度文本LONGTEXT0-4294967295极大文本适合存储超大文本如日志TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB同其对应 TEXT 类型二进制数据如图片、文件不推荐直接存储建议存文件路径时间日期类型适用于存储日期、时间或混合时间数据核心是 “应用的准确性”类型大小(Byte)范围格式具体描述DATE31000-01-01 至 9999-12-31YYYY-MM-DD仅日期如生日TIME3-838:59:59 至 838:59:59HH:MM:SS仅时间如上学时间YEAR11901 至 2155YYYY仅年份如建国年份DATETIME81000-01-01 00:00:00 至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS日期 时间如订单创建时间不依赖时区TIMESTAMP41970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS日期 时间依赖时区自动更新适合记录 “最后修改时间”接着话说回来2.删除表1.单纯地删除表drop table [if exists] 表的名字;2.删除指定表并且重新创建该表truncate table 表的名字;3.修改表1.添加字段alter table 表的名字 add 字段名 类型(长度) [comment 注释] [约束]2.修改字段修改数据类型and修改字段名和字段类型alter table 表的名字 modify 字段名 新的数据类型(长度);alter table 表的名字 change 旧字段名 新字段名 类型(长度)[comment 注释][约束];3.删除字段alter table 表的名字 drop 字段名;4.修改表的名字alter table 表的名字 rename to 新的名字;4.查询表查询当前数据库所有表show tables;查询表结构desc 表的名字;查询指定表的建表语句show create table 表的名字;DML(数据操作语言)DML用于对表中的数据进行 增 删 改 操作不改变表的结构添加数据insert其实就是增加一行数据1.给指定的字段添加数据insert into 表的名字(字段名1字段名2...) values (值1值2...);字段名与值必须一一对应顺序、数量、类型需匹配字符串和日期类型的值必须用单引号包裹2.给全部字段添加数据insert into 表的名字 values(值1值2...);其实不推荐这样写因为不直观3.批量添加数据insert into 表的名字(字段名1字段名2...) values (值1值2...),(值1值2...); insert into 表的名字 values(值1值2...),values (值1值2...),values (值1值2...);字段顺序与值顺序必须一致字符串、日期类型必须用单引号包裹插入的值需符合字段约束如长度、范围、非空等修改数据:updateupdate 表的名字 set 字段名1 值1字段名2 值2,....[where 条件];可以同时修改多个字段where用来限定要修改的范围删除数据:deletedelete from 表的名字 [where 条件];如果没有where那么会删除整张表的数据delete删除的是行数据不能删除单个字段的数据DQL(数据查询语言)是最常用的SQL类型支持很多复杂操作条件筛选、排序、分组、分页等首先我们创建一张emp表后面的操作都是基于这张emp表来进行的完整的结构 (这是编写的顺序)select 字段列表 -- 要查询的字段如 name, age 或 * 表示所有字段 from 表名列表 -- 要查询的表单表查询仅需写表名 where 条件列表 -- 行级筛选条件如 age 20 group by 分组列表 -- 按指定字段分组如按 gender 分组 having 分组后条件列表 -- 分组后的筛选条件如 count(*) 5 order by 排序字段列表 -- 按指定字段排序如 age ASC 升序 limit 分页参数 -- 分页查询如 LIMIT 0, 10 表示第 1 页10 条/页这是执行的顺序(从左到右)基础查询1.查询多个字段select 字段1,字段2,字段3.....from 表的名字; select * from 表的名字;-- 这种不推荐2.设置别名-- 方式1使用 as可读性高 ​ select 字段1 as 别名1, 字段2 as 别名2 from 表的名字; ​ -- 方式2省略 as简洁 ​ select 字段1 别名1, 字段2 别名2 from 表的名字;3.去除重复记录select distinct 字段列表 from 表的名字;条件查询where通过where 来过滤符合条件的行数据支持比较运算符和逻辑运算符常用比较运算符 逻辑运算符号 聚合函数聚合函数将一列数据进行 “纵向计算”将一列数据当一个整体返回单个结果值比较运算符作用逻辑运算符作用大于and 或 并且大于等于or 或 ||或小于not 或 否定小于等于或者不等于聚合函数作用等于count(字段)统计非NULL值的记录数between......and........在[指定范围内]含边界max(字段)求该列的最大值in(.....)在指定集合中min(字段)求该列的最小值like 占位符模糊匹配avg(字段)求该列的平均值is null是空sum(字段)求该列的总和is not null不是空模糊匹配占位符如下注意_匹配单个字符null值不参与计算%匹配多个字符select 聚合函数(字段列表) from 表名 [ where 条件 ];分组查询group by通过 group by指定字段分组将相同字段值的行并为一组对每组进行聚合计算男女员工工作地点等select 分组字段, 聚合函数(字段)from表名 [where条件] group by分组字段[having分组后条件];where: 分组前的筛选过滤条件筛选行数据不满足条件的行不参与分组.having分组后的筛选过滤条件筛选分组结果不满足条件的分组不显示.where :不能使用聚合函数having可以使用聚合函数.排序查询order by通过 order by 按照指定字段对查询结果排序(升序和降序)select 字段列表 from 表名 [ where 条件 ] [ group by 分组字段 ] [ having 分组后条件 ] order by 字段1 排序方式1, 字段2 排序方式2 ...;asc:升序 (默认)desc:降序当多字段排序时先按字段 1 排序字段 1 值相同的行再按字段 2 排序。分页查询 limit通过 limit 实现分页查询避免一次性返回大量的数据是MySQL的方言Oracle 用 rownumselect 字段列表 from 表名 [ 其他子句 ] limit 起始索引, 查询记录数;起始索引从 0 开始表示第 1 条数据的索引为 0计算公式起始索引页码-X每页记录数DCL(数据控制语言)DCL 用于管理数据库用户和控制访问权限开发人员使用较少所以这里大家了解一下就行了1.管理用户核心的字段Host用户可访问的主机localhost 表示仅本地访问% 表示任意主机访问User用户名authentication_string用户密码加密存储1.查询用户 MySQL 中所有用户信息存储在系统数据库mysql的user表中select * from mysql.user;2.新建用户create user 用户名主机名 identified by 密码;密码长度至少 4 位MySQL 8.0 默认密码较严需包含字母、数字、符号3.修改用户密码alter user 用户名主机名 identified with mysql\_native\_password BY 新密码;mysql_native_password指定密码加密方式4.删除用户drop user 用户名主机名;权限控制权限描述all所有权限select查询数据权限仅 DQLinsert插入数据权限仅 DMLupdate修改数据权限仅 DMLdelete删除数据权限仅 DMLalter修改表结构权限仅 DDLdrop删除数据库 / 表 / 视图权限仅 DDLcreate创建数据库 / 表权限仅 DDL1. 查询用户权限show grants for 用户名主机名;2. 授予权限grant 权限列表 on 数据库名.表名 to 用户名主机名;3. 撤销权限revoke 权限列表 on 数据库名.表名 from 用户名主机名;授予 / 撤销权限后无需重启 MySQL权限立即生效SQL语句到这里就结束了相信大家在阅读完本文已经熟悉了SQL语句现在大家可以去leetcode上写 SQL50题了。如果本文有不足欢迎大家在评论区多多指正共同成长无限进步。谢谢大家

更多文章