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 子查询返回的所有值都必须满足