【发布时间】:2021-12-21 00:20:12
【问题描述】:
CREATE TABLE patients(
s_no INT AUTO_INCREMENT PRIMARY KEY,
booking_code VARCHAR(64),
patient_id INT(5),
visit_count INT(5)
);
INSERT INTO patients (booking_code, patient_id, visit_count) VALUES
('AB103', 3,5),
('AB432', 4,2),
('AB987', 5,1),
('AB733', 6,3),
('AB111', 7,2),
('AB212', 8,4);
INSERT INTO patients (booking_code, patient_id, visit_count) VALUES
('AB734', 4,2),
('AB601', 6,3),
('AB445', 7,2),
('AB389', 8,4);
我想要的是,每次添加新的预订记录时,如果 patient_id 之前已经向我们预订过,那么他之前记录中的 visit_count 应该更新为插入新记录中的最新 visit_count。 请注意,这是一个分析数据库,为了便于分析和仪表板代码,对其进行了非规范化处理。
【问题讨论】:
-
触发器无法解决 - 它无法更改表中除当前行之外的行。在其中的事务中使用存储过程和 2 个查询。
-
您的表称为
patient,但实际上它存储患者和预订之间的连接信息。因此,您不应将总预订量的信息存储在此表中,因为此数据是患者的属性,而不是患者与确定预订之间的链接。 -
谢谢@Akina。我已从患者表中删除了 visit_count 列。现在我使用视图来查看相同的患者表,但在最后一列中使用新计算的 visit_count。这样我就不必担心更新此列的值了。
标签: mysql stored-procedures triggers sql-update