我想创造一个 trigger
我的医院数据库。这是一个简单的项目,所以 assumption
如果一个病人被检查出医院,他就完全治愈了。所以 trigger
必须从中删除记录
patient_diseases (it contains id, patient_id, disease_id)
当一个 check_out_date
中的列
visit (visit contains id, check_in_date, check_out_date and patient_id)
表从空更改为实际日期。
USE hospital;
DROP TRIGGER IF EXISTS cure_patient;
DELIMITER //
CREATE TRIGGER cure_patient
AFTER UPDATE ON visit
FOR EACH ROW
BEGIN
IF NEW.check_out_date != NULL THEN
DELETE from patient_disease WHERE ???
END IF;
END;
//
DELIMITER ;
到目前为止,我想出了这个,我只是不知道我应该写什么,使脚本采取 patient_id
从更改日期的就诊中删除具有相同日期的记录 patient_id
从另一张table。
visit | CREATE TABLE `visit` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`check_in_date` date DEFAULT NULL,
`check_out_date` date DEFAULT NULL,
`patient_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `patient_id2` (`patient_id`),
CONSTRAINT `patient_id2` FOREIGN KEY (`patient_id`) REFERENCES 'patient` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 |
| p_d | CREATE TABLE `p_d` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`patient_id` int(11) DEFAULT NULL,
`disease_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `patient_id_idx` (`patient_id`),
KEY `disease_id_idx` (`disease_id`),
CONSTRAINT `disease_id` FOREIGN KEY (`disease_id`) REFERENCES `choroba` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `patient_id` FOREIGN KEY (`patient_id`) REFERENCES `patient` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 |
1条答案
按热度按时间vtwuwzda1#
触发器主体应为:
请注意
NEW.check_out_date != NULL
永远不会TRUE
因为任何与NULL
(除<=>
)总会回来的NULL
. 所以你需要使用IS NOT NULL
相反。这个触发器也可以用一条语句来编写(在这种情况下,您不需要使用
BEGIN
以及END
并更改分隔符):