drop database [IF EXISTS] 数据库名; drop table [IF EXISTS] 表名; truncate table 表名; //删除指定表,并重新创建该表(相当于格式化)
使用
1
use 数据库名;
修改
1 2 3 4 5
alter table 表名 add 字段名 类型(长度) [COMMENT 注释] [约束]; //添加字段 alter table 表名 modify 字段名 新数据类型(长度) //修改数据类型 alter table 表名 change 旧字段名 新字段名 类型(长度) [COMMENT '注释'] [约束]; alter table 表名 drop 字段名; //删除字段 alter table 表名 rename to 新表名; //修改表名
DML
添加数据
1 2 3 4
insert into 表名(字段名1,字段名2···) values(值1,值2···); //给指定字段添加数据 insert into 表名 values(值1,值2···); //给全部字段添加数据 insert into 表名(字段名1,字段名2···) values(值1,值2···),(值1,值2···),(值1,值2···); //批量添加数据 insert into 表名 values(值1,值2···),(值1,值2···),(值1,值2···); //批量添加数据
修改数据
1
update 表名 set 字段名1=值1,字段名2=值2,···[WHERE 条件];
删除数据
1
delete from 表名 [WHERE 条件];
DQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//编写顺序 //执行顺序(可以使用别名来验证) select 字段列表 4 from 表名列表 1 where 条件列表 2 group by 分组字段列表 3 having 分组后条件查询 order by 排序字段列表 5 limit 分页参数 6
基本查询
条件查询(WHERE)
聚合函数(count,max,min,avg,sum)
分组查询(GROUP BY)
排序查询(ORDER BY)
分页查询(LIMIT)
基本查询
1 2 3 4
select 字段1,字段2,字段3··· from 表名; select * from 表名; select 字段1 [AS 别名1],字段2 [AS 别名2]··· from 表名; select distinct 字段列表 from 表名; //去除重复记录
条件查询
1
select 字段列表 from 表名 where 条件列表;
聚合函数(count,max,min,avg,sum)
1
select 聚合函数(字段列表) from 表名;
分组查询(GROUP BY)
1
select 字段列表 from 表名 [WHERE 条件] group by 分组字段名 [HAVING 分组后过滤条件];
排序查询(ORDER BY)
1 2
select 字段列表 from 表名 order by 字段1 排序方式, 字段2 排序方式 // 排序方式:asc(升序),desc(降序)--默认升序
分页查询(limit)
1 2
select 字段列表 from 表名 limit 起始索引,查询记录数 // 起始索引从0开始,起始索引=(查询页码-1)* 每页显示记录数
DCL
管理用户
查询用户
1 2
use mysql; select * from user;
创建用户
1 2
create user '用户名'@'主机名' identified by '密码' // 当主机名是'%'时,表示允许任意主机访问数据库
修改用户密码
1
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
删除用户
1
drop user '用户名'@'主机名';
权限控制
查询权限
1
show grants for '用户名'@'主机名';
授予权限
1 2
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名'; // grant all on itcast.* to 'qianqianzyk'@'%';
select date_add(now(),INTERVAL 70 DAY); select name,datediff(curdate(),entrydate) as 'entrydays' from emp order by entrydays desc;
流程函数
1 2 3 4
select if(false,'OK','Error'); select ifnull('OK','Default'); select ifnull(null,'Default'); select name,(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址 ' from emp; select name,if(workaddress in('上海','北京'),'一线城市','二线城市') from emp;
约束
概述
可以保证数据库中数据的正确,有效性,完整性和一致性
示例
1 2 3 4 5 6 7
create table user( id int primary key auto_increment comment `主键`, name varchar(10) not null unique comment `姓名`, age int check ( age > 0 && age <= 120 ) comment `年龄`, status char(1) default '1' comment `状态`, gender char(1) comment `状态` ) comment `用户表`;
select 字段列表 from 表A 别名A join 表A 别名B on 条件---; // select a.name , b.name from emp a , emp b where a.managerid = b.id; // select a.name , b.name from emp a left join emp b on a.managerid = b.id;
自连接查询可以是内连接查询,也可以是外连接查询
联合查询-union,union all
1 2 3 4
select 字段列表 from 表A--- union[ALL] select 字段列表 from 表B---; // union 去重,union all 不去重
select * from t1 where column1 = (select column1 from t2);
子查询外部的语句可以是INSERT / UPDATE/ DELETE/ SELECT的任何一个。
根据子查询结果不同,分为:
标量子查询(子查询结果为单个值)
列子查询(子查询结果为一列)
行子查询(子查询结果为一行)
表子查询(子查询结果为多行多列)
根据子查询位置,分为:WHERE之后、FROM之后、SELECT之后。
标量子查询
1 2
select * from emp where dept_id = (select id from dept where name = "销售部"); // 此时(select id from dept where name = "销售部")的结果为一个值
列子查询
1 2
select * from emp where salary > all( select salary from emp where dept_id = (select id from dept where name = '销售部')); // 查询比财务部所有人工资都高的员工消息
行子查询
1
select * from emp where (salary,managerid) = (select salary, managerid from emp where name = 'zhang');
表子查询
1 2
select * from emp where (job,salary) in (select job,salary from emp where name = 'lu' or name = 'song'); select e.*,d.* from (select * from emp where entrydate > '2006-01-01') e left join dept d on e.dept_id = d.id;