mysql 簡單外來鍵操作

2021-06-20 07:10:46 字數 1924 閱讀 7785

一、基本概念

1、mysql中「鍵」和「索引」的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是mysql會自動為所有表的主鍵進行索引,但是外來鍵字段必須由使用者進行明確的索引。用於外來鍵關係的字段必須在所有的參照表中進行明確地索引,innodb不能自動地建立索引。

2、外來鍵可以是一對一的,乙個表的記錄只能與另乙個表的一條記錄連線,或者是一對多的,乙個表的記錄與另乙個表的多條記錄連線。

3、如果需要更好的效能,並且不需要完整性檢查,可以選擇使用myisam表型別,如果想要在mysql中根據參照完整性來建立表並且希望在此基礎上保持良好的效能,最好選擇表結構為innodb型別。

4、外來鍵的使用條件

① 兩個表必須是innodb表,myisam表暫時不支援外來鍵

② 外來鍵列必須建立了索引,mysql 4.1.2以後的版本在建立外來鍵時會自動建立索引,但如果在較早的版本則需要顯式建立;

③ 外來鍵關係的兩個表的列必須是資料型別相似,也就是可以相互轉換型別的列,比如int和tinyint可以,而int和char則不可以;

5、外來鍵的好處:可以使得兩張表關聯,保證資料的一致性和實現一些級聯操作。

二、基本操作

innodb也支援外來鍵約束。innodb中對外鍵約束定義的語法看起來如下:

[constraint symbol] foreign key [id] (index_col_name, ...)

references tbl_name (index_col_name, ...)

[on delete ]

[on update ]

① restrict(限制外表中的外來鍵改動,預設值)

② cascade(跟隨外來鍵改動)

③ set null(設空值)

④ set default(設預設值)

⑤ no action(無動作,預設的)

1)建立表1

create table main(

repo_id int(13) not null primary key,

repo_name char(14) not null)

engine=innodb default charset=gb2312;

建立表2

mysql> create table sub(

-> busi_id int(13) not null primary key,

-> busi_name char(13) not null,

-> repo_id int(13) not null,

-> foreign key(repo_id) references repo_table(repo_id))

-> engine=innodb default charset=gb2312;

2)插入資料

insert into main values(12,"aaa"); //success

insert into main values(13,"bbb"); //success

insert into sub values(1003,"ccc", 13); //success

insert into sub values(1002,"ddd", 12); //success

不可在sub表裡面單項新增資料,必須先在main表中新增相關聯的資料,具體的對應字段數值。

關鍵字含義

cascade

刪除包含與已刪除鍵值有參照關係的所有記錄

set null    

修改包含與已刪除鍵值有參照關係的所有記錄,使用null值替換(只能用於已標記為not null的字段)

restrict

拒絕刪除要求,直到使用刪除鍵值的輔助表被手工刪除,並且沒有參照時(這是預設設定,也是最安全的設定)

no action    

啥也不做

檢視建立表的資訊

show create table 表名;

mysql外來鍵操作

msyql中提供了兩種方式增加外來鍵 方案1 在建立表的時候增加外來鍵 類似主鍵 基本語法 在字段後增加一條語句 constraint 外鍵名 foreign key 外來鍵字段 references 主表 主鍵 create table my foreign id int primary keya...

Mysql主鍵外來鍵操作

級聯操作 外來鍵 一對多 多對多 一對一 修改表 複製表 主鍵 primary key auto increment primary key是主鍵通常和auto increment自動增加混合使用 把所有資料存放到一張表中的弊端 組織結構不清晰 浪費硬碟空間 擴充套件性差 create table ...

mysql外來鍵 FOREIGN KEY 的簡單使用

一 基本概念 1 mysql 中 鍵 和 索引 的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是 mysql 會自動為所有表的主鍵進行索引,但是外來鍵字段必須由使用者進行明確的索引。用於外來鍵關係的字段必須在所有的參照表中進行明確地索引,innodb 不能自動地建立索引。2 外來鍵可以是一對...