2016-10-02 54 views
0

后我有两个不相关的表tbl_A & tbl_B触发更新与来自另一个表中的数据相同的表插入

tbl_A

+----+---------------------+------+ 
| id | url     | slug | 
+----+---------------------+------+ 
| 1 | http://example.com/ | 3qqd |   
| 2 | http://example.com/ | t8af |   
| 3 | http://example.com/ | sjim |   
| 4 | http://example.com/ | awfo |   
| 5 | http://example.com/ | 6myy |   
+----+---------------------+------+ 

tbl_A描述:

+---------------------+---------------------+------+-----+---------------------+----------------+ 
| Field    | Type    | Null | Key | Default    | Extra   | 
+---------------------+---------------------+------+-----+---------------------+----------------+ 
| id     | bigint(20) unsigned | NO | PRI | NULL    | auto_increment | 
| url     | text    | YES |  | NULL    |    | 
| slug    | varchar(255)  | YES | MUL | NULL    |    | 
+---------------------+---------------------+------+-----+---------------------+----------------+ 

和另一个表:

tbl_B

+----+---------------------+---------------------+------+   
| ID | user_name   | url     | slug | 
+----+---------------------+---------------------+------+ 
| 1 | john.reese   | NULL    | NULL |  
+----+---------------------+---------------------+------+ 

tbl_B描述:

+---------------------+---------------------+------+-----+---------------------+----------------+ 
| Field    | Type    | Null | Key | Default    | Extra   | 
+---------------------+---------------------+------+-----+---------------------+----------------+ 
| ID     | bigint(20) unsigned | NO | PRI | NULL    | auto_increment | 
| user_name   | varchar(60)   | NO | MUL |      |    | 
| url     | text    | YES |  | NULL    |    | 
| slug    | varchar(255)  | YES | MUL | NULL    |    | 
+---------------------+---------------------+------+-----+---------------------+----------------+ 

tbl_A.id无关tbl_B.ID。

tbl_B.ID是userID字段,并且在新用户注册时被动态填充。为了让tbl_B.ID获得一行作为用户注册自动插入,tbl_B.ID值会自动递增。

tbl_A另一方面已经存在的所有细节。

我想达到什么:每当一个新的用户注册和用户ID是 INSERT到tbl_B.ID,同时它应该触发 tbl_B.user和tbl_B.slug与取自值的更新tbl_A.user和 tbl_A.slug。

结果:ID后加1

+----+---------------------+---------------------+------+   
| ID | user_name   | url     | slug | 
+----+---------------------+---------------------+------+ 
| 1 | john.reese   | http://example.com/ | 3qqd |  
+----+---------------------+---------------------+------+ 

希望我能够解释。我试图使用触发器,但迷路了,是一个mysql的新手,请耐心等待。

drop trigger if exists bi_tbl_B $$ 
delimiter $$ 

create trigger bi_tbl_B before insert on tbl_B 
for each row begin 
    UPDATE tbl_B 
    SET url = url + 
     (SELECT url 
      FROM tbl_A 
      WHERE id = NEW.id) 
    WHERE ID = NEW.ID; 

end; 
$$ 

delimiter ; 

我不知道这是否甚至可能,或者我应该尝试其他方式。

上tbl_B更新tabl_A.user_id栏添加一个字段user_id在tbl_A和AFTER INSERT与tbl_B.ID

的用户ID,我愿意听取建议,如果不是则触发程序。

回答

1

这是可能的,只是不是你想要的方式。在插入触发器之前,您可以通过更改NEW.field_name变量来更改插入的值。

drop trigger if exists bi_tbl_B $$ 
delimiter $$ 

create trigger bi_tbl_B before insert on tbl_B 
for each row begin 
    DECLARE v_slug as varchar(255); 
    DECLARE v_url as text; 
    SELECT url, slug INTO v_url, v_slug FROM tbl_A WHERE id = NEW.id; 
    NEW.url=v_url; 
    NEW.slug=v_slug; 
end; 
$$ 

delimiter ; 
+0

Thnx很多,我现在就去试试。只是为了确保每次插入一个新的ID tbl_B,这会更新用户,并用tbl_B的新值为该ID添加一个新值,请原谅我的无知,尽量学习 – mesumosu

相关问题