mysql建立外來鍵約束

2021-07-15 13:38:46 字數 1732 閱讀 2087

mysql建立關聯表可以理解為是兩個表之間有個外來鍵關係,但這兩個表必須滿足三個條件

1.兩個表必須是innodb資料引擎

2.使用在外鍵關係的域必須為索引型(index)

3.使用在外鍵關係的域必須與資料型別相似

例如:1、建立s_user表

create table s_user(

u_id int auto_increment primary key,

u_name varchar(15),

u_pwd varchar(15),

u_truename varchar(20),

u_role varchar(6),

u_email varchar(30))2、

插入幾條資料

insert into s_user values

(1,"wangc","aaaaaa","wangchao","buyer","[email protected]"),

(2,"huangfp","bbbbbb","huangfp","seller","[email protected]"),

(3,"zhang3","cccccc","zhangsan","buyer","[email protected]"),

(4,"li4","dddddd","lisi","seller","[email protected]")

3、建立s_orderform表

create table s_orderform(

o_id int auto_increment primary key,

o_buyer_id int,

o_seller_id int,

o_totalprices double,

o_state varchar(50),

o_information varchar(200),

foreign key(o_buyer_id) references s_user(u_id),      #外鏈到s_user表的u_id欄位

foreign key(o_seller_id) references s_user(u_id)      #外鏈到s_user表的u_id欄位)

alter table  drop forienkey[標示符]

alter table add

foreign key(o_buyer_id) references s_user(u_id) on delete

set null

on update

restrict

再新增

建立外來鍵後,有什麼影響呢?

1>如果所指向的s_user 的u_id不存在時, 在insert從表時是不成功的

2>主表增加記錄是不受從表影響

3>當主表對應的實體資料發生改變時,從表該怎麼處理?

主表刪除 on delete

casecade

關聯操作,主表刪除或者刪除時,那麼從表也會執行相應的操作(主表刪除,從表也刪出,由於資料不可逆,慎用)

set null

設定為null,表示從表不指向任何主表記錄(經常用,資料也安全)

restrict

,拒絕主表的相關操作

主表更新 on update

更新的時候,只有主表的主鍵發生改變的時候,從表才有影響

實際工作中:一般很少建立實際外來鍵,是名義上的外來鍵關聯,並不進行邏輯的外來鍵關聯,

一般級聯操作都是執行多條sql操作,再此看來,外來鍵有點有名無實,一般資料管理員會使用

mysql 無法建立外來鍵約束

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

mysql約束與外來鍵 MySQL 外來鍵與約束

外來鍵的建立 建表如下 create table parent id int not null,primary key id type innodb create table child id int,parent id int,foreign key parent id references pa...

MySQL 外來鍵約束

建立測試主表.id 是主鍵.create table test main id int,value varchar 10 primary key id 建立測試子表.create table test sub id int,main id int,value varchar 10 primary k...