You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:50:28