2015-12-07 4 views
0

У меня есть две таблицы users и media.Как написать триггер для вставки и обновления в MySql

Когда я вставляю нового пользователя, я хочу создать триггер для автоматической вставки новой строки media, получить новый вставленный media. id для обновления users. media_id

как это можно сделать? ценим помощь

EDIT:

здесь является определение медиа-стол. media_id - первичный ключ с автоматическим приращением.

CREATE TABLE `media` (
    `media_id` int(10) UNSIGNED NOT NULL, 
    `media_image` tinytext, 
    `media_create_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `media_update_date` datetime NOT NULL 
) 

пользователи таблице:

CREATE TABLE `tf_user` (
    `user_id` int(10) UNSIGNED NOT NULL, 
    `user_name` varchar(50) NOT NULL, 
    `user_email` varchar(100) NOT NULL, 
    `user_gender` varchar(1) NOT NULL, 
    `user_media_id` int(10) UNSIGNED 
) 
+0

пост также определение пользователей. и логика того, что нужно обновлять/заполнять пользователями – amdixon

+0

, логика автоматически генерирует media_id для пользователей после вставки. даже если media_image имеет значение null при запуске. (я не могу изменить структуру, работать над ней как есть) –

+0

См. http://stackoverflow.com/questions/16892070/mysql-after-insert-trigger-which-updates-another-tables-column/ для аналогичного пример –

ответ

1

установка

CREATE TABLE `media` (
    `media_id` int(10) UNSIGNED NOT NULL, 
    `media_image` tinytext, 
    `media_create_date` datetime NOT NULL, 
    `media_update_date` datetime NOT NULL 
); 

CREATE TABLE `tf_user` (
    `user_id` int(10) UNSIGNED NOT NULL, 
    `user_name` varchar(50) NOT NULL, 
    `user_email` varchar(100) NOT NULL, 
    `user_gender` varchar(1) NOT NULL, 
    `user_media_id` int(10) UNSIGNED 
); 

определение триггера

CREATE TABLE `seq` (
    `val` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`val`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

insert into seq(val) values(1); 

delimiter $$ 
create function seq() returns int 
begin 
update seq set val=last_insert_id(val+1); 
return last_insert_id(); 
end $$ 

create trigger tr_ins_user before insert 
on tf_user for each row 
begin 
declare media_id int(10); 

select seq() into media_id; 

insert into media 
(media_id, media_image, media_create_date, media_update_date) 
select media_id, null as media_image, 
current_date as media_create_date, null as media_update_date 
; 

set NEW.user_media_id = media_id; 

end $$ 
delimiter ; 

IO

mysql> insert into tf_user(user_id, user_name, user_email, user_gender, user_media_id) values(3, 'test', '[email protected]', 'M', -1); 
Query OK, 1 row affected, 1 warning (0.01 sec) 

mysql> select * 
    -> from tf_user 
    -> ; 
+---------+-----------+---------------+-------------+---------------+ 
| user_id | user_name | user_email | user_gender | user_media_id | 
+---------+-----------+---------------+-------------+---------------+ 
|  3 | test  | [email protected] | M   |    2 | 
+---------+-----------+---------------+-------------+---------------+ 
1 row in set (0.00 sec) 

mysql> select * 
    -> from media 
    -> ; 
+----------+-------------+---------------------+---------------------+ 
| media_id | media_image | media_create_date | media_update_date | 
+----------+-------------+---------------------+---------------------+ 
|  2 | NULL  | 2015-12-08 00:00:00 | 0000-00-00 00:00:00 | 
+----------+-------------+---------------------+---------------------+ 
1 row in set (0.00 sec) 
Смежные вопросы