一篇文章手把手教会你学会MySQL

1.认识MySQL1.1认识MySQL

MySQL是一个关系型数据库管理系统,主要用来存储、管理数据。

官网:

MySQL是一个服务器-客户端系统。

服务器是负责所有数据访问和处理的一个软件,也就是DBMS。

客户端是与MySQL进行数据库通信的应用程序。客户端发送SQL命令到MySQL服务器,然后接收服务器的响应。市面上有很多常用的客户端软件:SQLyog、Navicat等。

我们说的安装MySQL,其实就是安装DBMS服务器。

1.2MySQL结构

我们安装MySQL服务器之后,可以在它上面创建很多数据库,然后在每一个数据库上创建很多表

2.安装MySQL2.1安装服务端

这里我们在Windows系统下安装,软件已经放在百度云盘里,大家可以自行下载。

一直下一步直到安装完成

默认安装位置:

C:\ProgramFiles\MySQL\
2.2安装Navicat

Navicat是一个连接MySQL的客户端。

官网:

这里我也给大家下载到百度云盘里了,大家自行安装即可。支持正版,你懂得!

3.SQL语句3.1DDL:数据定义语句,创建数据库、表3.1.1数据库相关

1.创建数据库db1

CREATEDATABASEIFNOTEXISTSdb1;

2.创建一个使用utf8字符集的db2数据库

CREATEDATABASEIFNOTEXISTSdb2CHARACTERSETutf8;

3.创建一个使用utf8字符集和排序规则的数据库

CREATEDATABASEIFNOTEXISTSdb3CHARACTERSETutf8COLLATEutf8_bin;

4.查看所有的数据库

SHOWDATABASES;

5.删除数据库

DROPDATABASEdb1

6.备份数据库

mysqldump-u[username]-p[password][database_name][]

例如:

mysqldump-uroot-p123456mydatabaseE:\\

7.恢复数据库

进入到mysql的可执行命令下执行

sourceE:\\
3.1.2表相关

1.创建表

createtabletable_name

创建表时指定字符集和排序规则,如果不指定,默认按照设置数据库时的字符集和排序规则。

CREATETABLE`sys_user`(`id`bigintNOTNULLAUTO_INCREMENTCOMMENT'id',`status`tinyint(1)DEFAULT'0'COMMENT'状态(1:正常0:停用)',`create_time`timestampNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`update_time`timestampNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'更新时间',)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_general_ciCOMMENT='用户表';

2.删除表

droptabletable_name;

3.修改表名

renametableold_nametonew_name;

4.查看表结构

desctable_name;

5.添加列

altertabletable_nameaddcol_name;ALTERTABLEusersADDtypedatatypeAFTERname;ALTERTABLEusersADDtypedatatypeBEFOREname;

6.修改列

修改列名和数据类型altertabletable_namechangeold_col_namenew_col_namenew_datatype;

7.删除列

altertabletable_namedropcolumncol_name;
3.1.3Navicat创建数据库和表

其实在日常工作中,大部分人都是使用MySQL客户端创建数据库和表

1.新建数据库

2.新建表

3.备份和恢复数据库

3.2DML:数据操作语句,增删改语句3.2.1新增语句

插入的数据的类型应该和列名的类型一致

插入的数据位置应该和列的位置一致

insertintotable_name(column1,column2)values(1,"知否君");(2-1)*5,5SELECT*FROMuserslimit5,5
3.3.8多表查询

根据相关列查询

,,_id=
3.3.9子查询

子查询又叫做嵌套查询,从查询的结果里面再次查询

