【SQL数据库】创建公司资料库

橙色为primary key,绿色为foreign key 

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

 创建客户的表格

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

 

你可能感兴趣的:(数据库,sql,学习)