zoukankan      html  css  js  c++  java
  • mysql使用触发器解决冗余字段未保存的问题

    1.在t_trans_surgery_info 表中保存其他关联表的冗余字段

    drop TRIGGER if EXISTS auto_set_value;
    
    CREATE TRIGGER auto_set_value BEFORE INSERT ON t_trans_surgery_info FOR EACH ROW
    begin
    SET new.patient_id = (
        SELECT
            p.patient_id
        FROM
            t_trans_patient p
        LEFT JOIN t_trans_seek_medical m ON p.patient_id = m.patient_id
        WHERE
            m.medical_id = new.medical_id
    );
    
    SET new.his_patient_id = (
        SELECT
            p.his_patient_id
        FROM
            t_trans_patient p
        LEFT JOIN t_trans_seek_medical m ON p.patient_id = m.patient_id
        WHERE
            m.medical_id = new.medical_id
    );
    
    SET new.patient_name = (
        SELECT
            p.patient_name
        FROM
            t_trans_patient p
        LEFT JOIN t_trans_seek_medical m ON p.patient_id = m.patient_id
        WHERE
            m.medical_id = new.medical_id
    );
    
    SET new.patient_pym = (
        SELECT
            p.pym
        FROM
            t_trans_patient p
        LEFT JOIN t_trans_seek_medical m ON p.patient_id = m.patient_id
        WHERE
            m.medical_id = new.medical_id
    );
    
    SET new.patient_type = (
        SELECT
            m.patient_type
        FROM
            t_trans_seek_medical m
        WHERE
            m.medical_id = new.medical_id
    );
    
    SET new.opt_room_name = (
        SELECT
            r.room_name
        FROM
            t_base_operation_room r
        WHERE
            r.opt_room_id = new.opt_room_id
    );
    
    SET new.opt_room_pym = (
        SELECT
            r.pym
        FROM
            t_base_operation_room r
        WHERE
            r.opt_room_id = new.opt_room_id
    );
    
    SET new.opt_room_no = (
        SELECT
            r.room_no
        FROM
            t_base_operation_room r
        WHERE
            r.opt_room_id = new.opt_room_id
    );
    
    SET new.dept_pym = (
        SELECT
            d.pym
        FROM
            t_base_dept d
        WHERE
            d.dept_id = new.dept_id
    );
    
    SET new.dept_name = (
        SELECT
            d.dept_name
        FROM
            t_base_dept d
        WHERE
            d.dept_id = new.dept_id
    );
    
    end

    2.使用触发器当一张表的某个字段更新为某个值时,更新另一张表的某个字段

    drop TRIGGER if EXISTS tri_name;
    CREATE TRIGGER tri_name AFTER UPDATE ON class FOR EACH ROW
    BEGIN
    IF new.class_name = '99' THEN
        UPDATE student
    SET student.student_name = '99' WHERE new.class_id = student.class_id;
    end if;
    END;
  • 相关阅读:
    wait(),notify(),notifyAll()
    AsyncTask
    锻炼记忆力
    apache URL重写 标志表 以及 错误解决方法
    php如何判断字符串是否是字母和数字的组合
    linux 下screen 使用
    MongoDB运行状态、性能监控,分析
    批量 汉字 转 拼音方法
    mysql 数据库备份
    LINUX下 一句话添加用户并设置ROOT权限
  • 原文地址:https://www.cnblogs.com/guanxiaohe/p/11993563.html
Copyright © 2011-2022 走看看