You need simply add the column predefined as AUTO_INCREMENT and PRIMARY
KEY:

CREATE TABLE incrtest (
  name varchar(100) NOT NULL
) TYPE=MyISAM; 
INSERT INTO incrtest VALUES("ben");
INSERT INTO incrtest VALUES("bob");
INSERT INTO incrtest VALUES("bom");
INSERT INTO incrtest VALUES("gddo");
INSERT INTO incrtest VALUES("billy");
ALTER TABLE incrtest ADD prikey INT auto_increment PRIMARY KEY;

mysql> SELECT * FROM incrtest;
+-------+--------+
| name  | prikey |
+-------+--------+
| ben   |      1 |
| bob   |      2 |
| bom   |      3 |
| gddo  |      4 |
| billy |      5 |
+-------+--------+
5 rows in set (0.00 sec)

As you can see, the values are added automatically.

Regards,
Miek Hillyer
www.vbmysql.com


> -----Original Message-----
> From: John Hicks [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, June 25, 2003 12:11 AM
> To: [EMAIL PROTECTED]
> Subject: Initializing primary key values for existing table
> 
> 
> I needed to add a new, autoincrementing, primary key column 
> to a table and have been struggling to figure out how to 
> assign an initial, unique value to each row.
> 
> I finally accomplished my task, but feel sure there's an 
> easier way.
> 
> Here is my solution:
> 
> 1. Add the column:
> alter table mytable add mycolumn int auto_increment;
> 
> 2. Set up a user variable:
> @mycounter = 0;
> 
> 3. Assign the initial values by incrementing the counter:
> Update mytable set mycolumn = max((@mycounter := @mycounter 
> + 1), @mycounter);
> 
> 4. Finally, set the column to be the primary key:
> alter table mytable set primary key mycolumn;
> 
> This seems like a roundabout way of doing things. Can any 
> of you improve on it?
> 
> Thanks,
> 
> John
> 
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    
> http://lists.mysql.com/mysql?> [EMAIL PROTECTED]
> 
> 

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to