MySQL是一个关系型数据库管理系统,主要用来存储、管理数据。
官网:
MySQL是一个服务器-客户端系统。
服务器是负责所有数据访问和处理的一个软件,也就是DBMS。
客户端是与MySQL进行数据库通信的应用程序。客户端发送SQL命令到MySQL服务器,然后接收服务器的响应。市面上有很多常用的客户端软件:SQLyog、Navicat等。
我们说的安装MySQL,其实就是安装DBMS服务器。
我们安装MySQL服务器之后,可以在它上面创建很多数据库,然后在每一个数据库上创建很多表
这里我们在Windows系统下安装,软件已经放在百度云盘里,大家可以自行下载。
一直下一步直到安装完成
默认安装位置:
C:\ProgramFiles\MySQL\2.2安装Navicat
Navicat是一个连接MySQL的客户端。
官网:
这里我也给大家下载到百度云盘里了,大家自行安装即可。支持正版,你懂得!
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.备份和恢复数据库
插入的数据的类型应该和列名的类型一致
插入的数据位置应该和列的位置一致
insertintotable_name(column1,column2)values(1,"知否君");(2-1)*5,5SELECT*FROMuserslimit5,53.3.8多表查询
根据相关列查询
,,_id=3.3.9子查询
子查询又叫做嵌套查询,从查询的结果里面再次查询
select*fromempwhereemp_no=(selectemp_nofromempwherename="知否君”)andage183.3.10合并查询union
union:就是将两个查询结果合并在一起,并去重
,,3.3.11外连接
左外连接:左侧的数据完全显示
,,_id=
右外连接:右侧的数据完全显示
,,_id=
数值型就是用来表示数值大小的类型,例如表示年龄,表示金额等等。
数值型表示的范围分为无符号和有符号。有符号指既可以存正数又可以存负数,无符号只能存大于等于0的数。
占用1个字节,带符号的数值范围是-128到127。无符号的数值范围是0到255。
我们在设置年龄、状态等数值在100以下的属性都可以设置成tinyint的。
占用2个字节,带符号的数值范围是-2^15到2^15-1,无符号的数值范围是0到2^16-1。
占用3个字节,带符号的数值范围是-2^23到2^23-1,无符号的数值范围是0到2^24-1。
占用4个字节,带符号的数值范围是-2^31到2^31-1,无符号的数值范围是0到2^32-1。
占用8个字节,带符号的数值范围是-2^63到2^63-1,无符号的数值范围是0到2^64-1。
占用4个字节,单精度小数。
占用8个字节,双精度小数。
可以设置更加精确的小数位,其中M是数值的总位数,最大65位。D是小数点后面的数字位数,最大30位。
如果想要设置精度更高的数值,可以设置成decimal类型的。
在MySQL中,int(1)和int(10)的主要区别在于显示宽度,而不是存储范围。无论是指定为int(1)还是int(10),它们所能存储的整数值范围都是一样的,都是-2^31到2^31-1。
当设置填充0时,两者的区别更明显:
固定长度字符串,最大可以存储255个字符。
可变长度字符串,最大存储65535字节,其中3个字节用来记录存储空间大小。
如果表的编码是utf8,则最多可以存储(65535-3)/3=21844个字符。
如果表的编码是gbk,则最多可以存储(65535-3)/2=32766个字符。
最多可以存储2^16个字符。
最多可以存储2^32个字符。
日期型主要用来存储和时间、日期相关的数值。
主要用来存储时分秒格式的数据:17:53:32
主要用来存储yy-MM-dd格式的数据
主要用来存储yy-MM-ddHH:mm:ss格式的数据
时间戳,其实格式也是yy-MM-ddHH:mm:ss,新增或者修改数据时可以自动设置该值,一般默认值需要设置为CURRENT_TIMESTAMP。
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);
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设置了唯一索引,所以插入失败。
普通索引:就是给任意列设置索引
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。
如果是组合索引,那就选择多个字段。
CREATEUSER'zhifoujun'@'localhost'IDENTIFIEDBY'123456';8.2修改密码
root用户修改其他用户密码
SETPASSWORDFOR'zhifoujun'@'localhost'=PASSWORD('123456')
自己修改自己的密码
SETPASSWORD=PASSWORD('123456')
8.3删除用户如果用户host不是%,需要根据设置的ip删除
DROPUSER'zhifoujun'@'localhost';
如果用户host是%,直接根据名字删除
DROPUSERzhifou9.权限管理9.1给用户授权
grant权限列表on数据库.表to'用户名’@’登录位置'密码
给用户zhifou设置查询、新增权限
GRANTSELECT,'zhifou'@'localhost';9.2收回用户权限
REVOKESELECT,'zhifou'@'localhost';
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。