Gleb Paharenko:
> Could you provide a repeatable test case for you problem?

I don't know how repeatable this is. As I said I have one computer where it 
seems to work sometimes, as if there's a race condition. Right now it seems 
repeatable on the computer I'm using at the moment:


mysql> select version();
+-----------+
| version() |
+-----------+
| 4.1.14    |
+-----------+
1 row in set (0.00 sec)

mysql> create table parent (
    ->   ID int unsigned not null auto_increment,
    ->   value varchar(50),
    ->   primary key (ID)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> create table child (
    ->   ID int unsigned not null auto_increment,
    ->   parent_ID int unsigned not null,
    ->   value varchar(50),
    ->   primary key (ID)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into parent (value) values ('a');
Query OK, 1 row affected (0.00 sec)

mysql> insert into child (parent_ID, value) values
    -> (last_insert_ID(), 'b1'), (last_insert_ID(), 'b2'),
    -> (last_insert_ID(), 'b3');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into parent (value) values ('c');
Query OK, 1 row affected (0.00 sec)

mysql> insert into child (parent_ID, value) values
    -> (last_insert_ID(), 'd1'), (last_insert_ID(), 'd2'),
    -> (last_insert_ID(), 'd3');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from child;
+----+-----------+-------+
| ID | parent_ID | value |
+----+-----------+-------+
|  1 |         1 | b1    |
|  2 |         1 | b2    |
|  3 |         2 | b3    |
|  4 |         2 | d1    |
|  5 |         4 | d2    |
|  6 |         5 | d3    |
+----+-----------+-------+
6 rows in set (0.00 sec)


Note how child rows 1 and 4 have the IDs of their respective parent row in the 
parent_ID field, but child rows 3, 5 and 6 have the ID of the preceding child 
row instead. (For row 2 we can't tell the difference.)

Here's the SQL code for easy copying:


use test;

create table parent (
  ID int unsigned not null auto_increment,
  value varchar(50),
  primary key (ID)
);

create table child (
  ID int unsigned not null auto_increment,
  parent_ID int unsigned not null,
  value varchar(50),
  primary key (ID)
);

insert into parent (value) values ('a');

insert into child (parent_ID, value) values 
(last_insert_ID(), 'b1'), (last_insert_ID(), 'b2'),
(last_insert_ID(), 'b3');

insert into parent (value) values ('c');

insert into child (parent_ID, value) values 
(last_insert_ID(), 'd1'), (last_insert_ID(), 'd2'),
(last_insert_ID(), 'd3');

select * from child;


Björn Persson

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

Reply via email to