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