在實際開發中數據表之間存在着各種關聯關系。在此,介紹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';