建立外來鍵定義 :
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將表的引擎改為了...