You can also handle this with transactions:

CREATE TABLE `seq` (
  `seq_num` int(10) unsigned NOT NULL DEFAULT '1000'
) ENGINE=InnoDB DEFAULT CHARSET=latin1


#Initialize sequence numbers
INSERT INTO seq(seq_num) VALUES(1000);

#Get next sequence number
START TRANSACTION;

UPDATE seq SET seq_num=LAST_INSERT_ID(seq_num+1);

#Do other inserts into other tables with this sequence number

COMMIT;

#ROLLBACK if something fails

Other inserts will be blocked until this process is either COMMIT'd or
ROLLBACK'd, preventing you from using the same sequence # again. As soon as
the COMMIT or ROLLBACK occurs, the other transactions will continue.

-JW

On Wed, Feb 22, 2012 at 7:57 AM, Arthur Fuller <fuller.art...@gmail.com>wrote:

> I agree with the testicular remedy, but in the case of the iron codpiece, I
> can think of another approach which may work for you. It still uses Select,
> but reads a one-row table, so it shouldn't hurt performance much. The table
> serves no other purpose than storing the next available PK; call the table
> NextPK, say. The algorithm might go like this:
>
> 1. Lock the table NextPK.
> 2. Select its value.
> 3. Update the column with current value + 1.
> 4. Unlock the table.
> 5. Do your inserts.
>
> The lock will be very brief, perhaps brief enough to satisfy your
> requirement.
>
> --
> Arthur
> Cell: 647.710.1314
>
> Only two businesses refer to their clientele as users: drug dealing and
> software development.
>
> -- Arthur Fuller
>



-- 
-----------------------------
Johnny Withers
601.209.4985
joh...@pixelated.net

Reply via email to