By replacing deleted records with new information, you run the risk of
misidentifying data in related tables. What if you had a record in a table
called "person" with an ID of 6 that belonged to Mary Jones. You delete it
and create a new record 6 for Bob Mondo? Let's say you have a related
table that contains phone numbers AND that you somehow neglected to erase
the records from phnumbers where the person_id was 6 when you deleted
Mary's record from the person table. Now that you have created Bob's
record, those phone numbers seem to belong to him. Based on your data how
could you tell they weren't Bob's phone numbers? Can you see where this
can become a complicted situation if your database were more complex?
Gaps in your sequence numbers are a normal consequence of having an active
database. You can expect a sequentially assigned number to relate to only
1 record per table. When that record goes away, it's sequence number goes
away too.
IF you MUST recycle your sequence numbers for some reason, add a field to
your table so that you can flag a record as "deleted". Then when it comes
time to insert new records you will have to UPDATE the flagged records
with the new information and reset the flag to "active". For any data
beyond that which will fit into the available "deleted" records, you will
have to revert to a standard INSERT statement. IMHO, that is way too much
effort to spend on keeping your sequentially assigned numbers in
sequential order and without gaps. Your database performance will be
severely degraded by all of the extra management you have to perform each
time to need to add a record to your database.
Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine
"Mike" <[EMAIL PROTECTED]> wrote on 09/19/2004 04:59:02 PM:
> hi.
> I have a rather childish question on tables and auto increment fields.
> Scenario: I have a table with an <int auto increment primary key> field.
The
> deal is that everything works fine (I'm talking about the auto
> incrementation part)
> until I choose to delete a row. This creates a gap in the primary key
field.
> And my question is: I'd like to know if there is an easier way to keep
track
> of these gaps, instead of specifically iterating through the table and
> stopping where you find one. To accomplish this, I use this function:
>
> function GetUntakenNrCrt($tabel) {
> $nrCrt = 1;
> while(1>0) {
> if(!GetSingle("select nrcrt from $tabel where nrcrt='$nrCrt'")) return
> $nrCrt;
> $nrCrt++;
> }
> }
>
> function GetSingle($query) {
> $q = mysql_query($query);
> if(mysql_num_rows($q) > 0)
> while($p = mysql_fetch_row($q)) return $p[0];
> else return false;
> }
>
> The reason is that I want a table with continous records in the primary
key
> field (1, 2, 3... instead of 1,6,23...).
> Can anyone suggest a different (and easier) method? Thanx a lot!
>
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
>