## 列约束
**唯一性、主键约束、外键约束、检查约束、空值约束、默认值约束**
### 是否为空
一个字段的值是否可以是null,这个时候需要给这个字段设置**默认值**
a int not null //不写表示可以为空,
使用insert into 的时候,这个字段必须有值,或者有默认值
## 主键 PK
和信息无关的属性作为唯一主键,只用来标识记录,与业务不发生关系
int primary key auto_increment
1.字段上设置
~~~
create table teacher (
tid int primary key auto_increment,
tname varchar(5),
classname varchar(6)
)
~~~
2. 组合主键,一个主键由2个字段构成
~~~
create table teacher (
id int,
tid int,
tname varchar(5),
classname varchar(6),
primary key (id,tid);
)
~~~
## 外键
## 存储引擎
![](https://box.kancloud.cn/62994b57ac30b49340c72bad12e91462_672x401.png)
**default-storage-engine=Myisam**
## order by
order by 字段 升序|降序
升序 asc 降序 dsc 哪个字符在前,取决于校对规则
允许多字段排序,一个字段无法区分,才使用第二个字段
如果是分组,则应该使用分组排序字段** group by**
`order by user asc,days dsc;`
## limit 放在最后
在所有操作结束后,再限制条数
limit语法:limit offset rowcount
偏移量(从第几条开始),总记录数(取几条),默认从0开始
## distinct 去掉重复记录
默认是all
`select distinct days from teacher `
## union 联合查询
`(select username,days from teacher where classname=12) union (select username,days from teacher where classname=13)`
如果Union结果有重复记录,会自动消除,通过union选项all达到调用所有的目的
`(select username,days from teacher where classname=12) union all (select username,days from teacher where classname=13)`
**子语句的排序:**
1. 子语句包裹在括号内
2. 子语句的order by 只有在Limit 存在的情况的下才有效,原因是union有内部优化