mysql怎么寫外鍵關(guān)系,mysql主鍵和外鍵的用法

mysql怎么定義外鍵

數(shù)據(jù)庫(kù)mysql

港南網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),港南網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為港南1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的港南做網(wǎng)站的公司定做!

建立外鍵的前提:本表的列必須與外鍵類型相同(外鍵必須是外表主鍵)。

外鍵作用:使兩張表形成關(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ā)限制的作用

mysql建立外鍵時(shí),多對(duì)多如何建立?

一張表中的主鍵只能有一個(gè),外鍵可以有多個(gè),如果一張表中多個(gè)列都需要被別的表的外鍵參考,需要使用候選碼(非空并且唯一),具體到你的這個(gè)問(wèn)題的需求可以考慮用如下方法解決:

把a(bǔ)表中的bookid和authorid都設(shè)置為非空并且唯一,即

create table a(bookid int not null unique, authorid int not null unique);

然后在book表和author表中就可以分別設(shè)置外鍵來(lái)參照a表中兩個(gè)不同的字段了。

打開(kāi)我的navicat,然后找到我的teacher表,選中它,然后點(diǎn)擊菜單欄上的‘design table'

2. 在彈出的對(duì)話框中找到“Foreign Keys”,然后單機(jī)。

3. 然后會(huì)出現(xiàn)一個(gè)設(shè)置外鍵的界面,一共有七列。簡(jiǎn)單介紹一下這幾列的意思?!畁ame’:可以不填,你一會(huì)保存成功系統(tǒng)會(huì)自動(dòng)生成。FieldName’:就是你要把哪個(gè)鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫(kù)。‘Reference Table‘ :關(guān)聯(lián)的表 這里是dept表‘Forgin filed Names’:關(guān)聯(lián)的的字段,這里是code‘ondelete’:就是刪除的時(shí)候選擇的動(dòng)作。這里我的選擇是setNull,意思就是當(dāng)關(guān)聯(lián)的表刪除以后,teacher》dept字段會(huì)設(shè)置為null.

4. 設(shè)置完成后點(diǎn)擊‘save’保存退出,也可以點(diǎn)擊‘a(chǎn)dd Foreign Key’再添加一個(gè)外鍵。

打開(kāi)我的navicat,然后找到我的teacher表,選中它,然后點(diǎn)擊菜單欄上的‘design table’。如下圖:

2. 在彈出的對(duì)話框中找到“Foreign Keys”,然后單機(jī)。如下圖:

3. 然后會(huì)出現(xiàn)一個(gè)設(shè)置外鍵的界面,一共有七列。簡(jiǎn)單介紹一下這幾列的意思?!畁ame’:可以不填,你一會(huì)保存成功系統(tǒng)會(huì)自動(dòng)生成。FieldName’:就是你要把哪個(gè)鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫(kù)?!甊eference Table‘ :關(guān)聯(lián)的表 這里是dept表‘Forgin filed Names’:關(guān)聯(lián)的的字段,這里是code‘ondelete’:就是刪除的時(shí)候選擇的動(dòng)作。這里我的選擇是setNull,意思就是當(dāng)關(guān)聯(lián)的表刪除以后,teacher》dept字段會(huì)設(shè)置為null。如圖

4. 設(shè)置完成后點(diǎn)擊‘save’保存退出,也可以點(diǎn)擊‘a(chǎn)dd Foreign Key’再添加一個(gè)外鍵。k如圖:

mysql外鍵怎么寫

mysql添加外鍵:

為已經(jīng)添加好的數(shù)據(jù)表添加外鍵:

語(yǔ)法:alter table 表名 add constraint FK_ID foreign key(你的外鍵字段名) REFERENCES 外表表名(對(duì)應(yīng)的表的主鍵字段名);

例: alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)

//FK_ID是外鍵的名稱

/*

CREATE TABLE `tb_active` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`title` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,

`user_id` int(11) NOT NULL,

PRIMARY KEY (`id`),

KEY `user_id` (`user_id`),

KEY `user_id_2` (`user_id`),

CONSTRAINT `FK_ID` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1

*/

mysql 如何建立外鍵

詳細(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)字段名可以取不一樣名字,但類型必須一致

mysql外鍵約束怎么寫

你好朋友

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如何創(chuàng)建外鍵

create

table

volunteer(

志愿者編號(hào)

varchar(6)

not

null,

志愿者姓名

varchar(8),

班級(jí)編號(hào)

varchar(4),

constraint

PK_V

primary

key

(志愿者編號(hào)));

create

table

class(

班級(jí)編號(hào)

varchar(4),

班級(jí)名稱

varchar(20),

學(xué)院

varchar(20),

constraint

PK_C

primary

key(班級(jí)編號(hào)),

班級(jí)編號(hào)

varchar

foreign

key

references

volunteer(班級(jí)編號(hào)));

你這個(gè)試下,我試了可以的

希望可以幫到你

SQL

創(chuàng)建外鍵語(yǔ)句的方法:constraint

外鍵名字

foreign

key

references

外鍵表(外鍵字段)

分享題目:mysql怎么寫外鍵關(guān)系,mysql主鍵和外鍵的用法
文章網(wǎng)址:http://muchs.cn/article12/hcgjgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)公司、ChatGPT、做網(wǎng)站

廣告

聲明:本網(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)

手機(jī)網(wǎng)站建設(shè)