1. 程式人生 > >SQL的約束

SQL的約束

obj 數據 end 允許 dup eat rain prim har

約束是一種限制,它通過對表的行或列的數據做出限制,來確保表的數據的完整性、唯一性。

比如,規定一個用戶的用戶名不能為空且沒有重復的記錄,這就是一種約束規則。

在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的約束