如何编写MySQL触发器实现自动生成记录并设置默认值?
MySQL 触发器实现方案
前置准备操作
触发器依赖默认医生和药品数据,先执行以下SQL插入基础数据:
插入默认医生
-- 根据Doctors表实际字段调整,示例假设包含doctor_id(自增)、doctor_name、department字段 INSERT INTO Doctors (doctor_name, department) VALUES ('默认医生', '全科医学科');
插入默认药品
-- 根据Medicine表实际字段调整,示例假设包含medicine_id(自增)、medicine_name、spec字段 INSERT INTO Medicine (medicine_name, spec) VALUES ('基础治疗用药', '10mg/片');
触发器1:新增患者自动生成处方记录
当Patients表新增数据时,自动在Prescription表创建关联该患者与默认医生的处方记录:
DELIMITER // CREATE TRIGGER trg_after_patient_insert AFTER INSERT ON Patients FOR EACH ROW BEGIN -- 声明变量存储默认医生ID DECLARE default_doc_id INT; -- 查询获取默认医生ID(按名称匹配,可根据实际调整查询条件) SELECT doctor_id INTO default_doc_id FROM Doctors WHERE doctor_name = '默认医生' LIMIT 1; -- 插入处方记录,根据Prescription表实际字段调整 INSERT INTO Prescription (patient_id, doctor_id, create_time) VALUES (NEW.patient_id, default_doc_id, NOW()); END // DELIMITER ;
触发器2:新增疾病自动创建关联默认药品的治疗记录
当Sickness表新增数据时,自动在Prescription表创建关联该疾病与默认药品的治疗记录(假设Sickness表关联患者ID,若为疾病字典表需调整逻辑):
DELIMITER // CREATE TRIGGER trg_after_sickness_insert AFTER INSERT ON Sickness FOR EACH ROW BEGIN -- 声明变量存储默认药品ID DECLARE default_med_id INT; -- 查询获取默认药品ID(按名称匹配,可根据实际调整查询条件) SELECT medicine_id INTO default_med_id FROM Medicine WHERE medicine_name = '基础治疗用药' LIMIT 1; -- 插入治疗记录,根据Prescription表实际字段调整 INSERT INTO Prescription (patient_id, sickness_id, medicine_id, create_time) VALUES (NEW.patient_id, NEW.sickness_id, default_med_id, NOW()); END // DELIMITER ;
注意事项
- 请根据你的实际表结构调整所有SQL中的字段名(如主键名、业务字段名);
- 如果
Sickness是疾病类型字典表(不关联患者),需修改触发器逻辑,比如创建疾病与药品的关联表记录而非直接插入Prescription; - 将上述所有SQL保存到
triggers.txt文件即可。
内容的提问来源于stack exchange,提问作者Steven Sivio
相关产品推荐
相关产品推荐

