MySQL常用指令合集

101 阅读7分钟

DDL

show databases; 查询所有数据库

select database(); 查询当前所在的数据库

create database [if not exists] 名字 [default charset utf8sd4]; 创建一个数据库(如果不存在)

drop database [if exists] 名字; 删除一个数据库

use database; 使用一个数据库

数据库内:

show tables; 查询数据库内的所有表

desc 名字; 查询表的结构

show create table 名字; 查询指定表的建表语句

create table name(

      id in(signed/unsigned) comment xxx,
      
      name varchar(50) comment xxxxx,
      
      [constraint] [外键名称] foreign key (外键字段名) references 主表名;
      

)comment xxxxx; 创建一个表

alter table 名字 add name varchar(50) comment xxxx; 为表添加字段,为限长50的varchar类型的名字

alter table 名字 modify name varchar(30); 为表修改字段数据类型,为限长40的varchar类型的名字

alter table 名字 change name nickname varchar(30) comment xxx; 修改字段名和字段类型

旧名 新字段名 新长度

alter table 名字 drop nickname; 删除该字段

alter table 名字 rename to 新名字; 修改表名

drop table if exists 名字; 删除表

truncate table 名字; 删除指定表(主要是删除数据),并重新创建该表(空白)

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 ; 添加外键

DML

insert 添加数据 (字符串\日期应该包含在引号中)

insert into 表名(字段名1,字段名2...) values (值1,值2...) 给指定字段添加一个对象数据

insert into 表名 values (值1,值2...) 给全部字段添加数据

insert into 表名(字段名1,字段名2...) values (值1,值2...),(值1,值2...),(值1,值2...),(值1,值2...)...; 给指定字段批量添加数据

insert into 表名 values (值1,值2...),(值1,值2...),(值1,值2...),(值1,值2...)...; 给全部字段批量添加数据

update 修改数据

update 表名 set 字段名1=值1,字段名2=值2,... where 条件[id=1或其他条件]; 没有条件限制时修改整张表的所有对象的该数据

delete 删除数据(不能删除某个对象的某个字段的值)

delete from 表名 [where 条件]; 没有条件删除时修改整张表的所有对象的数据

DQL 基本查询

select 字段1,字段2... from 表名; 查询表的某些字段,会返回表中所有对象的某些变量的信息

select * from 表名; 查询表的所有字段,尽量不使用.

select 字段名 as '别名' from 表名; 字段名变为所起的别名,并查询所有对象的该变量信息

select distinct 字段名 from 表名; 查询所有对象的该变量信息之后,相同的值只出现一次

条件查询

select 字段列表 from 表名 where 条件列表;

聚合函数

select 聚合函数(字段列表) from 表名; 将一列数据作为一个整体进行纵向计算

count 统计数量

max 最大值

min 最小值

avg 平均值

sun 求和

分组查询

select 字段列表 from 表名 [where xxx] group by 分组字段名 [having 分组后的过滤条件];

where 与 having 的区别:where 是在分组前进行过滤,不满足 where 条件的不参与分组;而 having 是对分组后的数据进行过滤 ; where 不能对聚合函数进行判断,而 having 可以.

执行顺序: where->聚合函数->having

排序查询:

select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2 ; (多个对象的第一个字段相同时,才会使用第二种排序方式)

分页查询

select 字段列表 from 表名 liimt 起始索引,查询记录数; (起始索引从零开始,之后等于 ( 查询页码 - 1 ) * 每页记录数 ).

DCL 查询用户

use mysql; select * from user; 在MySQL中所有的用户信息都存储在一个表叫mysql中,因此要转到使用这张表,然后查询.

create user '用户名'@'主机名' identified by '密码'; 创建用户

alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';

修改用户密码

drop user '用户名'@'主机名'; 删除用户

'%'代表任意主机 , 'localhost' 代表当前主机

权限控制

all , select , insert , update , dalete , alter , drop , create 修改数据 修改表

查询权限 show grants for '用户名'@'主机名';

授予权限 grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

撤销权限 revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

字符串函数

concat(s1,s2,s3...) 将字符串s1,s2...拼接为一个字符串

lower(str) 将字符串str全部转为小写

upper(str) 将字符串str全部转为大写

lpad ( str , n , pad ) 用字符串pad对str的左边进行填充,直到长度为n

rpad ( str , n , pad ) 用字符串pad对str的右边进行填充,直到长度为n

trim(str) 去掉字符串str头部和尾部的空格

substring ( str , start , len ) 返回字符串str从start位置开始的len个长度的字符串

数值函数

ceil(x) 向上取整

floor(x) 向下取整

mod(x,y) 返回x/y的模

rand() 返回0-1之内的一个随机数

round(x,y) 求参数x保留y位的值

日期函数

curdate() 返回当前日期

curtime() 返回当前时间

now() 返回当前日期和时间

year(date) 获取指定date的年份

month(date) 获取指定date的月份

day(date) 获取指定date的日期

date_add(date , interval expr type) 返回一个日期加上一个时间间隔expr之后的值

datediff(date1 , date2) 返回起始时间date1 和结束时间date2 之间的天数

流程函数

if(value , t , f) 如果value为true , 则返回t , 否则返回 f

ifnull(value1, value 2) 如果value1不为空则返回value1 , 否则返回value2

case [expr] when [val1] then [res1] ...else [default] end. 如果expr的值等于val1 , 则返回

约束条件

not null 非空约束,字面意思

unique 唯一约束,字面意思

orimary key 主键约束,非空且唯一

default 默认约束,有一个默认值

check 检查约束,保证这个字段的值符合某个条件

foreign key 外键约束,用来让两张表的数据之间建立连接,保证数据的一致性和完整性

auto_increment 自增的计数器

外键约束

no action 当在父表中删除/更新对应记录时,首先检查是否存在该外键,若存在则不允许删除/更新

restrict 与no action相同

cascade 当在父表中删除/更新对应记录时,首先检查是否存在该外键,若存在则对子表做相同操作

set null 当在父表中删除对应记录时,首先检查是否存在该外键,若存在则设置子表中该外键值为null

set default 父表有变更时,子表将外键设置为一个默认的值

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 ; 添加外键

内连接 查询的是多个表之间的交集`

select a.id , a.name , b.id ,b.name from a , b where a.id=b.id; 查询的字段,查询的表,查询的条件

select a.name , b.name from a inner join b on a.id=b.id; 查询的字段,查询的表,查询的条件

外连接

select 字段列表 from 表1 left outer join 表2 on 条件...; 左外连接,相当于包含交集的完全体表1

select 字段列表 from 表1 right outer join 表2 on 条件...; 右外连接,相当于包含交集的完全体表2

自连接

select 字段列表 from 表A 别名A join 表A 别名B on 条件...;

联合查询

select 字段列表 from 表A...

union select 字段列表 from 表B...; 把多次的查询结果合并起来,组成一个新的查询结果集 , 其中union all是直接拼接,union是去重后得到全新结果集

子查询 即先查询出一个结果作为限定条件

标量查询 先查询出某个限定条件下的对象,再从这一些结果中查询符合最终条件的对象

列子查询 返回的结果是一列(可以是多行),第一次查询的结果是[一列多行]

in 在指定的集合范围内多选一

not in 不在指定的集合范围内

any 子查询返回列表中,有一个满足即可

some 等于any

all 子查询返回的所有值都必须满足