數據庫管理之外鍵(注意:生產環境中禁用)

 

 

外鍵添加方式一:在創建表的時候,增加約束(麻煩,複雜)

學生表的 gradeid 字段要去引用年級表的 gradeid

定義外鍵key

給這個外鍵添加約束 (執行引用)

1.執行下面語句,生成grade表

CREATE TABLE `grade`(
  `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年級id',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年級名稱',
  PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8 ; 

2.刪除之前測試的student表:新建一個新的,插入年級信息

 

-- 學生表的 gradeid 字段要去引用年級表的 gradeid
-- 定義外鍵key
-- 給這個外鍵添加約束 (執行引用)
CREATE TABLE IF NOT EXISTS `student`( 
   `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '學號', 
   `name` VARCHAR(30)NOT NULL DEFAULT '匿名' COMMENT '姓名',
   `pwd` VARCHAR(20)NOT NULL DEFAULT '123456' COMMENT '密碼', 
   `sex` VARCHAR(2)NOT NULL DEFAULT '女' COMMENT '性別', 
   `birthday` DATETIME DEFAULT NULL COMMENT '出生日期', 
   `gradeid` INT(10) NOT NULL COMMENT '學生的年級',
   `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址', 
   `email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱', 
   PRIMARY KEY (`id`), 
   KEY `FK_gradeid`(`gradeid`) ,
   CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
 )ENGINE=INNODB DEFAULT CHARSET=utf8 ; 

 

 

 

 

 

刪除有外鍵關係的表的時候,必須要刪除引用別人的表(student,從表),再刪除被引用的表(grade,主表)

 

外鍵添加方式二:alter從表add外鍵

ALTER TABLE 表

ADD CONSTRAINT 約束名 FOREIGN KEY(作爲外鍵的列) REFERENCES 哪個表(哪個字段);

 

1.執行下面語句,生成grade表

CREATE TABLE `grade`(
  `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年級id',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年級名稱',
  PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8 ; 

2.執行引用,生成student表

CREATE TABLE IF NOT EXISTS `student`( 
   `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '學號', 
   `name` VARCHAR(30)NOT NULL DEFAULT '匿名' COMMENT '姓名',
   `pwd` VARCHAR(20)NOT NULL DEFAULT '123456' COMMENT '密碼', 
   `sex` VARCHAR(2)NOT NULL DEFAULT '女' COMMENT '性別', 
   `birthday` DATETIME DEFAULT NULL COMMENT '出生日期', 
   `gradeid` INT(10) NOT NULL COMMENT '學生的年級',
   `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址', 
   `email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱', 
   PRIMARY KEY (`id`)
 )ENGINE=INNODB DEFAULT CHARSET=utf8 ; 

3.執行引用,生成外鍵

-- 創建表的時候沒有外鍵關係
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

 

 

外鍵添加方式三:圖形界面化

 

 

以上三種外鍵都是物理外鍵,數據庫級別的外鍵,我們不建議使用!(避免數據庫過多(例如不好刪除),造成困擾,瞭解即可)

阿里的Java規範:

【強制】不得使用外鍵與級聯,一切外鍵概念必須在應用層解決

答:每次做DELETE或者UPDATE都必須考慮外鍵約束,會導致開發的時候很痛苦,測試數據極爲不方便。

 

最佳實現:

  • 數據庫就是單純的表,只用來存數據,只有行(數據)和列(字段)
  • 我們想使用多張表的數據,想使用外鍵(程序去實現)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章