MySQL - 插入信息后更新列

标签 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. 

谢谢,

最佳答案

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

所以我建议您改为使用 AFTER INSERT。

关于MySQL - 插入信息后更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36050012/

相关文章:

mysql - TRIGGER 中的 SELECT CASE 语句

PHP mysql如何关联三个表显示不同表的输出

mysql - 是否可以移动 MySQL 表中的行数据?

javascript - 如何在 JavaScript 中触发事件?

mysql - 尝试从 mysql 触发器插入时出现语法错误

autocomplete - SublimeText 移除自动完成触发器

php - 在 MySQL 中搜索加密数据的过滤器

具有多个 IF 语句的 MySQL 触发器不起作用

带有选择计数和组的 MySql 查询

java - Spring + quartz : programmatic schedule of one-time, 防失火作业