5.创建一个供应历史表HSPJ(SNO,PNO,JNO,QTY,username,modifydate),记录供应变化情况。实现这样的约束控制:如果spj表中的某条供应记录发生改变,就在hspj表中插入一行历史记录,其中username为操作的用户名,modifydate为操作的时间。在mysql8下执行
时间: 2023-10-05 20:04:16 浏览: 57
在 MySQL 8 下执行以下 SQL 语句可以创建供应历史表 HSPJ,并实现所述的约束控制:
```sql
CREATE TABLE HSPJ (
SNO VARCHAR(10),
PNO VARCHAR(10),
JNO VARCHAR(10),
QTY INT,
username VARCHAR(50),
modifydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
DELIMITER //
CREATE TRIGGER tr_hspj_insert
AFTER INSERT ON SPJ
FOR EACH ROW
BEGIN
INSERT INTO HSPJ (SNO, PNO, JNO, QTY, username)
VALUES (NEW.SNO, NEW.PNO, NEW.JNO, NEW.QTY, USER());
END//
CREATE TRIGGER tr_hspj_update
AFTER UPDATE ON SPJ
FOR EACH ROW
BEGIN
IF NOT (OLD.SNO <=> NEW.SNO AND OLD.PNO <=> NEW.PNO AND OLD.JNO <=> NEW.JNO AND OLD.QTY <=> NEW.QTY) THEN
INSERT INTO HSPJ (SNO, PNO, JNO, QTY, username)
VALUES (NEW.SNO, NEW.PNO, NEW.JNO, NEW.QTY, USER());
END IF;
END//
DELIMITER ;
```
上述 SQL 语句中,它创建了一个名为 HSPJ 的表,包含 SNO、PNO、JNO、QTY、username 和 modifydate 六个字段,其中 modifydate 的默认值是当前时间戳,表示最后修改时间。它还创建了两个触发器:
1. tr_hspj_insert:在 SPJ 表中插入新记录时,自动将相应的供应历史记录插入到 HSPJ 表中,其中 username 为当前用户。
2. tr_hspj_update:在 SPJ 表中更新记录时,如果 SNO、PNO、JNO 或 QTY 发生变化,则自动将相应的供应历史记录插入到 HSPJ 表中,其中 username 为当前用户。
这样,每次对 SPJ 表进行插入或更新操作时,就能够自动记录相应的供应历史信息。
阅读全文