1. 程式人生 > >MySQL資料庫操作(四)——多表之間的關係

MySQL資料庫操作(四)——多表之間的關係

主鍵與外來鍵

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);

//一個部門對應多個員工,一對多