橙色为primary key,绿色为foreign key
emp_id | name | birth_date | sex | salary | branch_id | sup_id |
206 | 小黄 | 1999/10/8 | F | 50000 | 1 | NULL |
207 | 小绿 | 1985/9/16 | M | 29000 | 2 | 206 |
208 | 小黑 | 2000/12/19 | M | 35000 | 3 | 206 |
209 | 小白 | 1997/1/22 | F | 39000 | 3 | 207 |
210 | 小兰 | 1925/11/10 | F | 84000 | 1 | 207 |
CREATE TABLE `employee`(
`emp_id` INT PRIMARY KEY,
`name` VARCHAR(20),
`birth_date` DATE,
`sex` VARCHAR(1),
`salary` INT,
`branch_id` INT,
`sup_id` INT
);
为什么没有把branch_id和sup_id设置为foreign key呢?
因为目前还没有创建,现在设定会出错
branch_id | branch_name | manager_id |
1 | 研发 | 206 |
2 | 行政 | 207 |
3 | 资讯 | 208 |
CREATE TABLE `branch`(
`branch_id` INT PRIMARY KEY,
`branch_name` VARCHAR(20),
`manager_id` INT,
FOREIGN KEY (`manager_id`) REFERENCES `employee`(`emp_id`) ON DELETE SET NULL
);
foreign key在写的时候,要把对应的表格写上
on delete set null的意思是,如果资料被删掉,那就设置为null
ALTER TABLE `employee`
ADD FOREIGN KEY(`branch_id`)
REFERENCES `branch`(`branch_id`)
ON DELETE SET NULL;
ALTER TABLE `employee`
ADD FOREIGN KEY(`sup_id`)
REFERENCES `employee`(`emp_id`)
ON DELETE SET NULL;
补上`employee`的foreign key
client_id | client_name | phone |
400 | 阿狗 | 254354335 |
401 | 阿猫 | 25633899 |
402 | 旺来 | 45354345 |
403 | 露西 | 54354365 |
404 | 艾瑞克 | 18783783 |
CREATE TABLE `client`(
`client_id` INT PRIMARY KEY,
`client_name` VARCHAR(20),
`phone` VARCHAR(20)
);
创建客户的表格
emp_id | client_id | total_sales |
206 | 400 | 70000 |
207 | 401 | 24000 |
208 | 400 | 9800 |
208 | 403 | 24000 |
210 | 404 | 879400 |
CREATE TABLE `work_with`(
`emp_id` INT,
`client_id` INT,
`total_sales` INT,
PRIMARY KEY(`emp_id`, `client_id`),
FOREIGN KEY(`emp_id`) REFERENCES `employee`(`emp_id`) ON DELETE CASCADE,
FOREIGN KEY(`client_id`) REFERENCES `client`(`client_id`) ON DELETE CASCADE
);
on delete cascade的意思是,如果资料被删掉,那也一起删掉
1 增加部门的资料
INSERT INTO `branch` VALUES(1, "研发", NULL);
INSERT INTO `branch` VALUES(2, "行政", NULL);
INSERT INTO `branch` VALUES(3, "咨讯", NULL);
为什么不先添加员工的资料?
因为`employee`的foreign key没有对应
当然,`branch`的foreign key也会出错,因此,先把manager_id设置为null
2 增加员工的资料
INSERT INTO `employee` VALUES(206, "小黄", "1998-10-08", "F", 50000, 1, NULL);
INSERT INTO `employee` VALUES(207, "小绿", "1985-09-16", "M", 29000, 2, 206);
INSERT INTO `employee` VALUES(208, "小黑", "2000-12-19", "M", 35000, 3, 206);
INSERT INTO `employee` VALUES(209, "小白", "1997-01-22", "F", 39000, 3, 207);
INSERT INTO `employee` VALUES(210, "小兰", "1925-11-19", "F", 84000, 1, 207);
此时,不会再出错了
3 修改manager_id
UPDATE `branch`
SET `manager_id` = 206
WHERE `branch_id` = 1;
UPDATE `branch`
SET `manager_id` = 207
WHERE `branch_id` = 2;
UPDATE `branch`
SET `manager_id` = 208
WHERE `branch_id` = 3;
4 增加客户的资料
INSERT INTO `client` VALUES(400, "阿狗", "254354335");
INSERT INTO `client` VALUES(401, "阿猫", "25633899");
INSERT INTO `client` VALUES(402, "旺来", "45354345");
INSERT INTO `client` VALUES(403, "露西", "54354365");
INSERT INTO `client` VALUES(404, "艾瑞克", "18783783");
5 增加销售业绩资料
insert into `work_with` values(206, 400, '70000');
insert into `work_with` values(207, 401, '24000');
insert into `work_with` values(208, 402, '9800');
insert into `work_with` values(208, 403, '24000');
insert into `work_with` values(210, 404, '87940');