sql中外鍵寫法格式為?foreign key(列名)。如:create table temp(id int,name char(20),foreign key(id))。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、將樂(lè)網(wǎng)站維護(hù)、網(wǎng)站推廣。
將一個(gè)表的值放入第二個(gè)表來(lái)表示關(guān)聯(lián),所使用的值是第一個(gè)表的主鍵值(在必要時(shí)可包括復(fù)合主鍵值)。此時(shí),第二個(gè)表中保存這些值的屬性稱為外鍵(foreign key)。建立外鍵的前提是目標(biāo)關(guān)系的主鍵和參照關(guān)系的外鍵必須定義在一個(gè)或同一組的域上。
擴(kuò)展資料:
外鍵能夠保持?jǐn)?shù)據(jù)一致性,完整性,主要目的是控制存儲(chǔ)在外鍵表中的數(shù)據(jù)。 使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值或使用空值。在實(shí)際應(yīng)用中為了便于識(shí)別,當(dāng)主鍵與相應(yīng)的外鍵屬于不同關(guān)系時(shí),往往取相同的名字。
有很多時(shí)候,程序員會(huì)發(fā)現(xiàn)字段缺少、多余問(wèn)題或者是創(chuàng)建外鍵以后就不能添加沒(méi)有受約束的行(特殊情況下是有必要的),這個(gè)時(shí)候不想對(duì)表結(jié)構(gòu)進(jìn)行操作,就可以使用約束失效。
工具/原料
電腦? ?MySQL
方法/步驟
設(shè)置主鍵:
1、通過(guò)終端進(jìn)入到mysql命令行工具。
2、通過(guò)use關(guān)鍵字進(jìn)行到目標(biāo)數(shù)據(jù)庫(kù)里。
3、如原表已有主鍵,先把原來(lái)的主鍵刪除掉,通過(guò)DROP PRIMARY KEY命令:ALTER TABLE `jingyan` DROP PRIMARY KEY;。
4、主鍵已經(jīng)沒(méi)有了。
5、通過(guò)命令:ADD PRIMARY KEY來(lái)添加ALTER TABLE `jingyan` ADD PRIMARY KEY ( `id` ) 。
6、輸入后按下回車鍵即可看到 query ok執(zhí)行成功的字符。
7、回到數(shù)據(jù)庫(kù)的可視化工具,即可顯示現(xiàn)在的表在id列上添加了主鍵了。
設(shè)置外鍵:
1、創(chuàng)建好主從表。
2、選擇主表,點(diǎn)擊設(shè)計(jì)表,進(jìn)入到表設(shè)計(jì)界面。
3、點(diǎn)擊外鍵,進(jìn)入到外鍵設(shè)置界面。
4、先設(shè)置外鍵名稱和選擇主表的外鍵字段。
5、然后在設(shè)置外鍵字段對(duì)應(yīng)從表的數(shù)據(jù)庫(kù)、表名和字。
6、點(diǎn)擊保存就完成外鍵設(shè)置了。
數(shù)據(jù)庫(kù)mysql
建立外鍵的前提:本表的列必須與外鍵類型相同(外鍵必須是外表主鍵)。
外鍵作用:使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值!
指定主鍵關(guān)鍵字:foreignkey(列名)
引用外鍵關(guān)鍵字:references外鍵表名(外鍵列名)
事件觸發(fā)限制:ondelete和onupdate,可設(shè)參數(shù)cascade(跟隨外鍵改動(dòng)),restrict(限制外表中的外鍵改動(dòng)),setNull(設(shè)空值),setDefault(設(shè)默認(rèn)值),[默認(rèn)]noaction
例如:
outTable表主鍵id類型int
創(chuàng)建含有外鍵的表:
createtabletemp(
idint,
namechar(20),
foreignkey(id)referencesoutTable(id)ondeletecascadeonupdatecascade);
說(shuō)明:把id列設(shè)為外鍵參照外表outTable的id列當(dāng)外鍵的值刪除本表中對(duì)應(yīng)的列篩除當(dāng)外鍵的值改變本表中對(duì)應(yīng)的列值改變。
自己實(shí)踐才能完全了解外鍵的作用關(guān)鍵是:事件觸發(fā)限制的作用
詳細(xì)說(shuō)明可以百度搜我的博客: mysql foreign外鍵詳細(xì)使用方法和使用事項(xiàng)_2018_lcf
---------下面是使用方法
使用外鍵的前提:
1. 表儲(chǔ)存引擎必須是innodb,否則創(chuàng)建的外鍵無(wú)約束效果。
2. 外鍵的列類型必須與父表的主鍵類型完全一致。
3. 外鍵的名字不能重復(fù)(一般使用。
建外鍵表兩種方式(創(chuàng)建表時(shí)關(guān)聯(lián)/添加外鍵)
1) 第一種方式創(chuàng)建表時(shí)加外鍵使用實(shí)例:
mysql create table A( name char(12), id int(8) ,index(id))engine=innodb; //先建立A表,
mysql create table B( //建立B表,同時(shí)做外鍵
- id int(9),
- money int(9),
- index(id),
- foreign key(id) references A (id) //這個(gè)是必加項(xiàng),foreign key(B表要關(guān)聯(lián)的字段),references A表名 (對(duì)應(yīng)字段)
- on delete cascade on update cascade //這里是可選項(xiàng)的,只加一項(xiàng)或都不加都可以的,看需求.
- )engine=innodb; //這個(gè)必須是innodb類型,并且和A表的一致
第二方式在已有的表上做和A表關(guān)聯(lián)的外鍵(最好是新建好沒(méi)有記錄的,不然會(huì)因?yàn)橛涗泴?duì)不上而創(chuàng)建不成功)
mysql create table C( //這里先創(chuàng)建一個(gè)空表C
- id int(7),
- money int(5),
- index(id)
- )engine=innodb;
mysql alter table Cadd constraint abc //在C表上添加和表A關(guān)聯(lián)的外鍵,constraint 外鍵名(自己任意取)
- foreign key(id) references A(id) //和創(chuàng)建時(shí)一樣的輸入
- on delete cascade on update cascade; //一樣是可選項(xiàng),這行不寫也可以通過(guò).
注: @以上的cascade是上面介強(qiáng)的四種模式之一,是可以替換成其它模式的,如寫成on update set null
@還可以同時(shí)做兩個(gè)外鍵,如寫成foreign key(id,money) references A(id,money) 即可
@兩張表關(guān)聯(lián)字段名可以取不一樣名字,但類型必須一致
你好朋友
1.簡(jiǎn)介
外鍵表示一個(gè)表中的一個(gè)字段被另外一個(gè)表中的字段應(yīng)用.外鍵對(duì)相關(guān)表中的數(shù)據(jù)造成了限制,使MySQL 能夠保證參照完整性.
在MySQL 中,InnoDB 存儲(chǔ)引擎支持外鍵.在一張表中,可以存在多個(gè)外鍵.
外鍵的創(chuàng)建可以在創(chuàng)建表的時(shí)候創(chuàng)建,也可以在創(chuàng)建表之后增加(考慮數(shù)據(jù)的完整性問(wèn)題).
父表:外鍵所指向的表.
字表:相對(duì)于父表,擁有外鍵的表.
2.語(yǔ)法
create 語(yǔ)法
create table table_name(
column_1,
column_2,
....
constraint constraint_name foreign key (column_name)
references parent_table(column_name)
on delete action
on update action
) engine=InnoDB default charset utf8;
constraint 子句允許為外鍵定義一個(gè)名稱,如果不寫,MySQL 自動(dòng)生成一個(gè)名稱
foreign key 子句指定子表中要應(yīng)用父表的列.注意:MySQL 會(huì)自動(dòng)創(chuàng)建一個(gè)基于外鍵的索引.
references 子句指定父表中的被引用字段.foreign key 和references 指定的列數(shù)必須相同.
on delete: 定義當(dāng)父表中的記錄被刪除時(shí),子表的記錄應(yīng)該執(zhí)行的動(dòng)作.action包括:
on delete restrict:(默認(rèn)),父表不能刪除一個(gè)已經(jīng)被子表引用的記錄.
on delete no action:等同與on delete restrict
on delete cascade: 級(jí)聯(lián)模式,父表刪除后,對(duì)應(yīng)子表關(guān)聯(lián)的數(shù)據(jù)也跟著被刪除
on delete set null:置空模式,父表刪除后,對(duì)應(yīng)子表關(guān)聯(lián)的外鍵值被設(shè)置為NULL,需要注意的是,如果子表的外鍵設(shè)置not null ,則不能使用這種模式,因?yàn)闀?huì)相互沖突.
on update:定義父表中的記錄更新時(shí),子表的記錄應(yīng)該執(zhí)行的動(dòng)作.action 包括:
on update restrict:(默認(rèn)),父表不能更新一個(gè)已經(jīng)被子表引用的記錄.
on update no action:等同與on delete restrict
on update cascade: 級(jí)聯(lián)模式,父表更新后,對(duì)應(yīng)子表關(guān)聯(lián)的數(shù)據(jù)也跟著被更新
on update set null:置空模式,父表更新后,對(duì)應(yīng)子表關(guān)聯(lián)的外鍵值被設(shè)置為NULL,需要注意的是,如果子表的外鍵設(shè)置not null ,則不能使用這種模式.
alter 語(yǔ)法
-- 添加外鍵
alter table table_name add constraint constraint_name
foreign key column_name
references parent_table(column_name)
on delete action
on update action
-- 刪除外鍵
alter table table_name drop constraint_name;
-- 如果沒(méi)有顯式的定義名字,可以使用如下命令獲取
show create table table_name;
3.演示
構(gòu)造兩張表categoryes 和products.每個(gè)類別有多種產(chǎn)品,而每個(gè)產(chǎn)品只屬于一個(gè)類別.
-- 設(shè)置 類別表 categoryes 和產(chǎn)品表 products
create table categoryes(
c_id int not null auto_increment,
c_name varchar(45) not null,
c_description text,
primary key (c_id)
) engine=InnoDB default charset utf8 comment '類別表';
create table products(
p_id int not null auto_increment,
p_name varchar(45) not null,
p_price decimal(8,4),
c_id int,
primary key (p_id),
constraint fk_products_categoryes
foreign key (c_id)
references categoryes(c_id)
on delete set null
on update cascade
) engine=InnoDB default charset utf8 comment '產(chǎn)品表';
在這兩張表的基礎(chǔ)上,新生成一張vendors 供應(yīng)商表,并更新products字段
-- 新生成一張表 供應(yīng)商 vendors ,并為 products 新添加字段 v_id 外鍵
-- 引用 vendors.v_id
create table vendors(
v_id int not null auto_increment,
v_name varchar(45),
primary key (v_id)
) engine=InnoDB default charset utf8 comment '供應(yīng)商';
alter table products add column v_id int not null;
alter table products add
constraint fk_products_vendors foreign key (v_id)
references vendors(v_id)
on delete no action
on update cascade;
望采納祝你好運(yùn)
新聞名稱:mysql外鍵名怎么寫,mysql外鍵命名
分享鏈接:http://sd-ha.com/article0/hcogoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、自適應(yīng)網(wǎng)站、電子商務(wù)、網(wǎng)站制作、品牌網(wǎng)站制作、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容