使用触发器将数据从表复制到另一个表(VTiger)

时间:2014-01-28 01:54:56

标签: mysql triggers insert updates vtiger

我很抱歉这个新手问题,但我有两张桌子:

vtiger_assets

+-----------+---------+------+-----+---------+----------------+
| assetid   | account | Stat | Key | Default | assetname      |
+-----------+---------+------+-----+---------+----------------+
| 224       | int(11) | NO   | PRI | NULL    |                |
| 225       | int(11) | NO   |     | NULL    |                |
| 226       | date    | NO   |     | NULL    |                |
| 227       | date    | NO   |     | NULL    |                |
| 228       | int(11) | NO   |     | NULL    |                |
| 229       | int(11) | NO   | MUL | NULL    |                |
| 230       | int(11) | NO   | MUL | NULL    |                |
+-----------+---------+------+-----+---------+----------------+

和vtiger_assetscf

+--------------+---------+
| assetid      | cf_658  |
+--------------+---------+
| 224          | Value 1 |
| 225          | Value 2 |
| 226          | Value 3 |
| 227          | Value 2 |
| 228          | Value 3 |
| 229          | Value 1 |
| 230          | Value 3 |
+--------------+---------+

使用Trigger,INSERT和UPDATE尝试和错误一天后,我放弃并决定询问专家......

同时在两个表中添加一个新行(自动添加新的assetid)

我需要自动导入和更新(填充)vtiger_assetcf表中cf_658列的值到vtiger_assets表的assetname列。

我试过了:

create trigger 'ativos' after insert on vtiger_assetscf
for each row
begin
insert into vtiger_assets (assetid, assetname) values (new.assetid, new.cf_658);
end#

我尝试过INSERT和UPDATE的组合。没有运气......

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

您在名称周围使用了单引号。这应该会导致语法错误。试试这个:

delimiter #

create trigger ativos after insert on vtiger_assetscf
for each row
begin
insert into vtiger_assets(assetid, assetname)
    values (new.assetid, new.cf_658);
end; #

答案 1 :(得分:1)

我希望你已经解决了你的问题。如果没有,我可能会有一些问题需要澄清:

1.-你的意思是什么

  

同时在两个表中添加新行[...]

您是否对要插入两行的数据库使用了一次调用?因为我猜你在一个电话上做了两个查询。插入 vtiger_assets 然后插入 vtiger_assetscf

的插件

如果是这种情况,也许您在获得要复制数据的行之前触发ativos触发器。

2.-带

  

自动添加新的assetid

我认为您已为 assetid 列启用了auto_increment属性,但这让我很奇怪,如果只复制最近发送的数据,为什么还有单独的表?

也许你只能向 vtiger_assets 发送一个查询,并在该表中有一个触发器(不是 vtiger_assetscf ),它会在 vtiger_assetscf中创建一个新行(但现在我想也许你的桌子没有完全显示在这里......)

3.-最后:您的 assetid 是关键列吗? (如果你正在使用auto_increment,我打赌它是)。如果是这种情况,我认为您得到的错误是您尝试在具有重复值的表中插入一行(assetid)。

也许试试这个:

create trigger `ativos` after insert on `vtiger_assetscf`
for each row
begin
update `vtiger_assets` SET `assetname` = new.`cf_658` WHERE `assetid` = NEW.`assetid`;
end#

我知道已经有一段时间了,但仍然......