select*fromempwhereemp_no=(selectemp_nofromempwherename="知否君”)andage18
3.3.10合并查询union

union:就是将两个查询结果合并在一起,并去重

,,
3.3.11外连接

左外连接:左侧的数据完全显示

,,_id=

右外连接:右侧的数据完全显示

,,_id=

4.常用数据类型4.1数值型

数值型就是用来表示数值大小的类型,例如表示年龄,表示金额等等。

数值型表示的范围分为无符号和有符号。有符号指既可以存正数又可以存负数,无符号只能存大于等于0的数。

4.1.1tinyint

占用1个字节,带符号的数值范围是-128到127。无符号的数值范围是0到255。

我们在设置年龄、状态等数值在100以下的属性都可以设置成tinyint的。

4.1.2smallint

占用2个字节,带符号的数值范围是-2^15到2^15-1,无符号的数值范围是0到2^16-1。

4.1.3mediumint

占用3个字节,带符号的数值范围是-2^23到2^23-1,无符号的数值范围是0到2^24-1。

4.1.4int

占用4个字节,带符号的数值范围是-2^31到2^31-1,无符号的数值范围是0到2^32-1。

4.1.5bigint

占用8个字节,带符号的数值范围是-2^63到2^63-1,无符号的数值范围是0到2^64-1。

4.1.6float

占用4个字节,单精度小数。

4.1.7double

占用8个字节,双精度小数。

4.1.8decimal(M,D)

可以设置更加精确的小数位,其中M是数值的总位数,最大65位。D是小数点后面的数字位数,最大30位。

如果想要设置精度更高的数值,可以设置成decimal类型的。

4.1.9注意

在MySQL中,int(1)和int(10)的主要区别在于显示宽度,而不是存储范围。无论是指定为int(1)还是int(10),它们所能存储的整数值范围都是一样的,都是-2^31到2^31-1。

当设置填充0时,两者的区别更明显:

4.2字符串4.2.1char(size)

固定长度字符串,最大可以存储255个字符。

4.2.2varchar(size)

可变长度字符串,最大存储65535字节,其中3个字节用来记录存储空间大小。

如果表的编码是utf8,则最多可以存储(65535-3)/3=21844个字符。

如果表的编码是gbk,则最多可以存储(65535-3)/2=32766个字符。

4.2.3text

最多可以存储2^16个字符。

4.2.4longtext

最多可以存储2^32个字符。

4.3日期型

日期型主要用来存储和时间、日期相关的数值。

4.3.1time

主要用来存储时分秒格式的数据:17:53:32

4.3.2date

主要用来存储yy-MM-dd格式的数据

4.3.3datetime

主要用来存储yy-MM-ddHH:mm:ss格式的数据

4.3.4timestamp

时间戳,其实格式也是yy-MM-ddHH:mm:ss,新增或者修改数据时可以自动设置该值,一般默认值需要设置为CURRENT_TIMESTAMP。

5.函数5.1聚合函数5.1.1统计

count:返回统计的行数,count(*)返回总记录数,count(列名)返回某列不为null的总记录数

语法:

selectcount(*)/count(列名)fromtableNamewhere条件

例1:返回订单总数

selectCOUNT(*)from`order`

例2:返回用户名不为NULL的总订单数

selectCOUNT(name)from`order`
5.1.2合计

SUM:计算某列的总和

selectSUM(amount)from`order`
5.1.3平均值

AVG:计算某列的平均值

selectAVG(amount)from`order`
5.1.4最大值

MAX:计算某列的最大值

selectMAX(amount)from`order`
5.1.5最小值

MIN:计算某列的最小值

selectMIN(amount)from`order`
5.2字符串5.2.1字符串长度

LENGTH:返回字符串的长度

selectLENGTH("知否技术");selectLENGTH(name)from`order`;
5.2.2转大写

UPPER:英文小写转大写

selectUPPER("zhifoujishu");selectUPPER(name)from`order`;
5.2.3转小写

LOWER:英文大写转小写

selectLOWER("ZHIFOUJISHU");selectLOWER(name)from`order`;
5.2.4拼接

CONCAT:拼接字符串

SELECTCONCAT('知否','','技术');
5.2.5替换

REPLACE:替换字符串

SELECTREPLACE('知否','否','否技术');
5.2.6截取

SUBSTRING:截取字符串。

第1个参数:要截取的字符串

第2个参数:起始位,默认从1开始

第3个参数:截取后字符串的长度

SELECTSUBSTRING('公众号知否技术',2,5);

5.3时间5.3.1获取当前日期时间
selectCURRENT_DATE();HH:mm:ssselectNOW();日期相加-天数selectDATE_SUB("2024-09-18",INTERVAL1MONTH);或者ALTERTABLEusersADDUNIQUEINDEXuname_index(uname);

然后插入两条记录

INSERTINTOusers(uname,email)VALUES('zhifoujun','124@');INSERTINTOusers(uname,email)VALUES('zhifoujun','456@');

因为uname设置了唯一索引,所以插入失败。

7.3普通索引

普通索引:就是给任意列设置索引

CREATEINDEXuname_indexONusers(uname);#或者ALTERTABLEusersADDINDEXuname_index(uname);
7.4组合索引

组合索引:一个索引包含多个列

CREATEINDEXindexNameONtable_name(column_name1,column_name2,);

组合索引遵循最左前缀原则:就是如果你的SQL语句中用到了组合索引中的最左边的索引,那么这个索引就有效。

举个例子:我们创建一个用户表:

CREATETABLE`z_user`(`id`INT,`name`VARCHAR(50),`age`INT);

然后创建索引,后面使用abc代表这三个索引字段

CREATEUNIQUEINDEXindex_nameONz_user(id,name,age);

索引有效的情况:abc、ab、ac、a

SELECT*FROMt_userWHEREid=1ANDNAME='zhifoujun'ANDage=21;SELECT*FROMt_userWHEREid=1ANDNAME='zhifoujun';SELECT*FROMt_userWHEREid=1ANDage=21;SELECT*FROMt_userWHEREid=1;

索引失效情况:b、c、bc

SELECT*FROMt_userWHERENAME='zhifoujun';SELECT*FROMt_userWHEREage=21;SELECT*FROMt_userWHERENAME='zhifoujun'ANDage=21;
7.5Navicat设置索引

使用Navicat设置索引非常简单,索引类型选择NORMAL,索引方法选择BTREE。

如果是组合索引,那就选择多个字段。

8.用户管理8.1创建用户
CREATEUSER'zhifoujun'@'localhost'IDENTIFIEDBY'123456';
8.2修改密码

root用户修改其他用户密码

SETPASSWORDFOR'zhifoujun'@'localhost'=PASSWORD('123456')

自己修改自己的密码

SETPASSWORD=PASSWORD('123456')
8.3删除用户

如果用户host不是%,需要根据设置的ip删除

DROPUSER'zhifoujun'@'localhost';

如果用户host是%,直接根据名字删除

DROPUSERzhifou
9.权限管理9.1给用户授权

grant权限列表on数据库.表to'用户名’@’登录位置'密码

给用户zhifou设置查询、新增权限

GRANTSELECT,'zhifou'@'localhost';
9.2收回用户权限
REVOKESELECT,'zhifou'@'localhost';

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