MySQL:手动增加一个插入语句的varchar

时间:2015-04-16 04:55:42

标签: mysql auto-increment

我正在将数据从一个数据库转换为另一个数据库。目标db有一个名为provider的表,主键为provider_no varchar(6)。

我正在编写一个插件来从源表复制到目标表,并且需要一个递增的密钥用于provider_no。是否有函数甚至返回一个insert语句的迭代?

还有更多列,但我试图解决的基本问题是:

INSERT INTO `target`.`provider`
  (`provider_no`,
  `lastUpdateDate`)
SELECT 
  '', --incremented value
  now()
from `source`.`provider`;

自动增量仅适用于int值,但我不能随意更改数据类型。

此外,源表没有可用于此副本的可用主键值。

2 个答案:

答案 0 :(得分:3)

要将varchar,首先cast增加到一个数字(signedunsigned),如下所示:

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;