一張表中的主鍵只能有一個(gè),外鍵可以有多個(gè),如果一張表中多個(gè)列都需要被別的表的外鍵參考,需要使用候選碼(非空并且唯一),具體到你的這個(gè)問題的需求可以考慮用如下方法解決:
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括吉首網(wǎng)站建設(shè)、吉首網(wǎng)站制作、吉首網(wǎng)頁制作以及吉首網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,吉首網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到吉首省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
把a(bǔ)表中的bookid和authorid都設(shè)置為非空并且唯一,即
create table a(bookid int not null unique, authorid int not null unique);
然后在book表和author表中就可以分別設(shè)置外鍵來參照a表中兩個(gè)不同的字段了。
打開我的navicat,然后找到我的teacher表,選中它,然后點(diǎn)擊菜單欄上的‘design table'
2. 在彈出的對話框中找到“Foreign Keys”,然后單機(jī)。
3. 然后會(huì)出現(xiàn)一個(gè)設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思?!畁ame’:可以不填,你一會(huì)保存成功系統(tǒng)會(huì)自動(dòng)生成。FieldName’:就是你要把哪個(gè)鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫。‘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è)外鍵。
打開我的navicat,然后找到我的teacher表,選中它,然后點(diǎn)擊菜單欄上的‘design table’。如下圖:
2. 在彈出的對話框中找到“Foreign Keys”,然后單機(jī)。如下圖:
3. 然后會(huì)出現(xiàn)一個(gè)設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思?!畁ame’:可以不填,你一會(huì)保存成功系統(tǒng)會(huì)自動(dòng)生成。FieldName’:就是你要把哪個(gè)鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫。‘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如圖:
打開我的navicat,然后找到我的teacher表,選中它,然后點(diǎn)擊菜單欄上的‘design table'
在彈出的對話框中找到“Foreign?Keys”,然后單機(jī)。
然后會(huì)出現(xiàn)一個(gè)設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思。‘name’:可以不填,你一會(huì)保存成功系統(tǒng)會(huì)自動(dòng)生成。FieldName’:就是你要把哪個(gè)鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference?DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫。‘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.
設(shè)置完成后點(diǎn)擊‘save’保存退出,也可以點(diǎn)擊‘a(chǎn)dd?Foreign?Key’再添加一個(gè)外鍵。
打開我的navicat,然后找到我的teacher表,選中它,然后點(diǎn)擊菜單欄上的‘design?table’。如下圖:
在彈出的對話框中找到“Foreign?Keys”,然后單機(jī)。如下圖:
然后會(huì)出現(xiàn)一個(gè)設(shè)置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思。‘name’:可以不填,你一會(huì)保存成功系統(tǒng)會(huì)自動(dòng)生成。FieldName’:就是你要把哪個(gè)鍵設(shè)置為外鍵。這里選擇‘dept’,‘Reference?DadaBase’:外鍵關(guān)聯(lián)的數(shù)據(jù)庫?!甊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。如圖
設(shè)置完成后點(diǎn)擊‘save’保存退出,也可以點(diǎn)擊‘a(chǎn)dd?Foreign?Key’再添加一個(gè)外鍵。k如圖:
當(dāng)發(fā)生此類的錯(cuò)誤的時(shí)候,從三個(gè)角度入手:
1、確保主表有主鍵。
2、確保主從表數(shù)據(jù)引擎為InnoDB類型。
3、確定從表外鍵字段類型與主表一致。
DROP TABLE IF EXISTS `courseteacher`;
CREATE TABLE `courseteacher` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tno` int(10) unsigned NOT NULL,
`cno` int(10) unsigned NOT NULL,
PRIMARY KEY (`ID`),
KEY `FK_courseteacher_1teacher1` (`tno`),
KEY `FK_courseteacher_2classes1` (`cno`),
CONSTRAINT `FK_courseteacher_1terchar1` FOREIGN KEY (`tno`) REFERENCES `Teacher` (`tno`) ON DELETE CASCADE,
CONSTRAINT `FK_courseteacher_2clases1` FOREIGN KEY (`cno`) REFERENCES `Course` (`cno`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
試過沒問題啊,你往這個(gè)表插入數(shù)據(jù)的前提是tno和cno必須存在于Teacher表和Course表
1)主鍵是什么,主鍵在數(shù)據(jù)表中是唯一的標(biāo)示,主鍵在一個(gè)表中是不允許重復(fù)的;
2)外鍵是什么,外鍵是主鍵表的一個(gè)對應(yīng)關(guān)系表的連接標(biāo)示;
在建立外鍵前你要確定,外鍵表是否已經(jīng)建立;
從你的sql語句中可以看出你的錯(cuò)誤:不說你關(guān)聯(lián)表是不是存在;
先看你主鍵建立:gid int not null primary key,
你在這里已經(jīng)把gid這個(gè)屬性定義為主鍵了,
在下面foreign key (gid) references goods (gid),gid字段設(shè)置為外鍵就明顯的有語法錯(cuò)誤;