2013-03-16 2 views
2

Я имею 1 таблицу, как это:как создать триггер, чтобы сделать конкатенацию полей

user 
---------------------------------------- 
id | first_name | last_name | full_name 
---------------------------------------- 

Я хочу написать триггер, который будет Concat в first_name и Last_name к full_name.

Я попытался ниже спускового:

delimiter | 
create trigger fullname after insert on user 
for each row 
begin 
update user set full_name=(select concat(first_name,last_name) from user where id=new.id)where id=new.id; 
end; 
| 

Это показывает эта ошибка при вставке данных в таблицу пользователей:

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

+0

Проверьте это: http://stackoverflow.com/questions/12877732/mysql-trigger-for-updating-same-table-after-insert – mavili

ответ

6

Вы не можете изменить таблицу в то время как триггер INSERT стреляет. Тем не менее, вы можете создать триггер перед вставкой записи.

DELIMITER | 
CREATE TRIGGER `fullname` BEFORE INSERT ON `user` 
FOR EACH ROW 
BEGIN 
    SET NEW.full_name = CONCAT(NEW.first_name, ' ', NEW.last_name); 
END | 
DELIMITER ; 
+0

упс моя ошибка эта логика создание триггера до того, как вставить запись не ударило в мой разум .... его работа :) thnk you sir ... !!! –

1

В вашем случае, я хотел бы предложить вам использовать вычисляемый столбец вместо триггера, так как триггер необходимо создать для вставки/обновления;

Надеюсь, это может вам помочь.


    create table [users] 
    (id int identity(1,1), 
     First_Name varchar(100), 
     Last_Name varchar(100), 
     Full_Name as concat(First_Name,' ', Last_Name) persisted 
    ) 
     Insert into [users] 
     select 'Bob', 'Ryan'

 select * from [users] 

    update users 
    set First_Name = 'Michael' 
    where id=1 

    select * from users 

Смежные вопросы