我正在将数据从一个数据库转换为另一个数据库。目标db有一个名为provider的表,主键为provider_no varchar(6)。
我正在编写一个插件来从源表复制到目标表,并且需要一个递增的密钥用于provider_no。是否有函数甚至返回一个insert语句的迭代?
还有更多列,但我试图解决的基本问题是:
INSERT INTO `target`.`provider`
(`provider_no`,
`lastUpdateDate`)
SELECT
'', --incremented value
now()
from `source`.`provider`;
自动增量仅适用于int值,但我不能随意更改数据类型。
此外,源表没有可用于此副本的可用主键值。
答案 0 :(得分:3)
要将varchar
,首先cast
增加到一个数字(signed
或unsigned
),如下所示:
INSERT INTO `target`.`provider`
(`provider_no`,
`lastUpdateDate`)
SELECT
cast(the_varchar_field as signed) + 1, --incremented value
now()
from `source`.`provider`;
示例:
mysql> select cast("001" as unsigned) + 1;
+-----------------------------+
| cast("001" as unsigned) + 1 |
+-----------------------------+
| 2 |
+-----------------------------+
抱歉,我以为你想从源表中增加varchar字段。
要模仿'你想要做一个自动增量字段,我们可以用这样的变量来做:
insert into provider
select @cnt := @cnt +1, now()
from sourceprovider, (select @cnt := 0) q;
这是一个小小的演示:http://sqlfiddle.com/#!9/09fd4/1
答案 1 :(得分:0)
这是我刚刚实施的解决方案。在源表上有一个名为did的唯一列,我可以间接使用它。可能有一种更优雅的方式,但是:
create table temp_key (
key_id int auto_increment primary key,
did varchar(4));
insert into temp_key (did) select did from source.provider;
INSERT INTO target.provider
(provider_no,
lastUpdateDate)
SELECT
k.key_id,
now()
FROM source.provider d
JOIN temp_key k on d.did = k.did;
drop table temp_key;