[ale] Renumber keys in mysql

David Tomaschik david at systemoverlord.com
Thu Jul 21 11:41:56 EDT 2011


On Thu, Jul 21, 2011 at 11:23 AM, Chris Fowler
<cfowler at outpostsentinel.com> wrote:
> I'm trying to do something easier in MySQL than write a perl program to
> do it.
>
> I have a list of 1000 items and I need to take 100 of these items, make
> a slight change, and them copy them into the list ending up with 1100
> items.  The problem is that I'm using a primary key.
>
> 1.  Create temp table as a copy of other
>
> create table temp like original.
>
> 2.  Now copy the items I want to change into temp
>
> insert into temp select * from original where id > 50 and id < 150;
>
> Now I have those 100 items in the temp table;
>
> 3.  Update those
>
> update temp sent column='XXXX';
>
> 4.  Now I have to copy them back into original but what about the keys?
>
> I've tried to renumber the ids in the temp table to those that are not
> used in original
>
> mysql> alter table temp drop id, ADD id INT UNSIGNED NOT NULL
> AUTO_INCREMENT FIRST, auto_increment=1147;
>
> ERROR 1089 (HY000): Incorrect prefix key; the used key part isn't a
> string, the used length is longer than the key part, or the storage
> engine doesn't support unique prefix keys
>
> Here is a decription of temp:
>
> +--------+---------------------+------+-----+-------------------+-----------------------------+
> | Field  | Type                | Null | Key | Default           |
> +--------+---------------------+------+-----+-------------------+-----------------------------+
> | id     | int(11) unsigned    | NO   | PRI | NULL              |
> auto_increment              |
> | name   | varchar(64)         | NO   | UNI | NULL
>
>
> Can someone tell me what I'm doing wrong?
>
> Chris

Why not just select everything except id from temp back into original?

insert into original (name,...) select name,... from temp;

-- 
David Tomaschik, RHCE, LPIC-1
System Administrator/Open Source Advocate
OpenPGP: 0x5DEA789B
http://systemoverlord.com
david at systemoverlord.com



More information about the Ale mailing list