命令行基本语法
- 连接mysql
语法:mysql -u用户名 -p密码
例子:mysql -uroot -p123456
注意:-u和-p参数后面没有空格 - 查看当前已有数据库
语法:show databases;
- 连接数据库
语法:use 数据库名称;
- 查看当前数据库下所有的表
语法:show tables
- 查看当前连接的数据库
语法:select database();
- 创建数据库
语法:create database 数据库名称 charset=字符集;
例子:create database test charset=utf-8;
解释:创建一个test名称的数据库,字符集为utf-8格式 - 删除数据库
语法:drop database 数据库名称;
例子:drop database test
- 查询表结构
语法:desc 表名;
- 查询创表语句
语法:show create table 表名;
-建立表
- 语法:
create table 表名(字段 字段类型);
例子:create table test001(num int,str varchar(30), float decimal(6,2));
解释:建立一个名为test001的表名并增加nun(数字类型),str(字符串类型限制最多30个字符),float(小数类型)这个3个字段
删除表
- 语法:
drop table 表名;
例子:drop table test001;
解释:删除表名为test001的表
如果有就删除表
- 语法:
drop table if exists 表名;
例子:drop table if exists test001;
解释:假如有表名为test001的表就删除
添加数据
- 语法:
insert into 表名 values(数据1,数据2);
例子:insert into test001 values(1,"2",3.3);
解释:在test001的表中添加数据
修改数据
- 语法:
update 表名 set 要修改的字段 where 条件1;
例子:update test001 set str=5 where num=1;
解释:在test001的表中查找字段num=1的数据,并修改它的str字段数据为”5“
删除数据
- 语法:
delete from 表名where 条件1;
例子:delete from test001 where num=1;
解释:在test001的表中查找字段num=1的数据,并删除它
查询表内的数据
- 语法:
select * from 表名;
例子:select * from test001;
解释:查询表名为test001的所有数据
查询某一字段的所有数据
-
语法:
select 字段名 from 表名;
例子:seelct str from test001;
解释:在test001表中查询字段为str的所有数据 -
又或者查询表中字段1和字段2的所有数据
例子:seelct str,num from test001;
解释:在test001表中查询字段str和num的所有数据
条件查询
- 语法:
select * from 表名 where 条件
例子1:select * from test001 where num=1 and str="1";
解释:在test001表中查询num=1并且str="1"的数据
例子2:select * from test001 where num=1 or str="1";
解释:在test001表中查询num=1或者str="1"的数据
例子3:select * from test001 where not num=1 ;
解释:在test001表中查询非num=1的数据
去重查询
- 语法:
select distinct(字段) from 表名;
例子:select distinct(str) from test001;
解释:在test001表中查询str字段的数据并去重
模糊查询
- 语法:
select * from 表名 where 字段 like "%包含的数据"
例子1:select * from test001 where str like "%9";
解释:在test001表中查询str字段中以9结尾的数据
例子2:select * from test001 where str like "9%";
解释:在test001表中查询str字段中以9开头的数据
例子3:select * from test001 where str like "%9%";
解释:在test001表中查询str字段中包含9的数据
例子3:select * from test001 where str like "_9";
解释:在test001表中查询str字段中2个字符并以9结尾的数据(_为占位符,比如"_服"只能匹配衣服或者汉服,无法匹配搭配到潜水服,但是有2个占位符就只能能匹配到潜水服,比如"__服")
索引值查询
- 语法:
select * from test001 limit 起始索引值,结束索引值
例子:select * from test001 limit 4,9
解释:查询test001表中第5行到第10行的数据(注意:索引值是从0开始的)
升序或者降序查询
- 升序查询
语法:select * from 表名 order by 字段 asc;
例子:select * from test001 order by num asc;
解释:在test001表中查询num字段数据并以升序排列
降序查询
语法:select * from 表名 order by 字段 desc;
例子:select * from test001 order by num desc;
解释:在test001表中查询num字段数据并以降序排列
升序与降序配合使用
语法:select * from 表名 order by 字段 desc,字段2 asc;
例子:select * from test001 order by num desc,float asc ;
解释:在test001表中查询num字段数据并以降序排列,假如num数据相同就以float字段进行升序排列
常用函数
- 获取字段的行数
语法:select count(字段) from 表名 ;
例子:select count(str) from test001 ;
解释:在test001表中获取字段str的行数(若数据为空不计入其中比如null)
获取字段最大值
语法:select max(字段) from 表名 ;
例子:select max(num) from test001 ;
解释:在test001表中获取字段num的最大值
获取字段最小值
语法:select min(字段) from 表名 ;
例子:select min(num) from test001 ;
解释:在test001表中获取字段num的最小值
获取字段平均值
语法:select avg(字段) from 表名 ;
例子:select avg(num) from test001 ;
解释:在test001表中获取字段num的最平均值
获取字段数值总和
语法:select sum(字段) from 表名 ;
例子:select sum(num) from test001 ;
解释:在test001表中获取字段num的数值总和
-分组
-
语法:
select sum(num) from 表名 group by 字段;
例子:select sum(num) from test001 group by num;
解释:在test001表中根据字段num进行分组并查询它们的总和
一般用法
一般配合函数一起使用
例子1:select max(num) from test001 group by num;
解释:在test001表中根据字段num进行分组并查询它们的最大值 -
假如需要在分组时使用条件查询则使用having来进行条件筛选
例子2:select max(num) from test001 group by num having num!=8;
解释:在test001表中只有num!=8时才对num 字段进行分组并查询它们的最大值
别名
- 语法:
select 字段 as "数字" from 表名;
例子:select sum as "数字" from test001
解释:查询test001表中字段为sum的所有数据,并将此字段别名设置为数字
例子2
例子:select sum as "数字" ,float as "浮点数"from test001
解释:查询test001表中字段为sum与float 的所有数据,并将此字段别名分别设置为数字和浮点数
连接查询
- 内连接查询
显示两张表存在对应关系的数据,无对应关系的不显示
语法:select * from 表一 inner join 表2 on 表一.字段=表二.字段;
例子:select * from test001 inner join test002 on test001.sun=test002.sun;
解释:查询test001并显示test001中sun字段在test002表中sun所对应的数据
例如表一test001为:
表二test002为:
那么select * from test001 inner join test002 on test001.typ = test002.typ;
的结果为:
左连接查询
- 以左表为主表显示两张表存在对应关系的数据,无对应关系的也显示(null占位)
语法:select * from 表一 left join 表2 on 表一.字段=表二.字段;
例子:select * from test001 left join test002 on test001.sun=test002.sun;
解释:查询test001并显示test001中sun字段在test002表中sun所对应的数据
例如表一test001为:
表二test002为:
那么select * from test001 left join test002 on test001.typ = test002.typ;
的结果为:
右连接查询 - 以右表为主表显示两张表存在对应关系的数据,无对应关系的也显示(null占位)
语法:select * from 表一 right join 表2 on 表一.字段=表二.字段;
例子:select * from test001 right join test002 on test001.sun=test002.sun;
解释:查询test001并显示test001中sun字段在test002表中sun所对应的数据
例如表一test001为:
表二test002为:
那么select * from test001 right join test002 on test001.sun=test002.sun;
的结果为:
注意:
1.连接操作实质:连接查询是通过连接的方式来进行查询,形成数据源
2.连接操作完成之后,之前的所有查询语法,都可以继续使用 - 比如在连接查询之后需要继续条件筛选那么就可以使用以下语法
select * from test001 right join test002 on test001.sun=test002.sun where test001.str="99";
注意的是字段的变化,需要指定是哪个表1的哪个字段比如 需要过滤 test001表的str字段,那么
where str="99"
就要写成test001.str="99"
- 又或者在连接查询之后需要进行降序排序那么就使用以下语法
select * from test001 right join test002 on test001.sun=test002.sun order by test001.str desc;
自关联查询
- 在一张表内,至少存在2列字段具备对应关系,即可使用自关联,通过起别名的方式将一张表变更成为两张表
语法:select * from 表1 别名1 inner 表1 别名2 on 别名1.字段1 = 别名2.字段2;
例子:select * from test001 t1 inner join test001 t2 on t1.bianma=t2.pid;
解释:查询test001表bianma字段与pid字段相同的数据
表1为:
那么select * from test001 t1 inner join test001 t2 on t1.bianma=t2.pid;
的结果为:
子查询
- 子查询,就是在一个查询中嵌套了其他若干查询
语法:select * from 表1 where 字段 > (select avg(字段) from 表1) ;
例子:select * from test001 where sum > (select avg(sun) from test001);
解释:查询test001表sum字段中大于平均值的数据
索引——减少查询时间
- 语法:
create index 索引名称 on 表名(字段);
例子:create index a1 on test001(num);
在查询前添加索引能大幅度减少查询时间
查看索引
语法:show index from 表名;
删除索引
语法:drop index 索引名称 on 表名;
事务
- 定义:所谓事务可以称之为一个操作序列,一系列操作要么都执行,要么都不执行,对于数据库来件,对于数据库的操作行为,要么都实现要么都不实现,最终需要确保写入到数据库的数据的一致性、
前提:数据库的引擎类型必须是innodb(可以通过查看创表语句来确定show create table 表名;
)
开始事务语法:begin;
提交事务语法:commit;
退出事务语法:rollback;
视图
定义:能够封装sql语句,类似以表的形式存在(类似python封装函数)
创建视图语法:create view 试图名称 as 语句;
使用视图语法:select * from 视图名称;
删除视图语法:drop view 视图名称;
例子:create view v_test as select * from test;
结果:在视图分组内查看该视图的结果
例如其他用法:
- 创建视图
create view v_test002 as select price from test003;
- 使用视图给出结果使用子关联查询
select * from v_test003 v1 inner join test003 v2 on v1.price=v2.price;
日志查看
语法:show VARIABLES like "general_log%";
结果:
解释:
genral_log字段:是否显示是否打开日志
genral_log_file字段:日志存放位置
开启日志语法:set global general_log=1;
关闭日志语法:set global general_log=0;