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如何建立外檢 mysql如何建立外來鍵
乙個主表blog部落格表,drop table if exists blog create table blog id int 11 not null auto increment,title varchar 11 default null,content varchar 11 default nu...
mysql中如何設定外來鍵
概念 表示兩個表之間的相關聯絡,是表與表之間保持資料一致性,完整性,主要目的是控制儲存在外鍵表中的資料,約束,外來鍵只能引用外表中的列的值或使用空值。這兩個表必須滿足三個條件 使用在外鍵關係的域必須與資料型別相似 使用在外鍵關係的域必須為索引型 index 兩個表必須是innodb資料引擎 建立外來...
如何設定外來鍵?
什麼是外來鍵?好好體會這句話 如果關係模式r中的某屬性集不是r的 主鍵,而是另乙個關係r1的主鍵則該屬性集是關係模式r的外來鍵,通常在資料庫設計中縮寫為fk。看下面的例子。其中,公司代號這個屬性集不是第一張表的主鍵,而是第二張表中的主鍵,則公司代號這個屬性集是第一張表的外來鍵。然後這個公司代號就成為...