MySQL专题系统归纳快速上手(常用cmd命令,常用函数汇总


🍷꧔ꦿ整数类型

| 整数类型 | 默认有符号范围 | 默认无符号范围 |

| — | — | — |

| TINYINT[(size)] | -128~127 | 0~255 |

| SMALLINT[(size)] | -32768~32767 | 0~65535 |

| MEDIUMINT[(size)] | -8388608~8388607 | -8388608~8388607 0~16777215 |

| INT[(size)] | -2147483648~2147483647 | 0~4294967295 |

| BIGINT[(size)] | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |

BOOL ,BOOLEAN 是TINYINT(1)的同义词。

INTEGER[(size)] 是INT[(size)]的同义词

🍷꧔ꦿ小数类型

mysql使用浮点数定点数 来存储小数

🍹浮点数FLOAT&DOUBLE

float为单精度浮点数,double为双精度浮点数。

  • 在机内占4个字节,表示范围为:-3.40E+38 ~ +3.40E+38。CPU处理float的速度比处理double快。

单精度浮点数的表示范围:-2^128 ~ +2^128(float的指数范围为-127~128)

  • double的精度高,double消耗内存是float的两倍,

double是双精度浮点数,内存占8个字节,表示范围是-1.79E+ 308~-1.79E+308。

| 小数类型 | 描述 |

| — | — |

| FLOAT | 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |

| DOUBLE | 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |

  • float类型和double类型也可以设参数(允许非标准语法):float(size,d), double(size,d),

size是精度,为有效数字总个数,d是标度。0到23的精度对应FLOAT列的4字节单精度。24到53的精度对应DOUBLE列的8字节双精度。

但是从MySQL 8.0.17开始,不支持非标准的FLOAT(M,D)和DOUBLE(M,D)语法,在未来的MySQL版本中将不再支持它。所以这里不再纠结了。

需要使用近似数值数据值存储时,应使用FLOAT或DOUBLE,不规定精度或位数

🍹定点数DECIMAL

| 小数类型 | 描述 |

| — | — |

| DECIMAL(size,d) | 普通大小浮点数。作为字符串存储的 DOUBLE 类型,允许固定的小数点。 |

其有效取值范围由size和d决定。

  • size是精度,为数据总的长度,d是标度,表示小数点后的长度,保留小数方法为四舍五入。

  • 如DECIMAL(6,2)数据类型中,无法存储42532.5245这个数据,如果写入则会报错,因为小数点后保留两位之后前边小数点前还有五位,总共有七位,而DECIMAL(6,2)只能存储六位数字。

  • DECIMAL(M)等价于DECIMAL(M,0)。同样,语法DECIMAL等价于DECIMAL(M,0),可以通过计算确定M的值。

  • DECIMAL 可能的最大取值范围与DOUBLE 相同,但是其有效的取值范围由M 和D 的值决定。

ʚʕ̯•͡˔•̯᷅ʔɞ字符串类型


| 字符串类型 | 字节大小 | 区别 |

| — | — | — |

| CHAR(M) | 0-255 | 不论实际长度为多少,CHAR(M) 总是存储的字符串都占用M个字节的存储空间,M为存储字符串长度的上限(单位:字节)。如果存储长度小于M的数值,MySQL就会在它的右边用空格字符补足。 |

| VARCHAR(M) | 0-65535 | VARCHAR存储可变长度的字符串,字符串占用存储空间为 实际长度+1 个字节, M为存储字符串长度的上限(单位:字节) |

ʚʕ̯•͡˔•̯᷅ʔɞ日期类型


| 数据类型 | 描述 | 格式 | 补充 |

| — | — | — | — |

| DATE | 日期。 | YYYY-MM-DD。 | 支持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’ |

| DATETIME | 日期和时间的组合。 | YYYY-MM-DD HH:MM:SS。 | 支持的范围是从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ |

| TIME | 时间。 | HH:MM:SS | 支持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’ |

| YEAR | 2 位或 4 位格式的年。 | 4 位格式:1901 到 2155。2 位格式:70 到 69,表示从 1970 到 2069 | 无 |

| TIMESTAMP | 时间戳。 | 格式:YYYY-MM-DD HH:MM:SS。 | 支持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC |

ʚʕ̯•͡˔•̯᷅ʔɞ枚举类型


  • ENUM,对1-255个成员的枚举需要1个字节存储;对于255~65535个成员,需要2个字节存储。最多允许65535个成员。

  • 创建方式:enum(“A”,“B”,“C”,“D”);参数数量即枚举的数量,可以有多个。

  • 枚举类型不区分大小写

✨MySQL函数

==============================================================================

ʚʕ̯•͡˔•̯᷅ʔɞ聚合函数


| 函数 | 描述 | 参数 |

| — | — | — |

| COUNT() | 计数 | 参数为字段名,返回目标字段非空值的行数; 参数为*,即count(*),则返回表中所有记录的总数。 |

| SUM() | 求和 | 字段 |

| AVG() | 求平均值 | 字段 |

| MAX() | 最大值 | 字段 |

| MIN() | 最小值 | 字段 |

ʚʕ̯•͡˔•̯᷅ʔɞ数学函数


| 函数 | 描述 | 参数 |

| — | — | — |

| ABS() | abs(x)返回x的绝对值 | 参数可以是一个数字 ,也可以一个字段。 |

| FLOOR() | floor(x)返回小于或等于x的最大整数 | 参数可以是一个数字,也可以是一个字段。 |

| RAND() | rand()返回0-1之间的随机数。 | 参数可以为空,也可以为一个数字(该数字无意义)。参数也可以是一个字段 |

| TRUNCATE() | truncate(x,y)返回x保留y位小数后的值。 | x和y可以是一个数字 ,也可以是一个字段。 |

| SQRT() | sqrt(x)求参数x的平方根, | x可以是一个数字 ,也可以是一个字段。 |

ʚʕ̯•͡˔•̯᷅ʔɞ字符串函数


参数说明:以上函数的参数,所有str、str1、str2等字符串类型的,都既可以传入单个字符串,也可以传入值为字符串类型的字段。所有x、y、n都既可以传入整数类型的数值,也可以传入整数类型的字段。

“从x个字符开始y个字符长度”的描述不再是从0开始的索引,而是从1开始数,且包含起始值[x,x+y)。

| 函数 | 描述 |

| — | — |

| CONCAT(str1,str2,…,strn) | 返回将多个字符串连接成一个完整的字符串的结果 |

| INSERT(str1,x,y,str2) | 将字符串str1从第x个字符开始,y个字符串长度的子串替换为字符串str2 |

| UPPER(str) | 将字符串str中的所有字母变成大写 |

| LOWER(str) | 将字符串str中的所有字母变成小写 |

| LEFT(str,x) | 返回字符串最左边的x个字符 |

| RIGHT(str,x) | 返回字符串最右边的x个字符 |

| LTRIM(str) | 去掉str左边的空格 |

| RTRIM(str) | 去掉str右边的空格 |

| LPAD(str1,n,str2) | 使用字符串str2对字符串str1最左边进行填充,直到长度为n个字符长度 |

| RPAD(str1,n,str2) | 使用字符串str2对字符串str1最右边进行填充,直到长度为n个字符长度 |

| REPEAT(str,x) | 返回字符串str重复x次的结果 |

| REPLACE(str,a,b) | 使用字符串b替换字符串str中所有出现的字符串a |

| STRCMP(str1,str2) | 比较字符串str1和str2,如果相同会返回0,不同会返回-1。 |

| TRIM(str) | 去掉字符串行头和行尾的空格 |

| SUBSTRING(str,x,y) | 返回字符串str中从x位置起y个字符串长度的字符串 |

ʚʕ̯•͡˔•̯᷅ʔɞ日期和时间函数


| 函数 | 描述 |

| — | — |

| NOW() | 返回当前时间,格式为YYYY-MM-DD HH:MM:SS ,返回值数据类型为DATETIME |

| DATE(DATETIME) | 参数为DATETIME类型的数据或字段,返回值格式为YYYY-MM-DD,返回值数据类型为DATE类型 |

| TIME(DATETIME) | 参数为DATETIME类型的数据或字段,返回值格式为HH:MM:SS,返回值数据类型为TIME类型 |

| YEAR(DATETIME) | 参数为DATETIME类型的数据或字段。返回一个数值,某年。该数值可直接拿去参与计算。 |

| MONTH(DATETIME) | 参数为DATETIME类型的数据或字段。返回一个数值,某月。该数值可直接拿去参与计算。 |

| DAY(DATETIME) | 参数为DATETIME类型的数据或字段。 返回一个数值,某日。该数值可直接拿去参与计算。 |

| ------------------------ | -------------- |

| CURRENT_DATE() | 无参数,返回当前日期,YYYY-MM-DD格式,相当于DATE(NOW()) |

| CURRENT_TIME() | 无参数,返回当前时间,HH:MM:SS格式,相当于TIME(NOW()) |

| CURRENT_TIMESTAMP() | 无参数,相当于now() |

| ------------------------ | ------------- |

| ADDTIME(t1,t2) | 返回两个时间相加的和,参数t1,t2为DATETIME类型的数值或字段,如果结果大于24小时,则会不会跳转到下一天,会存在25:00:00的结果。 |

| DATE_ADD(t1,T) | 返回DATETIME类型的数值或字段滞后一定时间后的结果,结果为DATETIME类型,T的格式见下方示例 |

| DATE_SUB(t1,T) | 返回DATETIME类型的数值或字段超前一定时间后的结果,结果为DATETIME类型,用法同上 |

| DATEDIFF(t1,t2) | 返回t1比t2滞后的天数(t1-t2),参数可以是YYYY-MM-DD HH:MM:SS,也可以是YYYY-MM-DD,也可以是介于其之间的格式(必须有DD。) |

DATE_ADD(t1,T)与DATE_SUB(t1,T)示例

SELECT DATE_ADD(now(),interval 1 DAY);

SELECT DATE_ADD(now(),interval 1 MONTH);

SELECT DATE_ADD(now(),interval 1 YEAR);

SELECT DATE_ADD(now(),interval 1 hour);

SELECT DATE_ADD(now(),interval 1 minute);

SELECT DATE_ADD(now(),interval 1 second);

SELECT DATE_SUB(now(),interval 1 DAY);

SELECT DATE_SUB(now(),interval 1 MONTH);

SELECT DATE_SUB(now(),interval 1 YEAR);

SELECT DATE_SUB(now(),interval 1 hour);

SELECT DATE_SUB(now(),interval 1 minute);

SELECT DATE_SUB(now(),interval 1 second);

SELECT DATEDIFF(‘2022-02-07’,‘2021-12-01’);

SELECT DATEDIFF(‘2022-02-07 12:00’,‘2021-12-01 12:00’);

SELECT DATEDIFF(DATE_ADD(now(),interval 1 day),now())

ʚʕ̯•͡˔•̯᷅ʔɞ其他函数


| 函数 | 描述 |

| — | — |

| IF(expr,μ1,μ2) | 条件判断函数,如果expr成立则执行μ1,否则执行μ2 |

| IFNULL(μ1,μ2) | 如果μ1不为空则返回μ1,否则返回μ2 |

| VERSION() | 获取MySQL版本号 |

示例

select if(score>85,‘优秀’,‘普通’) from table1;

✨SQL语句

============================================================================

ʚʕ̯•͡˔•̯᷅ʔɞ注释


sql语句中的注释写法:两个“-”符号加一个空格。

– xxxxxxxxxxxxxxx

ʚʕ̯•͡˔•̯᷅ʔɞ关于数据库


🍷꧔ꦿ查看所有数据库

show databases;

🍷꧔ꦿ创建一个数据库

create database database_name;

🍷꧔ꦿ创建一个数据库并先判断是否存在:

如果用一个已经存在的数据库的名字来创建,则会报错。

可以用以下命令解决,如果存在则不再创建,如果不存在则去创建。

create database if not exists database_name;

🍷꧔ꦿ创建名字含特殊字符的数据库

如果数据库的名称含有除数字、字母、下划线之外的特殊字符,应在名称两边用``标注。

`符号在tab键上方,不是引号。

以短横线-为例:

create database database1-name;

🍷꧔ꦿ删除数据库

drop database database1-name

🍷꧔ꦿ选择某个数据库

选择某个数据库后,以便后边执行关于该数据库中数据表的命令时不用再声明数据库。

use database_name;

🍷꧔ꦿ查看当前使用的数据库

select database()


ʚʕ̯•͡˔•̯᷅ʔɞ关于数据表


执行完选择数据库命令后:

🍷꧔ꦿ查看所有表格

show tables;

🍷꧔ꦿ创建一个数据表

创建一个数据表时,至少需要指定一个字段及其数据类型。

(这里指定字段id为例,类型为int):

create table table_name(id int);

数据表中的括号中,填写字段属性。规则为先写字段名,然后空一格写字段值的数据类型 ,接着写以下一系列属性:

| 属性 | 简写 | 描述 |

| — | — | — |

| primary key | PK | 主键 |

| not null | NN | 非空 |

| unique | UQ | 唯一索引 |

| binary | BIN | 二进制数据 |

| unsigned | UN | 无符号(非负数) |

| zero fill | ZF | 填充0(即2在int(5)中显示为00002) |

| auto increment | AI | 自增 |

| Generated Column | G | |

| Default/Experession | 无 | 默认值 |

不同字段之间,用英文逗号隔开。

以创建一个名为“students”的表格为例

其中 字段id为int类型,且非空,主键,自增;

字段name为varchar类型,长度上限为30个字节;

字段age为tinyint类型,且非负,默认为18;

字段high为decimal类型,总长度为5位,保留二位小数;

字段gender为枚举类型,可以选择的值有’男’,‘女’,‘保密’。且默认为保密。

字段cls_id为int类型。

sql代码如下:

create table students(

id int not null primary key auto_increment,

name varchar(30),

age tinyint unsigned default 18,

high decimal(5,2),

gender enum(‘男’,‘女’,‘保密’) default ‘保密’,

cls_id int

);

非空、自增这些属性之间,不要求顺序。代码中不可以使用其简写形式。

在MySQL WorkBench中操作时,如果是手动创建,则也可以去勾选以上表格中的简写。

🍷꧔ꦿ查看表结构

desc students;

describe students;

会显示表中每个字段的属性。

🍷꧔ꦿ添加表字段

  • alter table 数据表名 add 字段名 字段类型

以在students表格中添加一个名为birthday的字段为例,字段类型为DATE类型:

alter table students add birthday DATE;

🍷꧔ꦿ修改表字段

①只修改字段的数据类型及约束,不能修改字段名:

  • alter table 表格名 modify 字段名 字段类型 约束

以把birthday字段的默认值修改为’1900-01-01’为例:

alter table students modify birthday DATE default ‘1900-01-01’;

②修改字段名及其他

  • alter table 表格名 change 旧字段名 新字段名 字段类型 约束

以把字段birthday修改我bdy为例,同时修改默认值为’1912-01-01’为例:

alter table students change birthday bdy DATE default ‘1912-01-01’;

🍷꧔ꦿ删除字段

  • alter table 数据表名 drop 字段名;

以删除字段high为例。

alter table students drop high;

🍷꧔ꦿ添加一条数据

当前的students表格,经过上述操作,所剩字段依次为:

| id | name | age | gender | cls_id | bdy |

| — | — | — | — | — | — |

添加一条数据时,必须依次写入,即使有默认值代码中也不能缺少。必须一一对应。

insert into students values(1,‘张三’,20,‘男’,5,‘2002-01-01’);

🍷꧔ꦿ添加多条数据

即在添加一条数据的基础上:

  • insert into students values(),(),()

每行数据的括号之间用逗号隔开。

🍷꧔ꦿ添加指定字段数据

以只添加name和cls_id两个字段为例:

insert into students (name,cls_id) values (‘朱元璋’,3);

添加指定字段时必须用括号括着字段名。

添加多行指定字段的数据时同样使用逗号隔开括号:,

insert into students (name,cls_id) values (‘xx’,3),(‘xx’,4);

🍷꧔ꦿ通过下标添加枚举类型数据

添加枚举类型数据时可以直接添加,也可以通过下标添加

以添加字段gender为例,该字段为枚举类型,值依次有“男,女,保密”:

insert into students (name,gender) values (‘judy’,1);

下标从1开始计数。

🍷꧔ꦿ修改数据

以将cls_id全部改为8为例:

update students set cls_id=8;

将name为张三的cls_id改为9:

update students set cls_id =8 where name=‘张三’;

修改数据执行此两行命令时,可能会遇到报错:

  • Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

就是说mysql在safe-updates模式中,如果没有where或者where后边跟的不是主键,就不允许这样修改数据,这样太不安全。

可以使用以下语句退出安全修改模式:

SET SQL_SAFE_UPDATES = 0;

也可以将where约束条件换为:where name=‘张三’ and id>=1即可解决。

如果要修改多个字段,以将name为张三的cls_id修改为1,gender修改为’女’为例:

update students set cls_id =1,gender=‘女’ where name=‘张三’;

🍷꧔ꦿ删除数据

不加where约束条件,则删除全部数据。不建议轻易尝试。

delete from students;

删除name为张三的数据。

delete from students where name=‘张三’;

🍷꧔ꦿ逻辑删除

上边的删除数据为物理删除,可能会造成数据紊乱,影响与其他表格的数据关联。

一般更好用的是逻辑删除,不是物理删除。

即新添加一个字段,把想要删除的字段值标记为0,把保留的字段值标记为1.

以添加一个is_del字段为例,默认为1:

alter table students add is_del INT DEFAULT 1;

将name为’朱元璋’的is_del标记为0。

update students set is_del=0 where name=‘朱元璋’;

ʚʕ̯•͡˔•̯᷅ʔɞ查询语句


🍷꧔ꦿ查询表所有数据

* 表示所有,from后边加表明。

select * from students;

🍷꧔ꦿ查询指定字段

字段之间用 英文逗号 隔开。

select name,age from students;

🍷꧔ꦿ字段重命名

查询时给字段重命名可以方便展示

select name as ‘姓名’,gender as ‘性别’ from students;

🍷꧔ꦿ表重命名

多表查询时会用到这种写法。

select s.gender from students as s;

🍷꧔ꦿ查询时去重

🍹去重一个字段:

select distinct 字段名 from 表名;

select distinct name from students;

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

权威指南-第一本Docker书

引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

image

image

image

image

关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!

t distinct name from students;

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-q1LNED2E-1711149865571)]
[外链图片转存中…(img-0Pb6IUFt-1711149865572)]
[外链图片转存中…(img-63O0k8tu-1711149865572)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-DRwZTtqC-1711149865573)]

最后

权威指南-第一本Docker书

引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

[外链图片转存中…(img-LQc4nwbN-1711149865573)]

[外链图片转存中…(img-d7xImwwj-1711149865574)]

[外链图片转存中…(img-CkCoeYYL-1711149865574)]

[外链图片转存中…(img-vqYxbWJ4-1711149865575)]

关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值