1. 程式人生 > 其它 >MySQL表的關聯關係

MySQL表的關聯關係

  在實際開發中資料表之間存在著各種關聯關係。在此,介紹MySQL中資料表的三種關聯關係。
  
  多對一
  
  多對一(亦稱為一對多)是資料表中最常見的一種關係。例如:員工與部門之間的關係,一個部門可以有多個員工;而一個員工不能屬於多個部門只屬於某個部門。在多對一的表關係 中,應將外來鍵建在多的一方否則會造成資料的冗餘。
  
  多對多
  
  多對多是資料表中常見的一種關係。例如:學生與老師之間的關係,一個學生可以有多個老師而且一個老師有多個學生。通常情況下,為了實現這種關係需要定義一張中間表(亦稱為連線表)該表會存在兩個外來鍵分別參照老師表和學生表。
  
  一對一
  
  在開發過程中,一對一的關聯關係在資料庫中並不常見;因為以這種方式儲存的資訊通常會放在同一張表中。
  mysql安裝:

http://install.cuohei.com/
  接下來,我們來學習在一對多的關聯關係中如果新增和刪除資料。先準備一些測試資料,程式碼如下:
  
  DROP TABLE IF EXISTS student;
  
  DROP TABLE IF EXISTS class;
  
  -- 建立班級表
  
  CREATE TABLE class(
  
  cid int(4) NOT NULL PRIMARY KEY,
  
  cname varchar(30)
  
  );
  
  -- 建立學生表
  
  CREATE TABLE student(
  
  sid int(8) NOT NULL PRIMARY KEY,
  
  sname varchar(30),
  
  classid int(8) NOT NULL
  
  );
  
  -- 為學生表新增外來鍵約束
  
  ALTER TABLE student ADD CONSTRAINT fk_student_classid FOREIGN KEY(classid) REFERENCES class(cid);
  
  -- 向班級表插入資料
  
  INSERT INTO class(cid,cname)VALUES(1,'Java');
  
  INSERT INTO class(cid,cname)VALUES(2,'Python');
  
  -- 向學生表插入資料
  
  INSERT INTO student(sid,sname,classid)VALUES(1,'tome',1);
  
  INSERT INTO student(sid,sname,classid)VALUES(2,'lucy',1);
  
  INSERT INTO student(sid,sname,classid)VALUES(3,'lili',2);
  
  INSERT INTO student(sid,sname,classid)VALUES(4,'domi',2);
  
  1.關聯查詢
  
  查詢Java班的所有學生 MySQL命令:
  
  select * from student where classid=(select cid from class where cname='Java');
  
  2.關於關聯關係的刪除資料
  
  請從班級表中刪除Java班級。在此,請注意:班級表和學生表之間存在關聯關係;要刪除Java班級,應該先刪除學生表中與該班相關聯的學生。否則,假若先刪除Java班那麼學生表中的cid就失去了關聯
  
  刪除Java班 MySQL命令:
  
  delete from student where classid=(select cid from class where cname='Java');
  
  delete from class where cname='Java';