某单位职工数据库包含以下三种表: 职工(职工号,姓名,年龄,性别,所在部门) 部门(部门编号,部门名,办公地点,负责人) 客户(客户编号,客户名,联系方式) 合同(职工号,客户编号,签约日期,合同金额) 其中,每个表的主码用下划线标识,“职工”表的外码是“所在部门”,“部门”表的外码是“负责人”。 用SQL完成以下各题。 (7)在“职工”表和“合同”表上创建一个按部门统计2021年合同金总额的视图“2021各部门业绩统计”,包含“所在部门”“合同金总额”两列。 (8)在“职工”表上创建一个触发器,要求插入的职工记录的性别为“男”或“女”,如果插 人的记录不满足条件,则在插人后再删除该记录。 (9)在“合同”表上创建一个触发器,要求在更改客户编号时,必须服从完整性约束。
时间: 2024-03-11 21:46:30 浏览: 53
(7)在“职工”表和“合同”表上创建一个按部门统计2021年合同金总额的视图“2021各部门业绩统计”,包含“所在部门”“合同金总额”两列。
```sql
CREATE VIEW 2021各部门业绩统计 AS
SELECT 职工.所在部门, SUM(合同金额) AS 合同金总额
FROM 职工, 合同
WHERE 职工.职工号 = 合同.职工号 AND YEAR(签约日期) = 2021
GROUP BY 职工.所在部门;
```
(8)在“职工”表上创建一个触发器,要求插入的职工记录的性别为“男”或“女”,如果插入的记录不满足条件,则在插入后再删除该记录。
```sql
CREATE TRIGGER check_gender
BEFORE INSERT ON 职工
FOR EACH ROW
BEGIN
IF NEW.性别 NOT IN ('男', '女') THEN
DELETE FROM 职工 WHERE 职工号 = NEW.职工号;
END IF;
END;
```
(9)在“合同”表上创建一个触发器,要求在更改客户编号时,必须服从完整性约束。
```sql
CREATE TRIGGER check_customer_id
BEFORE UPDATE ON 合同
FOR EACH ROW
BEGIN
IF NOT EXISTS (SELECT * FROM 客户 WHERE 客户编号 = NEW.客户编号) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '客户编号不存在';
END IF;
END;
```