mysql增加外來鍵的方法:1、在create table語句中,通過foreign key關鍵字來新增外來鍵;2、在alter table語句中,通過add和foreign key關鍵字來新增外來鍵。
mysql 外來鍵約束(foreign key)是表的乙個特殊字段,經常與主鍵約束一起使用。對於兩個具有關聯關係的表而言,相關聯欄位中主鍵所在的表就是主表(父表),外來鍵所在的表就是從表(子表)。
外來鍵用來建立主表與從表的關聯關係,為兩個表的資料建立連線,約束兩個表中資料的一致性和完整性。比如,乙個水果攤,只有蘋果、桃子、李子、西瓜等 4 種水果,那麼,你來到水果攤要買水果就只能選擇蘋果、桃子、李子和西瓜,其它的水果都是不能購買的。
主表刪除某條記錄時,從表中與之對應的記錄也必須有相應的改變。乙個表可以有乙個或多個外來鍵,外來鍵可以為空值,若不為空值,則每乙個外來鍵的值必須等於主表中主鍵的某個值。
定義外來鍵時,需要遵守下列規則:主表必須已經存在於資料庫中,或者是當前正在建立的表。如果是後一種情況,則主表與從表是同乙個表,這樣的表稱為自參照表,這種結構稱為自參照完整性。
必須為主表定義主鍵。
主鍵不能包含空值,但允許在外鍵**現空值。也就是說,只要外來鍵的每個非空值出現在指定的主鍵中,這個外來鍵的內容就是正確的。
在主表的表名後面指定列名或列名的組合。這個列或列的組合必須是主表的主鍵或候選鍵。
外來鍵中列的數目必須和主表的主鍵中列的數目相同。
外來鍵中列的資料型別必須和主表主鍵中對應列的資料型別相同。
在建立表時設定外來鍵約束
在 create table 語句中,通過 foreign key 關鍵字來指定外來鍵,具體的語法格式如下:[constraint ] foreign key 欄位名 [,欄位名2,…]
references 主鍵列1 [,主鍵列2,…]
例 1為了展現表與表之間的外來鍵關係,本例在 test_db 資料庫中建立乙個部門表 tb_dept1,表結構如下表所示。
建立 tb_dept1 的 sql 語句和執行結果如下所示。mysql> create table tb_dept1
-> id int(11) primary key,
-> name varchar(22) not null,
-> location varchar(50)
query ok, 0 rows affected (0.37 sec)
建立資料表 tb_emp6,並在表 tb_emp6 上建立外來鍵約束,讓它的鍵 deptid 作為外來鍵關聯到表 tb_dept1 的主鍵 id,sql 語句和執行結果如下所示。mysql> create table tb_emp6
-> id int(11) primary key,
-> name varchar(25),
-> deptid int(11),
-> salary float,
-> constraint fk_emp_dept1
-> foreign key(deptid) references tb_dept1(id)
query ok, 0 rows affected (0.37 sec)
mysql> desc tb_emp6;
| field | type | null | key | default | extra |
| id | int(11) | no | pri | null | |
| name | varchar(25) | yes | | null | |
| deptid | int(11) | yes | mul | null | |
| salary | float | yes | | null | |
4 rows in set (1.33 sec)
以上語句執行成功之後,在表 tb_emp6 上新增了名稱為 fk_emp_dept1 的外來鍵約束,外鍵名稱為 deptid,其依賴於表 tb_dept1 的主鍵 id。注意:從表的外來鍵關聯的必須是主表的主鍵,且主鍵和外來鍵的資料型別必須一致。例如,兩者都是 int 型別,或者都是 char 型別。如果不滿足這樣的要求,在建立從表時,就會出現「error 1005(hy000): can't create table」錯誤。
在修改表時新增外來鍵約束
外來鍵約束也可以在修改表時新增,但是新增外來鍵約束的前提是:從表中外鍵列中的資料必須與主表中主鍵列中的資料一致或者是沒有資料。
在修改資料表時新增外來鍵約束的語法格式如下:alter table add constraint
foreign key() references ();
例 2修改資料表 tb_emp2,將字段 deptid 設定為外來鍵,與資料表 tb_dept1 的主鍵 id 進行關聯,sql 語句和執行結果如下所示。mysql> alter table tb_emp2
-> add constraint fk_tb_dept1
-> foreign key(deptid)
-> references tb_dept1(id);
query ok, 0 rows affected (1.38 sec)
records: 0 duplicates: 0 warnings: 0
mysql> show create table tb_emp2\g
*************************** 1. row ***************************
table: tb_emp2
create table: create table `tb_emp2` (
`id` int(11) not null,
`name` varchar(30) default null,
`deptid` int(11) default null,
`salary` float default null,
primary key (`id`),
key `fk_tb_dept1` (`deptid`),
constraint `fk_tb_dept1` foreign key (`deptid`) references `tb_dept1` (`id`)
) engine=innodb default charset=gb2312
1 row in set (0.12 sec)
刪除外來鍵約束
當乙個表中不需要外來鍵約束時,就需要從表中將其刪除。外來鍵一旦刪除,就會解除主表和從表間的關聯關係。
刪除外來鍵約束的語法格式如下所示:alter table drop foreign key ;
例 3刪除資料表 tb_emp2 中的外來鍵約束 fk_tb_dept1,sql 語句和執行結果如下所示。mysql> alter table tb_emp2
-> drop foreign key fk_tb_dept1;
query ok, 0 rows affected (0.19 sec)
records: 0 duplicates: 0 warnings: 0
mysql> show create table tb_emp2\g
*************************** 1. row ***************************
table: tb_emp2
create table: create table `tb_emp2` (
`id` int(11) not null,
`name` varchar(30) default null,
`deptid` int(11) default null,
`salary` float default null,
primary key (`id`),
key `fk_tb_dept1` (`deptid`)
) engine=innodb default charset=gb2312
1 row in set (0.00 sec)
可以看到,tb_emp2 中已經不存在 foreign key,原有的名稱為 fk_emp_dept 的外來鍵約束刪除成功。
Mysql外來鍵設定
為已經新增好的資料表新增外來鍵 語法 alter table 表名 add constraint fk id foreign key 你的外來鍵欄位名 references 外表表名 對應的表的主鍵欄位名 例 alter table tb active add constraint fk id fo...
Mysql 外來鍵設定
外來鍵的作用 保持資料一致性,完整性,主要目的是控制儲存在外鍵表中的資料。使兩張表形成關聯,外來鍵只能引用外表中的列的值!例如 a b 兩個表 a表中存有 客戶號,客戶名稱 b表中存有 每個客戶的訂單 有了外來鍵後 你只能在確信b 表中沒有客戶x的訂單後,才可以在a表中刪除客戶x 建立外來鍵的前提 ...
Mysql 外來鍵設定
mysql外來鍵設定詳解 1 外來鍵的使用 外來鍵的作用,主要有兩個 乙個是讓資料庫自己通過外來鍵來保證資料的完整性和一致性 乙個就是能夠增加er圖的可讀性 有些人認為外來鍵的建立會給開發時運算元據庫帶來很大的麻煩.因為資料庫有時候會由於沒有通過外來鍵的檢測而使得開發人員刪除,插入操作失敗.他們覺得...