MySQL表的約束及外來鍵的新增
阿新 • • 發佈:2019-02-07
新增表約束
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表,則能新增外來鍵約束:
遇到錯誤 Cannot add or update a child row:a foreign key constraint failsalter table shirt add constraint sht_fk foreign key(owner) REFERENCES person(id); #給表shirt的owner列新增外來鍵約束,指向表person的id列
原因:
設定的外來鍵和對應的另一個表的主鍵值不匹配。
解決方法:
找出不匹配的值修改,或清空表資料再執行。
新增外來鍵約束成功後,更新資料不符合約束則會報錯。
用檢視建表語句可看到約束:show create table table_name;
或使用資料庫自帶的資訊資料庫檢視約束:
use information_schema; select * from KEY_COLUMN_USAGE; #每個表字段資訊 select * from TABLE_CONSTRAINTS; #所有約束資訊
刪除表約束
alter table TableName
drop
constraint 約束名,
constraint 約束名;