我在 MySql 表中有一个表,如下所示
row_timestamp timestamp
, row_id int(11) auto_increment
, mrn char(17)
, patients_last_name varchar(50)
, patients_first_name varchar(50)
, ssn char(4) default '0000'
, visit_key NULL
插入记录后,我想将 visit_key 设置为 visit_key = concat(mrn, row_id)
我试图通过插入前触发器来完成此操作但无济于事,我不断得到 mrn 列不在字段选择列表中。
更新
我尝试了以下方法,但似乎不起作用,因为 auto_increment 尚未递增:
set new.visit_key = concat(new.mrn, new.row_id)
我也试过
set new.visit_key = concat(new.mrn, max(row_id)+1)
我正在考虑将触发器用作 MS Access 中的计算字段,这合理吗?想法?由于 visit_key 在技术上是 NULL
并且您无法更新新值,所以这样做是不可能的吗?
更新
我使用了从这个问题 here 改编的以下代码
DELIMITER //
CREATE TRIGGER vkt AFTER INSERT ON demographic_information
FOR EACH ROW
BEGIN
UPDATE `demographic_information` SET visit_key_test = concat(new.mrn, mew.row_id) WHERE row_id = NEW.row_id;
END;
//
DELIMITER ;
并得到以下错误信息:
INSERT INTO `manchuco_nys_trauma`.`demographic_information` (
`row_timestamp` ,
`row_id` ,
`mrn` ,
`patients_last_name` ,
`patients_first_name` ,
`ssn` ,
`visit_id` ,
`visit_key_test`
)
VALUES (
CURRENT_TIMESTAMP , NULL , '123456', 'Sanderson', 'Steven', '1234', '12345670', NULL
)
MySQL said: Documentation
#1442 - Can't update table 'demographic_information' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
谢谢,
最佳答案
您观察到的情况似乎很正常:因为您正在使用 BEFORE INSERT,id
值尚不存在。
这同样适用于您对 concat(new.mrn, **new**.row_id)
的尝试:NEW 目前没有任何意义。
所以我建议您改为使用 AFTER INSERT。
关于MySQL - 插入信息后更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36050012/