MySQL
约束条件
1.unsigned 设置无符号
# create table t2(id int unsigned);
2.zerofill 零填充
# create table t4(id int(10) zerofill);
3.not null 非空
不等于''
# create table t6(id int not null);
4.default 默认值
5.unique 唯一
# 单列唯一
create table t7(id int,name varchar(16) unique);
# 多列唯一
create table t8(id int,host varchar(16),port int,unique(host,port));
6.primary key 主键
auto_increment 为主键使用,自增,每次加1
# 主键相当于非空且唯一,InnoDB规定一张表必须有一个主键
# 主键查询速度快,本质也是一种索引
create table t9(id int primary key auto_increment,name varchar(16));
# 结论(默认创建格式)
id int primary key auto_increment
cid int primary key auto_increment
uid int primary key auto_increment
清空表数据
delete from t9; # 清空表数据,新建id继续增加
truncate table t9; # 清空表数据,id会被重置为1,推荐使用
binlog 恢复数据
SQL语句实现表关系
# 一对多
# 外键建在多的一方
# 先创建没有外键的表
create table dep(
id int primary key auto_increment,
name varchar(32),
descript varchar(32)
)
create table userinfo(
id int primary key auto_increment,
username varchar(32),
dep_id int,
salary decimal(8,2),
foreign key(dep_id) references dep(id)
)
# 多对多,需要创建第三张表,
create table book(
id int primary key auto_increment,
title varchar(16),
price int
)
insert into book(title,price) values('丰乳肥臀',100);
create table author(
id int primary key auto_increment,
name varchar(16),
phone int
)
insert into author(name,phone) values('莫言',123456);
create table book2author(
id int primary key auto_increment,
book_id int,
author_id int,
foreign key(book_id) references author(id)
on update cascade # 级联更新
on delete cascade, # 级联删除
foreign key(author_id) references book(id)
on update cascade
on delete cascade
)
# 一对一
create table author_detail(
id int primary key auto_increment,
title varchar(16),
price int
)
insert into author_detail(title,price) values('暖阳',100);
create table author_2(
id int primary key auto_increment,
name varchar(16),
phone int,
author_detail_id int unique,
foreign key(author_detail_id) references author_detail(id)
on update cascade
on delete cascade
)
insert into author_2(name,phone,author_detail_id) values('wuc',123,1);
聚合函数
分组之后频繁需要使用的
max 最大值
min 最小值
sum 求和
count 计数
avg 平均值
查询关键字where
# 1.查询id大于等于3小于等于6的数据
select * from emp where id between 3 and 6;
# 2.查询薪资是20000或者18000或者17000的数据
select * from emp where salary in (20000,18000,17000);
# 3.查询姓名中带有字母o的员工姓名和薪资
select name,salary from emp where name like '%o%';
# 4.查询姓名由四个字符组成的员工姓名和薪资
select name,salary from emp where name like '____';
select name,salary from emp where char_length(name) =4;
# 5.查询id小于3或者大于6的数据
select * from emp where id not between 3 and 6;
# 6.查询薪资不在20000,18000,17000范围的数据
select * from emp where salary not in (20000,18000,17000);
# 7.查询岗位描述为空的员工名与岗位名 针对null不能用等号,只能用is
select name,post from emp where post_comment is NULL;
查询关键字group by分组
分组
将单个单个的个体按照指定的条件分成一个个整体
# 1.每个部门的最高薪资
select post,max(salary) from emp group by post;
# 2.每个部门的最低薪资
select post,min(salary) from emp group by post;
# 3.每个部门的平均薪资
select post,avg(salary) from emp group by post;
# 4.每个部门的人数
select post,count(id) from emp group by post;
# 5.每个部门的月工资总和
select post,sum(salary) from emp group by post;
# 别名
select post as '部门',sum(salary) as '总和' from emp group by post;
# 查询分组之后的部门名称和每个部门下所有的员工姓名
group_concat() 获取分组以外的字段数据 并且支持拼接操作
select post,group_concat(name) from emp group by post;
select post,group_concat(name,':',salary) from emp group by post;
concat() 未分组之前使用的拼接功能
select concat(name,':',sex) from emp;
concat_ws()
select concat_ws(':',name,sex,salary,age) from emp;