資料庫約束: 約束是在表上強制執行的數據校驗規則,主要用於保證資料庫里數據的完整性。 除此之外,當表中的數據存在相互依賴性時,可以保證相關的數據不被刪除。 根據約束對數據列的限制,約束可分為如下兩類: 單列約束: 每個約束只約束一列 多列約束: 每個約束可以約束多個數據列為數據表指定約束有如下兩個時... ...
資料庫約束:
約束是在表上強制執行的數據校驗規則,主要用於保證資料庫里數據的完整性。
除此之外,當表中的數據存在相互依賴性時,可以保證相關的數據不被刪除。
根據約束對數據列的限制,約束可分為如下兩類:
單列約束: 每個約束只約束一列
多列約束: 每個約束可以約束多個數據列
為數據表指定約束有如下兩個時機:
建表的同時為相應的數據列指定約束
創建表後,以修改表的方式來增加約束
大部分資料庫支持下麵5中完整性約束:
- NOT NULL: 非空約束,指定某列不能為空,只能作為列級約束使用,只能使用列級約束語法定義。
SQL中的null值,null不區分大小寫,具有如下特征:
所有數據類型的值都可以是null,包括int、float、boolean等。
空字元串不等於null,0也不等於null。
建表時為指定列設置非空約束,只需在列定義後增加not null即可,例如:create table t_test ( id int not null, name varchar(255) default 'xyz' not null, gender varchar(2) null );
使用alter table修改表時增加或刪除非空約束,例如:
#增加非空約束 alter table t_test modify gender varchar(2) not null; #取消非空約束 alter table t_test modify gender varchar(2) null; #取消非空約束,並指定預設值 alter table t_test modify name varchar(255) default 'abc' null;
-
UNIQUE: 唯一約束,指定某列或者幾列組合不能重覆
雖然唯一約束的列不可以出現重覆值,但可以出現多個null值,因為在資料庫中null不等於null。
同一個表內可創建多個唯一約束,唯一約束也可有多列組合而成。 當為某列創建唯一約束時,MySQL會為該列創建唯一索引, 如果不給唯一約束起名,該唯一約束預設與列名相同。唯一約束可以使用列級語法建立,也可以使用表級語法建立。 如果是為多列建立組合約束,或者需要為約束指定約束名,則只能使用表級語法。
使用列級語法建立唯一約束,只需要在列定義後增加unique關鍵字即可:
#創建表時建立唯一約束,使用列級語法建立 create table unique_test ( #建立非空約束,意味著id不能為null id int not null, #建立唯一約束,意味著多行數據的該列值不能相等 name varchar(255) unique );
表級語法創建唯一約束的格式:
[constraint 約束名] unique (列名[,列名,...])
上面的表級約束語法格式既可以放在create table語句中與列定義併列,也可以放在alter table語句中使用add關鍵字添加:
#創建表時,使用表級語法創建唯一約束 create table uniques_test2 ( #為id建立非空約束,意味著id不能為null id int not null, name varchar(255), pass varchar(255), #使用表級語法為name建立唯一約束 unique (name), #使用表級語法為pass建立唯一約束,並指定約束名為test2_uk constraint test2_uk unique (pass) ); #創建表時,使用表級語法建立組合列的唯一約束 create table unique_test3 ( id int not null, name varchar(255), pass varchar(255), #指定name和pass兩列組合不能重覆 constraint test3_uk unique (name, pass) ); #在修改表時,使用add關鍵字來增加唯一約束 alter table unique_test3 add unique (id, name); #在修改表時,使用modify關鍵字,來為單列設置唯一約束 alter table unique_test3 modify name varchar(100) unique;
MySQL中刪除唯一約束:
語法格式:alter table tableName drop index 約束名;
例句:
#刪除unique_test3表中的test3_uk唯一約束 alter table unique_test3 drop index test3_uk;
-
PRIMARY KEY: 主鍵約束,指定該列的值可以唯一地標識該條記錄
-
FOREIGN KEY: 外鍵約束,指定該行記錄從屬於主表中的一條記錄,主要用於保證參照完整性
-
CHECK(MySQL不支持): 檢查約束,指定一個布爾表達式,用於指定對應列的值必須滿足該表達式