個人部落格:haichenyi.com。感謝關注
主鍵與外鍵
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);
//一個部門對應多個員工,一對多