MySql基础

本文最后更新于:2021年9月2日 早上

🌈MySql基础

## 🛢️数据库常用命令:

🩺基本命令

连接数据库

1
mysql -h [数据库的服务器IP地址] -u root -p

创建数据库

1
2
create database [数据库名];
create database if not exists [数据库名]; # 健壮的创建数据库

查看数据库

1
show databases;

打开自己的数据库

1
use [数据库名];

删除数据库

1
drop database [数据库名];

🕵️‍♀️查数据库

查找数据库使用的字符集

1
show variables like 'character%';

查看当前所支持的字符集

1
2
show character set;
mysql defanlt character set [字符集]; # 字符集的设置

查看存储引擎

1
show engines;

查看当前库中多少个表

1
show tables;

查看当前库中多少个表带上表的类型

1
show full tables;

📑创建表

创建表

1
2
create table [表名] (id int [not null] primary key);
# 列名 数据类型 是否可为空 是否主键

创建带有自增约束定义

1
2
:create table [表名] (id int [not null] auto_increment);
# 列名 数据类型 是否可为空 约束定义

查看表项目

1
2
3
desc [表名];
# 或者
describe [表名];

保存表结构

1
show create table [表名];

查询表的所有数据

1
select * from [表名];

✍️改表

删除表

1
drop table [表名];

清空表数据

1
truncate table [表名];

删除列

1
alter table [表名] drop [列名];

复制表(只用来复制表结构)

1
create table 新表名 like 被复制的表名;

复制表(用来复制表内容)

1
create table [新表名] as [被复制的表名];

修改表名

1
2
3
alter table [旧表名] rename [新表名];
# 或者
alter table [旧表名] to [新表名];

添加表结构

1
2
3
4
alter table [表名] add (id int [not null]) [参数];
# 列名 数据类型 是否可为空
first (第一行)
after [列名] (在某一列的后面加入)

更改表结构

1
alter table [表名] modify [列名] [要修改的属性];

更改列顺序

1
alter table [表名] modify [列名] after [列名];

删除表结构

1
alter table [表名] drop [列名1],[列名2];

修改列名

1
alter table [表名] change [老列名] [新列名] char(10);

添加字段

1
2
alter table [表名] add [行名];
# 第一行:first

删除字段

1
alter table [表名] drop [行名];

修改字段顺序

1
alter table [表名] modify [行1] after [行2];

添加主键

1
alter table [表名] add primary key [列名];

删除主键

1
alter table [表名] drop primary key [列名];

插入数据

1
2
3
insert into [表名] ([列名]1,[列名2],[列名3]) values ([列名1的值],[列名2的值],[列名3的值]);
# 或者
insert into [表名] values ([列名1的值],[列名2的值],[可为空的值null],···,[最后一列的值]);

插入多行数据

1
2
3
insert table [表名] values ([列名1的值],[列名2的值],[可为空的值null],···,[最后一列的值]),
(列名1的值,列名2的值,可为空的值null,···,最后一列的值), (列名1的值,列名2的值,可为空的值null,···,最后一列的值);
# 有重复数据就强制插入并更新原来的数据:insert改为replace

修改所有数据

1
update [表名] set [列名1]=[值];

修改指定数据

1
update [表名] set [列名1]=[值] where [列名]=[值];

清空表

1
truncate table  [表名]

删除所有数据

1
delete from [表名];

删除指定数据

1
delete from [表名] where [内容];

🍳查询表

查看表中指定数据

1
select [要展示数据的列名]  from [表名];

查结果不重复

1
select distinct [要展示数据的列名]  from [表名];

空值查询

1
select [要展示数据的列名]  from [表名] where [列名] is null;

限定值查询

1
select [要展示数据的列名]  from [表名] where [要筛选数据的列名]><=[数值] group by [要展示数据列名其一];

先定条件基础上限定数值

1
select [要展示数据的列名]  from [表名] having [要筛选数据的列名]><=[数值];

非空值查询

1
select [要展示数据的列名] from [表名] where [要筛选数据的列名] is [not null];

查询含有字段的数据

1
select [要展示数据的列名] from [表名] where [要筛选数据的列名] '[字%]';

查询限定行数

1
2
3
4
5
select * from [表名] limit [起始行-1],[从起始行起要展示的行数];
# 或者
select * from [表名] limit [显示前几行数];
# 或者
select * from [表名] limit [要显示的行数] offset [从第几行后面开始输出];

查询根据要求列名排序的表(默认升序)

1
select [要展示数据的列名] from [表名] order by [要筛选数据的列名];

查询根据要求列名排序的表(升序)

1
select [要展示数据的列名] from [表名] order by [要筛选数据的列名] asc;

查询根据要求列名排序的表(降序)

