一、MySQL查询
1. 聚合函数
代码语言:javascript
复制① 统计
* 语法
count(需要统计的字段)
* 注意
所有聚合函数都会自动跳过 null,解决方案 count(ifnull(字段,0));或count(*)
* 示例
select count(*) from student;
② 最大值
* 语法
max(字段)
* 示例
select max(math) from student;
③ 最小值
* 语法
min(字段)
* 示例
select min(math) from student;
④ 求和
* 语法
sum(字段)
* 示例
select sum(math) from student;
⑤ 平均值
* 语法
avg(字段)
* 示例
select avg(math) from student;
2. 排序查询
代码语言:javascript
复制① 语法
* order by 字段1 asc/desc, 字段2 asc/desc -- [asc 升序/ desc 降序]
② 注意
* 不写排序方式默认为 asc
* 当字段1的值相等时才会按照字段2排序
③ 示例
-- 查询表中所有数据按照数学升级升序排列
* select * from student order by math asc;
3. 分组查询
代码语言:javascript
复制① 语法
* group by 字段
② 注意
* select 后的查询字段必须为分组字段或聚合函数,否则没有意义
* where 满足条件才执行分组,条件不可为聚合函数
* having 分组后满足条件才查询出来,条件可以为聚合函数
# having 后所接的字段必须经过过滤(即:该字段必须使用),一般与 group by 连用
* select * from emp having id = 2; -- √
* select name from emp having name = 'tom'; -- √
* select name from emp having id = 2; -- ×
③示例
-- 查询在语文大于60分的人中英语大于60分和小于60分的人数
* select count(*) from student where chinese > 60 group by english > 60;
4. 分页查询
代码语言:javascript
复制① 语法
* limit m,n
② 注意
* m 为开始的索引,n 为查询出的条数
* m = (当前页数 - 1) * n
* limit 是 MySQL 的"方言"
③ 示例
* select * from student limit 0,5;
5. 综合版查询语句
代码语言:javascript
复制 -- 查询在语文成绩大于60的人中英语成绩大于60分和小于60分的人数不小于2时分别的人数且按照升序排列,从0开始查询寻5条。
* select count(*) from student where chinese > 60 group by english > 60 having count(*) > 2 order by asc limit 0,5;
二、约束
1. 非空(not null)
代码语言:javascript
复制① 语法
* 创建时添加
create teble student (
id int not null,
name varchar(20)
);
* 创建后添加
alter table student modify id int not null;
* 删除非空约束
alter table student modify id int;
② 注意
* 若字段在添加非空约束前含有 null 则必须处理 null 后才能添加
2. 唯一(unique)
代码语言:javascript
复制① 语法
* 创建时添加
create teble student (
id int unique,
name varchar(20)
);
* 创建后添加
alter table student modify id int unique;
* 删除唯一约束
alter table student drop index id;
② 注意
* 若字段在添加唯一约束前含有相同数据则必须先处理数据后才能添加
3. 主键(primary key)
代码语言:javascript
复制① 语法
* 创建时添加
create teble student (
id int primary key,
name varchar(20)
);
* 创建后添加
alter table student modify id int primary key;
* 删除唯一约束
alter table student drop primary key;
② 注意
* 主键约束在一张表中只能给一个字段添加,否则会报多重主键错误
* 主键非空且唯一
* 主键是一张表中记录的唯一标识
4. 自动增长(auto_increment)
代码语言:javascript
复制① 语法
* 创建时添加
create teble student (
id int primary key auto_increment,
name varchar(20)
);
* 创建后添加
alter table student modify id int auto_increment;
* 删除自动增长
alter table student modify id int;
② 注意
* 自动增长只能给 primary key 或者 unique 添加,一张表中只能添加一个
4. 外键(foreign key)
代码语言:javascript
复制① 语法
* 创建时添加
create teble student (
id int,
name varchar(20),
cid int,
[constraint 外键名称] foreign key 外键字段 references 关联表(关联字段)
);
* 创建后添加
alter table student add [constraint 外键名称] foreign key 外键字段 references 关联表(关联字段);
* 删除唯一约束
alter table student drop foreign key 外键名称;
② 注意
* 若一个表中的字段被另一个表关联则该字段不能直接删除
5. 级联操作
代码语言:javascript
复制① 级联更新(on uptate cascade)
* alter table 表名 add [constraint 外键名称] foreign key 外键字段 references 关联表(关联字段) on uptate cascade;
② 级联删除(on delete cascade)
* alter table 表名 add [constraint 外键名称] foreign key 外键字段 references 关联表(关联字段) on delete cascade;
③ 注意
* 很危险,一般不用
三、数据库的备份与恢复
1. 备份
代码语言:javascript
复制① 语法
* mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
2. 恢复
代码语言:javascript
复制① 进入需要恢复到的数据库
② source 恢复文件路径