約束
-
定義
爲了保證數據的一致性和完整性,SQL規範以約束的方式來對錶數據進行額外的條件限制 -
解釋
- 約束是表級的強制規定(並不準確,因爲由列級約束的存在)
- 規定約束
- 建表時規定約束
- 建表後,通過
ALTER TABLE
語句來規定
-
約束的種類
- 非空約束(NOT NULL)
- 唯一約束 (UNIQUE)
- 主鍵 (PRIMARY KEY)
- 外鍵 (FOREIGN KEY)
- DEFAULT
- CHECK 檢查約束(MySQL不支持,不討論)
-
按約束範圍分類
- 列級約束
- 表級約束
非空約束,唯一約束,主鍵,外鍵都既可以是表級約束,有可以是列級約束
DEFAULT屬於列級約束
-
非空約束
- 使用
/* 建表時 */ CREATE TABLE t_user( id INT PRIMARY KEY auto_increment, name VARCAHR(32) NOT NULL ); /* 對現有表增加非空約束 */ ALTER TABLE emp MODIFY sex VARCHAR(30) NOT NULL; /* 取消非空約束 */ ALTER TABLE emp MODIFY sex VARCHAR(30) NULL; /* 取消非空約束,增加默認值 */ ALTER TABLE emp MODIFY sex VARCHAR(30) DEFAULT '男' NULL;
- 解釋
- 規定指定字段不能爲NULL
""
屬於空字符串,不屬於空NULL,下屬語句可以正確執行
INSERT INTO t_user(name) VALUE("");
-
唯一約束
- 使用
/* 建表時規定 列級約束 */ CREATE TABLE t_user( id INT PRIMARY KEY auto_increment, name VARCHAR(32) NOT NULL, email VARCHAR(32) UNIQUE ); /* 建表時規定 表級約束 */ CREATE TABLE t_user( id INT PRIMARY KEY auto_increment, name VARCHAR(20), email VARCHAR(20), -- UNIQUE(name, email) /* 表級約束 */ CONSTRAINT t_user_n_e UNIQUE(name, email) /* 定義別名,方便統一的管理 */ ); /* 刪除唯一約束 */ ALTER TABLE USER DROP INDEX uk name pwd;
- 注意:
- 指的是設置的兩列不能同時重複
,相當於把幾個表級約束組成一個字符串,要求該字串不能重複
- 指的是設置的兩列不能同時重複
分頁(LIMIT)
- 背景: 查詢返回的記錄太多,查看不方便,所有就通過分頁的方式來方便數據的查看。
- 實現分頁的方法
-
LIMIT 9, 10;
-
LIMIT 10 OFFSET 9
上述兩條公式,實現的效果是一樣的。都是從第9條後的一條數據起,查詢10條數據
若引入pageSize(頁大小),pageNum(頁號)兩個變量,那麼分頁查詢具有一下計算公式
SELECT * FROM employees LIMIT (pageNum-1)*pageSize, pageSize;
-