我在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.
谢谢,
答案 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。