1. 程式人生 > >MySQL表的約束及外來鍵的新增

MySQL表的約束及外來鍵的新增

新增表約束

add
constraint  約束名  約束型別與條件,
constraint  約束名 約束型別與條件;

新增表外來鍵約束

在MySQL中,InnoDB表支援外來鍵約束的檢查。在連線兩個表的時候並不需要外來鍵約束。
檢視系統支援的儲存引擎

show engines;

查看錶使用的儲存引擎:

show table status from db_name where name='table_name';
#or
show create table table_name;

修改表儲存引擎:

alter table table_name engine=innodb;

不支援InnoDB,可以將相應列設定為外來鍵:

create table shirt(
owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
...,
);
上述語句並沒有實際外來鍵作用,如更新資料不符合外來鍵只給出提醒。
此時,用SHOW CREATE TABLE 或 DESCRIBE 均看不到REFERENCES子句。

對於InnoDB表,則能新增外來鍵約束:

alter table shirt add constraint sht_fk foreign key(owner) REFERENCES person(id);
#給表shirt的owner列新增外來鍵約束,指向表person的id列
遇到錯誤 Cannot add or update a child row:a foreign key constraint fails

原因:
設定的外來鍵和對應的另一個表的主鍵值不匹配。
解決方法:
找出不匹配的值修改,或清空表資料再執行。

新增外來鍵約束成功後,更新資料不符合約束則會報錯。

用檢視建表語句可看到約束:
show create table table_name; 

或使用資料庫自帶的資訊資料庫檢視約束:

use information_schema;
select * from KEY_COLUMN_USAGE;	#每個表字段資訊
select * from TABLE_CONSTRAINTS;	#所有約束資訊

刪除表約束

alter table TableName
drop 
constraint 約束名,
constraint 約束名;