## 列約束
**唯一性、主鍵約束、外鍵約束、檢查約束、空值約束、默認值約束**
### 是否為空
一個字段的值是否可以是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);
)
~~~
## 外鍵
## 存儲引擎

**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有內部優化