[EMAIL PROTECTED] (saf) wrote on 23/03/2006 16:10:04:

> On Thu, Mar 23, 2006 at 11:04:55AM -0500, [EMAIL PROTECTED] wrote:
> > [EMAIL PROTECTED] (saf) wrote on 03/23/2006 10:50:10 AM:
> >
> > The short answer is "no".  The Record #2 already existed. It's current 

> > status is "deleted". If you had other tables that linked their data to 

> > record #2 and you created a new #2 to replace the one you already 
deleted 
> > then you could possibly be making a "bad" match between the old data 
and 
> > the new data. 
> > 
> > For the sake of data consistency and for all of the other good reasons 
to 
> > have a relational database, once an auto_increment value has been 
issued 
> > it's considered used and no other record should ever have that number. 

> > Only if you completely reset your table (see the command "TRUNCATE 
TABLE") 
> > could it be possibly safe to begin re-issuing the smaller numbers. 
Again, 
> > it's only possible if all of the child records that used to point to 
the 
> > old data were also deleted.
> > 
> > Do not rely on the auto_increment value for record sequencing. If you 
need 
> > your records serialized in some sequential way, you will need to code 
the 
> > support for those sequential numbers in your application.
> 
> So I must do a big SELECT and then check my self every time (for each 
INSERT),
> which IDs are free?
> Hmm if the table has more than 100 000 entries, this will slow down my 
system.
> Specialitty because the check function would be written in PHP.

Lots of ways round this. Instead of deleting records, add a boolean 
"deleted" flag. All selects then need to add "and deleted = 0". But you 
can find a (random) deleted row with "select id from table where deleted = 
1 limit 1". If this returns a result, use update to re-populate that 
record, clearing the deleted flag. If it returns nothing, use insert to 
create a new record.

Alec


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

Reply via email to