MySQL之關系映射


數據庫的關系一般是用於描述多張表之間的關系。

主要分為:

  • 一對一
  • 一對多
  • 多對多

而不管表與表之間是哪種關系,在創建關聯時都需要通過外鍵(FOREIGN KEY)進行約束,以保證數據的統一性。外鍵通常都是與另一張表的主鍵進行關聯的。

一、一對一關系

一對一關系是指一張表中的一條數據對應另一張表中的唯一一條數據。

例如下面的用戶與用戶詳情表。

用戶表:

CREATE TABLE user( id INT UNSIGNED PRIMARY KEY, name VARCHAR(12), phone CHAR(15) )CHARSET=UTF8;

用戶詳情表:

CREATE TABLE userinfo( id INT UNSIGNED PRIMARY KEY, address VARCHAR(255), uid INT UNSIGNED UNIQUE, FOREIGN KEY(uid) REFERENCES user(id) )CHARSET=UTF8;

一般而言,一個用戶對應一個用戶詳情。所以在創建用戶詳情表時,添加外鍵的字段需要設置唯一(UNIQUE)約束。

二、一對多關系

與上面的一對一關系類似,一對多關系是指一張表中的一條數據,對應另一張表中的多條數據。

例如下面的父子表。

父親表:

CREATE TABLE father( id INT UNSIGNED PRIMARY KEY, name VARCHAR(12), phone CHAR(15) )CHARSET=UTF8;

子女表:

CREATE TABLE child( id INT UNSIGNED PRIMARY KEY, name VARCHAR(12), gender CHAR(10), pid INT UNSIGNED, FOREIGN KEY(pid) REFERENCES father(id) )CHARSET=UTF8;

三、多對多關系

多對多關系是指一張表中的多條數據對應另一張表中的多條數據。

與上面一對一關系和一對多關系不同的是多對多需要一張關系表來描述兩張表的關系,主表和從表沒有直接關系,主表和關系表是一對多關系,從表和關系表也是一對多的關系。

例如下面的專業與課程:

專業表:

CREATE TABLE major( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name CHAR(10), )CHARSET=UTF8;

課程表:

CREATE TABLE course( id INT UNSIGNED AUTO_INCREMENT PEIMARY KEY, name CHAR(10) )CHARSET=UTF8;

關系表:

CREATE TABLE m_c( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, mid INT UNSIGNED, cid INT UNSIGNED, FOREIGN KEY(mid) REFERENCES major(id), FOREIGN KEY(cid) REFERENCES course(id) )CHARSET=UTF8;

四、外鍵約束

在創建表與表之間的關系映射時,外鍵是必不可少的約束字段。通過上面的例子可以總結出外鍵的語法是:

FOREIGN KEY(當前表的外鍵字段) REFERENCES 關聯表名(關聯表字段)

一般而言關聯表字段通常都是關聯表的主鍵字段。

在創建外鍵約束時,要注意的是必須要先有外鍵字段,之后才能添加約束,而且外鍵字段的類型必須要和關聯字段的類型保持一致。添加外鍵只是添加了一個約束,並不是添加新的字段。

查看表的字段以及字段類型的相關信息時。可以使用下面的語法:

DESC 表名;

外鍵約束也可以給已經存在的表添加。

語法:

ALTER TABLE 表名 ADD FOREIGN KEY(外鍵字段) REFERENCES 關聯表名(關聯表主鍵字段);

外鍵約束也是可以刪除的。

語法:

ALTER TABLE 表名 DROP FOREIGN KEY 外鍵的名字;

外鍵的名字再添加外鍵約束時,系統會自動命名。可以通過查看建表語句進行查看。

SHOW CREATE TABLE 表名\G;

在MySQL數據庫中,\G指的是將結果格式化輸出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM