◆ 创建数据库

create database 数据库名 default character set = 'utf8';

◆查看当前连接下的数据库列表

show databases;

◆切换/选择/使用数据库

use 数据库名;

◆查看当前连接的是哪一个数据库

select database();

◆删除数据库

drop database 数据库名;

◆建表

create table 表名(

字段1 数据类型1,

字段2 数据类型2,

……,

字段n 数据类型n

);

MySQL常用的数据类型:

整型 int/浮点型 float double decimal/字符型 char varchar/枚举型 enum/日期型 date datetime time

◆约束

主键约束(primary key)

非空约束(not null)

唯一约束(unique)

默认值约束(default 默认值)

外键约束(foreign key)

foreign key(sid) references 主键表名(sid)

SET FOREIGN_KEY_CHECKS=0;  关闭

SET FOREIGN_KEY_CHECKS=1;  打开

◆查看表结构

desc 表名;

◆显示数据库中所有的表

show tables;

◆修改表名

alter table 旧表名 rename to 新表名;

◆ 修改字段名

alter table 表名 change 旧字段名 新字段名 新字段的数据类型;

◆添加字段

alter table 表名 add 字段名 字段的数据类型;

◆ 删除字段

alter table 表名 drop 字段名;

◆删除表

drop table 表名; 

 表数据和表结构一起删除

◆ 数据的插入

insert into 表名[(字段1,字段2,……字段n)] values(值1,值2,……值n),(值1,值2,……值n), ……(值1,值2,……值n);

◆查询所有的字段

select * from 表名;

◆查找特定的字段

select 字段1,字段2,……字段n from 表名;

select distinct 字段 from 表名;

 使用distinct过滤重复的记录,若有多个字段则同时取值相同的时候才会过滤重复值

◆条件查询

select *|字段1,字段2,……字段n from 表名 where 查询条件;

where条件里经常用到的关系运算符:= != > >= < <=

条件查询还支持多条件,多条件有三个常用的逻辑运算符:

and 与 并且的意思 /or 或 或者的意思 /not 非 取反的意思/ between and 在……之间/ in 在一个集合里任选其一/ not between and/ not in

◆ 模糊查询

 % 表示此处有0个或1个或多个字符   _ 标识此处有1个字符

select * from 表名 where 字段 like '张%';

◆空值查询

is null 是空值     is not null 不是空值

select * from 表名 where 字段 is null;

◆排序显示

select *|字段1,字段2,……字段n from 表名 where 查询条件

order by 字段 [asc|desc];

默认升序   asc:ascend 升序   /   desc:descend 降序

◆数据的更新

update 表名 set 修改的内容 [where 更新条件];

如果不跟更新条件,则表里所有的记录都会更新

◆数据的删除

delete from 表名 [where 删除条件];

如果不跟条件则会删除表里所有的数据(保留表结构)

主外键关联通常需要先删除子表里的相关数据,再删除父表的数据。

◆聚合函数:

常用的聚合函数有:count() 统计个数  /  avg() 求平均值  /  sum() 求和  /  max() 求最大值  /  min() 求最小值

◆分组查询

select *|字段1,字段2,……字段n from 表名 where 查询条件 

group by 分组字段 having 过滤条件 order by 字段 [asc|desc];

group by 子句:按某个字段做分组/having子句:对分组之后的数据做进一步过滤,针对组的过滤/where子句:对分组之前的数据做过滤,针对行的过滤,聚合函数不能出现在where子句里

having和where的区别:

书写位置不同,where在group by之前,having在group by之后

执行顺序不同,where和group同时出现是先筛选后分组,group by和having是先分组后筛选,也就是where执行在分组之前,having执行在分组之后。

where后面的条件只能是表中的字段,having可是是聚合函数或者运算函数

◆子查询

结果语句 where 字段 in或者= (子查询语句)

查询返回多行,要用in进行连接,而不是=

◆关联查询

内连接:

select * from 表名1,表名2 where 表名1.字段=表名2.字段;

select * from 表名1 inner join 表名2 on 表名1.字段=表名2.字段;

左外连接:left join 指的是除了返回满足关联条件的结果集以外,还会把left join左边的那张表完整的展示出来,右边的那张表里不满足关联条件的字段位置补空值(null)

右外连接:right join 指的是除了返回满足关联条件的结果集以外,还会把right join右边的那张表完整的展示出来,左边的那张表里不满足关联条件的字段位置补空值(null)

全连接 full join 指的是除了返回满足关联条件的结果集以外,还会把full join两边的表完整的展示出来,两边不满足关联条件的字段位置补空值(null)

MySQL不支持full join,可以通过union集合操作来实现全外连接

#union和union all 合并查询结果(注意查询结果列数量一致)#前者去重 后者不去重

◆限制结果输出

limit子句用于限制查询结果返回的数量

limit n 等同于limit 0,n

limit n,m 表示从记录编号n开始的m条数据(记录的编号从0开始)

 if( ) 查询

select 字段,if(condition,a,b) 字段_result from 表名

 如果condition为真,则返回a值,否则返回b值。

解决if多层嵌套循环过程case when

select 字段,(case 列名 when 条件1 then 返回值1 when 条件2 then 返回值2 ......  else返回默认值 end)字段_result from 表名

字段_result 代表创造出新的一列