2017-02-02 36 views
-1

我已经尝试了几个来自stackoverflow的建议,但我一直在遇到错误。在mysql中添加两列并存储在第三列

我有一个表:测试

我有3列:

first (varchar) 
last (varchar) 
first_last (varchar) 

我想要做的,是建立一个触发器,所以当我进入第一个和最后一个,并保存,first_last的值被计算并保存。这是我现在有:

Trigger name: update_first_last 
Table: test 
Time: AFTER 
Event: INSERT 
Definition: UPDATE test SET test.first_last=CONCAT(test.first, test.last) 

我得到的错误:

#1442 - Can't update table 'test' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 
+5

不要这样做。只要你想看到一个完整的名字,就把'first'和'last'连接起来 – RiggsFolly

+0

请给出你试过的东西以及你得到的错误的例子。 – jwatkins

+0

为什么这么做不好?我意识到我可以稍后连接,但是意味着运行脚本,我希望效果是即时的 – EastsideDeveloper

回答

1

两个insert语句和你的触发要修改这是不允许的整个表。你可以让这样的事情,而不是:

CREATE TRIGGER update_first_last 
BEFORE INSERT 
ON test 
FOR EACH ROW 
SET NEW.first_last=CONCAT(NEW.first, NEW.last) 

如果列第一最后没有定义为NOT NULL那么你应该创建一个UPDATE动作类似扳机。

+0

我收到以下错误消息:#1362 - 在触发后不允许更新NEW行 – EastsideDeveloper

+0

没错,我更改了命令 - 应该是BEFORE INSERT。 –

+0

是的,这是有效的 – EastsideDeveloper

相关问题