MySQL學習——約束 摘要:本文主要學習了資料庫的約束。 primary key(主鍵) 定義 主鍵約束是一個列或者多個列,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可以強製表的實體完整性。 主鍵約束相當於唯一約束和非空約束的組合,主鍵約束列不允許重覆,也不允許出現空值。 ...
MySQL學習——約束
摘要:本文主要學習了資料庫的約束。
primary key(主鍵)
定義
主鍵約束是一個列或者多個列,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可以強製表的實體完整性。
主鍵約束相當於唯一約束和非空約束的組合,主鍵約束列不允許重覆,也不允許出現空值。
每個表最多只允許一個主鍵,建立主鍵約束可以在列級別創建,也可以在表級別創建。
當創建主鍵的約束時,系統預設會在所在的列和列組合上建立對應的唯一索引。
主鍵自增
MySQL資料庫提供了一個自增的數字,專門用來自動生成主鍵值,主鍵值不用用戶維護,自動生成,自增數從1開始,以1遞增。
使用方式是在主鍵後面添加 auto_increment 選項。
實例
在創建表時添加單列主鍵約束,主鍵自增:
1 create table test ( 2 id int(11) primary key auto_increment, 3 phone int(11), 4 name varchar(50) 5 );
在創建表時添加複合主鍵約束:
1 mysql> create table test ( 2 -> id int(11), 3 -> phone int(11), 4 -> name varchar(50), 5 -> primary key(id, phone) 6 -> ); 7 Query OK, 0 rows affected (0.00 sec) 8 9 mysql>
在修改表時添加主鍵約束:
1 mysql> alter table test add primary key(id, phone); 2 Query OK, 0 rows affected (0.01 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql>
在修改表時刪除主鍵約束:
1 mysql> alter table test drop primary key; 2 Query OK, 0 rows affected (0.01 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql>
foreign key(外鍵)
定義
外鍵約束用來在兩個表的數據之間建立鏈接,它可以是一列或者多列。一個表可以有一個或多個外鍵。
外鍵對應的是參照完整性,一個表的外鍵可以為空值,若不為空值,則每一個外鍵的值必須等於另一個表中主鍵的某個值。
外鍵是表的一個欄位,不是本表的主鍵,但對應另一個表的主鍵。定義外鍵後,不允許刪除另一個表中具有關聯關係的行。
外鍵的主要作用是保持數據的一致性、完整性。
主表和子表
主表(父表):對於兩個具有關聯關係的表而言,相關聯欄位中主鍵所在的表就是主表。
從表(子表):對於兩個具有關聯關係的表而言,相關聯欄位中外鍵所在的表就是從表。
實例
創建父表並定義主鍵約束:
1 mysql> create table man ( 2 -> id int(11) primary key, 3 -> phone int(11), 4 -> name varchar(50) 5 -> ); 6 Query OK, 0 rows affected (0.01 sec) 7 8 mysql>
在創建表時添加外鍵約束:
1 mysql> create table child ( 2 -> id int(11) primary key, 3 -> manid int(11), 4 -> phone int(11), 5 -> name varchar(50), 6 -> constraint fk_man_id foreign key(manid) references man(id) 7 -> ); 8 Query OK, 0 rows affected (0.00 sec) 9 10 mysql>
在修改表時添加外鍵約束:
1 mysql> alter table child add constraint fk_man_id foreign key(manid) references man(id); 2 Query OK, 0 rows affected (0.01 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql>
在修改表時刪除外鍵約束:
1 mysql> alter table child drop foreign key fk_man_id; 2 Query OK, 0 rows affected (0.00 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql>
unique key(唯一)
定義
唯一約束要求該列唯一,允許為空,但只能出現一個空值。唯一約束可以確保一列或者幾列不出現重覆值。
實例
在創建表時添加單列唯一約束:
1 mysql> create table test ( 2 -> id int(11) primary key, 3 -> phone int(11) unique, 4 -> name varchar(50) 5 -> ); 6 Query OK, 0 rows affected (0.00 sec) 7 8 mysql>
在創建表時添加多列唯一約束:
1 mysql> create table test ( 2 -> id int(11) primary key, 3 -> phone int(11), 4 -> name varchar(50), 5 -> unique(phone, name) 6 -> ); 7 Query OK, 0 rows affected (0.00 sec) 8 9 mysql>
在修改表時添加唯一約束:
1 mysql> alter table test add constraint uk_test_phone unique(phone); 2 Query OK, 0 rows affected (0.00 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql>
在修改表時刪除唯一約束:
1 mysql> alter table test drop index uk_test_phone; 2 Query OK, 0 rows affected (0.00 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql>
default constraint(預設值)
定義
預設值約束用來指定某列的預設值。
實例
在創建表時添加預設值:
1 mysql> create table test ( 2 -> id int(11) primary key, 3 -> phone int(11), 4 -> name varchar(50) default 'Test' 5 -> ); 6 Query OK, 0 rows affected (0.01 sec) 7 8 mysql>
在修改表時修改預設值:
1 mysql> alter table test change column name name varchar(30) default 'none'; 2 Query OK, 1 row affected (0.00 sec) 3 Records: 1 Duplicates: 0 Warnings: 0 4 5 mysql>
not null constraint(非空)
定義
非空約束可以用來約束該列的取值不能為空,對於使用了非空約束的欄位,如果用戶在添加數據時沒有指定值,資料庫系統就會報錯。
實例
在創建表時添加非空約束:
1 mysql> create table test ( 2 -> id int(11) primary key, 3 -> phone int(11), 4 -> name varchar(50) not null 5 -> ); 6 Query OK, 0 rows affected (0.00 sec) 7 8 mysql>
在修改表時修改非空約束:
1 mysql> alter table test change column name name varchar(30) null; 2 Query OK, 0 rows affected (0.01 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql>