MySQL外來鍵約束建立及刪除

2021-06-23 09:28:15 字數 2682 閱讀 2445

建立外來鍵定義 :

create table categories (

category_id tinyint(3) unsigned not null auto_increment,

name varchar(30) not null,

primary key(category_id)

) engine=innodb;

insert into categories values (1, 『sql server』), (2, 『oracle』), (3, 『postgresql』), (4, 『mysql』), (5, 『sqlite』);

create table members (

member_id int(11) unsigned not null,

name varchar(20) not null,

primary key(member_id)

) engine=innodb;

create table articles (

article_id int(11) unsigned not null auto_increment,

title varchar(255) not null,

category_id tinyint(3) unsigned not null,

member_id int(11) unsigned not null,

index (category_id),

foreign key (category_id) references categories (category_id),     constraint fk_member foreign key (member_id) references members (member_id),

primary key(article_id)

) engine=innodb;

categories.category_id和articles.category_id、members.member_id和articles.member_id已經建立外來鍵關係,只有articles.category_id的值存在與categories.category_id表中並且articles.member_id的值存在與members.member_id表中才會允許被插入或修改。:

刪除外來鍵定義 :

定義外來鍵的時候articles.member_id外來鍵比articles.category_id子句多了乙個constraint fk_member。這個fk_member就是用來刪除外來鍵定義用的:

alter table articles drop foreign key fk_member;

這樣articles.member_id外來鍵定義就被刪除

如果定義時沒有指定constraint fk_symbol(即外來鍵符號)時mysql會自己建立乙個,可以通過以下命令檢視:

show create table articles;

+———-+————————————+ | table   | create table                      | +———-+————————————+ | articles | create table `articles` ( `article_id` int(11) unsigned not null auto_increment, `category_id` tinyint(3) unsigned not null, `member_id` int(11) unsigned not null, `title` varchar(255) not null, primary key (`article_id`), key `category_id` (`category_id`), key `member_id` (`member_id`), constraint `articles_ibfk_1` foreign key (`category_id`) references `categories` (`id`) ) engine=innodb default charset=latin1         | +———-+————————————+ 1 row in set (0.01 sec)

可以看出articles.category_id的外來鍵符號為articles_ibfk_1,因此就可以執行以下命令刪除外來鍵定義:

alter table articles drop foreign key articles_ibfk_1;

mysql建立外來鍵約束

mysql建立關聯表可以理解為是兩個表之間有個外來鍵關係,但這兩個表必須滿足三個條件 1.兩個表必須是innodb資料引擎 2.使用在外鍵關係的域必須為索引型 index 3.使用在外鍵關係的域必須與資料型別相似 例如 1 建立s user表 create table s user u id int...

Mysql刪除所有外來鍵約束

由於外來鍵約束的存在,使得後期的分庫分表非常麻煩,對於沒有用到外來鍵約束限制操作,並且有外來鍵結構的資料庫,刪除所有外來鍵約束很有必要,使資料庫可移植性強,可拆解性強 執行查詢所有外來鍵命令,並且拼接刪除外來鍵的sql 複製所有sql,並執行 select concat alter table ta...

mysql 無法建立外來鍵約束

對mysql資料庫不太熟悉,今天遇到了外來鍵建立問題。alter外來鍵建立語句命令列下提示成功了,但就是沒看到外來鍵。後來改用workbench工具來建立,發現是因為資料預設是採用的myisam儲存引擎,該引擎不支援外來鍵,需要修改引擎為innodb才可以。我直接在workbench將表的引擎改為了...