1
select [要展示数据的列名] from [表名] order by [要筛选数据的列名] desc;

查询根据要求多列名排序的表(默认升序,先列名1排再列名2排)

1
select [要展示数据的列名] from [表名] order by [列名1],[列名2];

查询根据要求列名排序限定行数的表(默认升序)

1
select [要展示数据的列名] from [表名] order by [要筛选数据的列名] limit [行数];

限定数值的查询

1
2
3
select [要展示数据的列名]  from [表名] where [要筛选数据的列名] in ([值1],[数值2]);
# 或者
select 要展示数据的列名 from 表名 where 列名=数值1 or 列名=数值2;

模糊查询

1
2
3
select [要展示数据的列名]  from [表名] where [要筛选数据的列名] like '[参数]';
# _ 代表任意一个字符
# % 任意一个字符串不限字符个数

改变列名的查询

1
select [要展示数据的列名] as(可省略) [显示时候的列名] from [表名];

带有计算函数的查询

1
select [列名1],[列名2],[对于列名2的计算函数][列名2] as(可省略) [显示时候的列名] from [表名];

分组查询(可查询数量)

1
select [要展示数据的列名]  from [表名] group by [分组的列名];

🍳聚合查询

聚合和统计查询

1
2
3
4
5
6
7
select [要聚合的条件],count(*) from xs group by [要聚合的条件];

# count函数:select count(想显示数据的数量) from 表名;
# max函数:select max(要展示数据的列名) from 表名 where 要聚合的项目;
# min函数:select max(要展示数据的列名) from 表名 where 要聚合的项目;
# sum函数:select sum(要展示数据的列名) from 表名 where 要加和的项目;
# avg函数:select sum(要展示数据的列名) from 表名 where 要求平均数的项目;

过滤查询(分组筛选):
在group by 后面加上筛选条件,例如: having 性别=0;
嵌套子查询

1
2
select [列名2] from [表名2] where [列名1] [这里用=或者是in来连接] (select [列名1] where [表名1] where [要筛选数据的列名]); 
# 不在的话就直接not in

嵌套子句为一个表

1
select [列名1],[列名2] from (select [列名1],[列名2],[列名N] where [表名1] where [要筛选数据的列名]) as [虚拟表名] where [要筛选数据的列名]; 

新建索引

1
create index [索引名] on [表名]([列名1],[列名2]);

删除索引

1
drop index [索引名] on [表名];

查看表索引

1
2
show index [参数] from [表名]\G;
# 健壮建视图 or replace

创建视图 表与视图两者会互相影响

1
create view [表名] as [查表······]  group by [主键列名];

插入数据

1
insert into [视图名] ([列名1],[列名2],[列名3]) values ([列名1的值],[列名2的值],[列名3的值]);

更改数据(一次只能改一条数据)

1
update [视图名] set [列名=列名函数式] where [数据的位置];

删除数据

1
delete from [视图名] where [主键值];

删除视图

1
drop view [视图名];

🛢️管理数据库:

创建数据库用户

1
create user '[用户名]'@'[主机名一般是localhost]' identified by '[用户密码]';

查看数据库的用户

1
use mysql; select * from user;

修改用户名

1
rename user '[老用户名]'@'[主机名]' to '[新用户名]'@'[主机名]';

修改密码

1
alter user '[用户名]'@'[用户类型]' identified with mysql_native_password by '[新密码]';

删除数据库用户

1
drop user '[用户名]'@'[主机名]';

查看权限

1
show grants for '[用户名]'@'[主机名]';

给用户权限

1
grant all on [库名].[表名] to '[用户名]'@'[主机名]';

撤用户权限

1
revoke all on [库名].[表名] from '[用户名]'@'[主机名]'; 

📊数据库数据备份与恢复

备份库

1
mysqldump -u [用户名] -p [数据库名] > [保存位置\文件名.sql]

备份表

1
mysqldump -u [用户名] -p [数据库名] [表1] [表2] > [保存位置\文件名.sql]

全部备份

1
mysqldump -u [用户名] -p --all -database > [保存位置\文件名.sql]

恢复

1
mysql -u [用户名] -p [数据库名] < [保存位置\文件名.sql]

二级制日志恢复

1
mysqlbinlog [备份文件] | mysql -u [用户名] -p

📣特别声明

此文章全部都是依靠自己的学习理解来写的原创文章,难免可能会出现有错误的地方,

如果大家以后阅读的时候发现有问题,那就麻烦到下方评论区来进行错误指出,使错误尽快做出改正,

在此,感谢大家的阅读与支持!🤝💦🎉

🍻支持一下

觉得我写的好的话可以支持一下我哦~持续关注我,会更新其他好玩且实用的项目。

👋如果我能帮助到你,那就请我喝杯🧋呗~👇👇👇


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!