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

橙色为primary key,绿色为foreign key 

employee
emp_idnamebirth_datesexsalarybranch_idsup_id
206小黄1999/10/8F500001NULL
207小绿1985/9/16M290002206
208小黑2000/12/19M350003206
209小白1997/1/22F390003207
210小兰1925/11/10F840001207
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_idbranch_namemanager_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_idclient_namephone
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_idclient_idtotal_sales
20640070000
20740124000
2084009800
20840324000
210404879400
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');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值