MySQL:为一个插入语句手动递增一个varchar
MySQL: Manually increment a varchar for one insert statement
我正在将数据从一个数据库转换到另一个数据库。目标数据库有一个名为 table 的提供者,主键为 provider_no varchar(6).
我正在编写一个插入以从源 table 复制到目标 table,并且需要 provider_no 的递增密钥。是否有一个函数 return 甚至是一个插入语句的迭代?
还有很多专栏,但我要解决的基本问题是:
INSERT INTO `target`.`provider`
(`provider_no`,
`lastUpdateDate`)
SELECT
'', --incremented value
now()
from `source`.`provider`;
自动递增仅适用于 int 值,但我不能随意更改数据类型。
此外,源 table 没有可用于此副本的可用主键值。
要增加 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 |
+-----------------------------+
抱歉,我以为你想增加来自源 table 的 varchar 字段。
要'emulate'一个你想做的自增字段,我们可以用这样的变量来做:
insert into provider
select @cnt := @cnt +1, now()
from sourceprovider, (select @cnt := 0) q;
下面是一个小演示:http://sqlfiddle.com/#!9/09fd4/1
这是我刚刚实施的解决方案。源 table 上有一个名为 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;
我正在将数据从一个数据库转换到另一个数据库。目标数据库有一个名为 table 的提供者,主键为 provider_no varchar(6).
我正在编写一个插入以从源 table 复制到目标 table,并且需要 provider_no 的递增密钥。是否有一个函数 return 甚至是一个插入语句的迭代?
还有很多专栏,但我要解决的基本问题是:
INSERT INTO `target`.`provider`
(`provider_no`,
`lastUpdateDate`)
SELECT
'', --incremented value
now()
from `source`.`provider`;
自动递增仅适用于 int 值,但我不能随意更改数据类型。
此外,源 table 没有可用于此副本的可用主键值。
要增加 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 |
+-----------------------------+
抱歉,我以为你想增加来自源 table 的 varchar 字段。
要'emulate'一个你想做的自增字段,我们可以用这样的变量来做:
insert into provider
select @cnt := @cnt +1, now()
from sourceprovider, (select @cnt := 0) q;
下面是一个小演示:http://sqlfiddle.com/#!9/09fd4/1
这是我刚刚实施的解决方案。源 table 上有一个名为 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;