我很抱歉这个新手问题,但我有两张桌子:
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的组合。没有运气......
有人能帮助我吗?
答案 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#
我知道已经有一段时间了,但仍然......