SQL的約束
約束是一種限制,它通過對表的行或列的數據做出限制,來確保表的數據的完整性、唯一性。
比如,規定一個用戶的用戶名不能為空且沒有重復的記錄,這就是一種約束規則。
在MYSQL中,通常的有這幾種約束:
約束類型: 主鍵 默認值 唯一 外鍵 非空
關鍵字: PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL
在數據庫中,如果有兩個記錄是一樣的,數據庫是無法區分並且認為他們是一個主體,如果要區分,就要用到主鍵(PRIMARY KEY);
主鍵(PRIMARY KEY)是用於約束表中的某一行,作為這一行的唯一標示符,在一張表中通過主鍵就能準確 定位到一行,主鍵不能用重復記錄且不為空;
主鍵的三種定義方式:
第一種:
user_name CHAR(20) PRIMARY KEY,
第二種:
CONSTRAINT us_na(主鍵名,自定義) PRIMARY
KEY(user_name),
第三種:
CONSTRAINT us——na(主鍵名,自定義) PRIMARY KEY(user_a,user_b),
CHARE DATABASE school; use school; CHEATE TABLE user_info ( user_name CHAR(20) NOT NULL, user_num INT(10) DEFAULT ‘10‘, CONSTRAINT user_pk PRIMARY KEY (user_name) ); CHEATE TABLE user_data ( id INT(10), name CHAR(20), age INT(10), salary INT(10) NOT NULL, phone INT(12) NOT NULL, UNIQUE (phone), CONSTRAINT data_pk FOREIGN KEY (da_sch) REFERENCES user_info(user_name) ); CREATE TABLE object ( boject_num INT(10) NOT NULL, boject_name CHAR(20) NOT NULL, boject_data DATE NOT NULL, end_data DATE DEFAULT ‘2015-04-01‘, obj_sch CHAR(20) REFERENCES user_info(user_name), CONSTRAINT obj_pk PRIMARY KEY (boject_num,boject_name) );
默認值約束:
默認值約束(DEFAULT)規定,當有DEFAULT約束的列,插入數據為空時,將使用默認值。
默認值常用於一些可有可無的字段,比如用戶的個性前面,如果用戶沒有設置,系統給他應該設定一個默認的文本,比如空文本或‘O(∩_∩)O哈哈哈~,沒有信息啦’.
user_id INT(10) DEFAULT ‘10‘, #設置user_id的默認值為10 #正常插入數據 INSERT INTO user_info (user_id,user_name) VALUES (01,‘jack‘), #設置過默認值後,使用默認值填充充 INSERT INTO user_info (user_name) VALUES (‘jack‘), #此時,user_id 的值為默認值 10 mysql> select * from user_info; +---------+-----------+ | user_id | user_name | +---------+-----------+ | 10 | jack | +---------+-----------+
唯一約束:
唯一約束(UNIQUE), 他規定一張表中制定的一列的值必須不能有重復值,即這一列每個值都是唯一的。
mysql> create table user_data
-> (
-> id int(10),
-> name char(20),
-> phone int(12),
-> UNIQUE(phone)
-> );
#插入數據:
#第一次插入:
mysql> insert into user_data (id,name,phone) VALUES (01,‘jack‘,123);
Query OK, 1 row affected (0.00 sec)
#第二次插入:
mysql> insert into user_data (id,name,phone) VALUES (01,‘jacka‘,123);
ERROR 1062 (23000): Duplicate entry ‘123‘ for key ‘phone‘
#此處,phone值相同,與UNIQUE約束起沖突,插入數據失敗
外鍵:
外鍵(FOREIGN KEY)既能確保數據完整性,也能表現表與表之間的關系。
比如,現在有用戶和文章表,給文章表中添加一個指向用戶ID的外鍵,表示這篇文章所屬的用戶ID,外鍵將確保這個外檢指向的記錄是存在的,如果你嘗試刪除一個用戶,而這個用戶還有文章存在於數據庫中,那麽操作將無法完成並報錯。因為你刪除改用戶過後,他發布的文章都沒有所屬用戶了,而這樣的情況是不被允許的。同理,在你創建一篇文章的時候也不能為它制定一個不存在的用戶ID。
一個表可以有多個外鍵,每個外鍵必須REFERENCES(參考)另一個表的主鍵,被外鍵約束的列,取值必須在他參考的列中有對應值。
外鍵的三種寫法:
第一種:
create table user_info
(
id int(10) not null,
user_name char(20) DEFERENCES KEY,
phone int(12)
);
第二種:
CONSTRAINT obj_ue(外鍵名,自定義) FOREIGN KEY(in_dpk(約束列)) REFERENCES user_info(user_name);
#user_info(user_name)為參考表中的參考列
在插入時,如果被外鍵約束的值沒有在參考列中有對應,則插入失敗,如果有,則插入成功。
非空約束:
非空約束(NOT NULL),被非空約束的列,在插入值時必須非空.
沒被非空約束,插入時值為空,則為NULL。
SQL的約束