【发布时间】:2016-10-02 22:41:20
【问题描述】:
我有两个不相关的表 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 是用户 ID 字段,并在新用户注册时自动填充。这样 tbl_B.ID 会自动插入一行作为用户寄存器,tbl_B.ID 值会自动递增。
另一方面,tbl_A 已经存在,包含所有细节。
我想要实现的目标:每当一个新用户注册并且用户 ID 是 INSERT into 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_A 中添加一个字段 user_id,在 tbl_B 上添加一个 AFTER INSERT 使用来自 tbl_B.ID 的用户 ID 更新 tabl_A.user_id 列
我愿意接受建议,如果不触发则程序。
【问题讨论】: