MySQL - 在插入信息后更新一列

时间:2016-03-17 01:21:14

标签: mysql triggers

我在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. 

谢谢,

2 个答案:

答案 0 :(得分:0)

尝试在触发器中选择自动增量值:

CREATE TRIGGER trigger_name AFTER INSERT ON yourTable FOR EACH ROW
BEGIN
    DECLARE next_id integer;
    SET next_id = (SELECT AUTO_INCREMENT
                   FROM information_schema.TABLES
                   WHERE TABLE_SCHEMA='yourDB' AND TABLE_NAME='yourTable');
    SET new.visit_key = CONCAT(new.mrn, next_id);
END

我在this SO article中发现了这种方法。

答案 1 :(得分:0)

您观察到的内容似乎正常:因为您正在使用 BEFORE INSERT,id值尚不存在。
这同样适用于concat(new.mrn, **new**.row_id)的尝试:目前没有任何意义。

所以我建议你改用AFTER INSERT。