MySQL資料庫操作(四)——多表之間的關係
阿新 • • 發佈:2018-12-11
主鍵與外來鍵
1、一張表可以有多個外來鍵
2、外來鍵是表的主鍵,可以是別的表,也可以是本身(少見)
3、外來鍵可以為null,可以重複,但是不能不存在,必須要查的到
建立語法 foreign key(本表的列名) references 關聯的表名(關聯表的主鍵)
//建立一個部門表 CREATE TABLE dept( did INT PRIMARY KEY AUTO_INCREMENT, dname VARCHAR(50) ); //插入幾條資料 INSERT INTO dept(did,dname) VALUE(NULL,'銷售部'); INSERT INTO dept(did,dname) VALUE(NULL,'技術部'); INSERT INTO dept(did,dname) VALUE(NULL,'人力部'); INSERT INTO dept(did,dname) VALUE(NULL,'保潔部'); //建立一個員工表,這裡的的edid是一個外來鍵,對應部門表的主鍵did CREATE TABLE employee( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(50), edid INT, CONSTRAINT fk_empl_dept FOREIGN KEY(edid) REFERENCES dept(did) ); //或者 CREATE TABLE employee( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(50), edid INT ); alter table employee add CONSTRAINT fk_empl_dept FOREIGN KEY(edid) REFERENCES dept(did); //上面這樣也可以設定外來鍵
一對一關係 把從表的主鍵設定成外來鍵與主表的主鍵關聯
create table emp( eid int primary key auto_increment, ename varchar(50) ); create table hmp( hid int primary key auto_increment, hname varchar(50), constraint fk_hmp_emp foreign key(hid) references emp(eid) ); //如上,這樣建立的兩張表emp與hmp就是一對一的關係 //插入資料 insert into emp values(1,'張三'); insert into hmp values(1,'李四'); //這樣張三跟李四就對應上了
多對多關係 兩個主表+一個關聯表
create table teacher( tid int primary key auto_increment, tname varchar(50) ); create table student( sid int primary key auto_increment, sname varchar(50) ); create table stu_tea( tid int, sid int, constraint fk_student foreign key(sid) references student(sid), constraint fk_teacher foreign key(tid) references teacher(tid) ); //這裡的stu_tea就是關聯表。多對多並不是說多張表對應多張表 //插入資料 insert into teacher values(1,'黃老師'); insert into teacher values(2,'李老師'); insert into teacher values(3,'趙老師'); insert into student values(1,'張三'); insert into student values(2,'李四'); insert into student values(3,'王五'); insert into student values(4,'趙六'); //這裡黃老師教過張三,李四 insert into stu_tea values(1,1); insert into stu_tea values(1,2); //李老師教過王五,趙六 insert into stu_tea values(2,3); insert into stu_tea values(2,4); //趙老師教過張三,李四,王五,趙六 insert into stu_tea values(3,1); insert into stu_tea values(3,2); insert into stu_tea values(3,3); insert into stu_tea values(3,4); //上面這樣,一個學生對應多個老師,一個老師也對應多個學生,叫做多對多的關係
一對多關係 一方不變,另一方在變化
//我們一開始建立的員工表與部門表就是一對多
create table dept(
did int primary key auto_increment,
dname varchar(50)
);
create table emp(
eid int primary key auto_increment,
ename varchar(50)
edid int,
constraint fk_emp_dept foreign key(edid) references dept(did)
);
//這裡的一就是部門表(主表),多就是員工表(附表)
//插入資料
insert into dept values(10,'技術部');
insert into dept values(20,'人事部');
//張三,李四屬於技術部,王五屬於人事部
insert into emp values(null,'張三',10);
insert into emp values(null,'李四',10);
insert into emp values(null,'王五',20);
//一個部門對應多個員工,一對多