Hi,

Continuing my troubles with AUTO_INCREMENT (which nobody has yet 
responded to), I've now ruled the Perl DBI out of the equation and 
reproduced the same problem using the "mysql.exe" command-line tool.

Hopefully somebody will be tempted to help this time now that there is 
no Perl involved to put people off?

The bug can be reproduced as follows:

Create the following simple database containing just one BDB table:

    CREATE DATABASE test;

    CREATE TABLE foo (
       id INT NOT NULL AUTO_INCREMENT,
       num INT,
       str VARCHAR(10),
       PRIMARY KEY (id)
    ) TYPE=BDB;

Now start two "mysql.exe" sessions running with the "-f" flag to ignore 
errors.

Set each one into "no auto-commit" mode with:

    SET AUTOCOMMIT=0;

and then feed each of them the following two lines 50,000 times each:

    INSERT INTO foo (num, str) VALUES (1, 'a');
    COMMIT;

On my NT4 machine I do this with the simple Perl program (I know I said 
Perl wasn't involved, but the Perl DBI still isn't):

    sql.pl
    ----------
    print "SET AUTOCOMMIT=0;\n";
    for (1 .. 50000) {
        print "INSERT INTO foo (num, str) VALUES (1, 'a');\n";
        print "COMMIT;\n";
    }

I pipe the output from this to the "mysql.exe" programs, and then 
re-direct STDERR from that to log files, e.g.:

    Command Prompt One:
    \perl5\bin\perl.exe sql.pl | \mysql\bin\mysql.exe -f -u root test 2> 
session1.txt

    Command Prompt Two:
    \perl5\bin\perl.exe sql.pl | \mysql\bin\mysql.exe -f -u root test 2> 
session2.txt

When I inspect the output collected in these log files I find, not 
unexpectedly, that there are many "deadlock" errors (which I'm quite 
comfortable with, and can handle in my real software by simply retrying 
the transaction), but that there are also a few of the following error:

    Duplicate entry '1' for key 1

Surely this is a bug isn't it?

The transaction that is being performed 50,000 times each by the two 
"mysql.exe" sessions doesn't specify any value for the AUTO_INCREMENT 
column "id" - it just leaves it up to the database to choose the "next" 
value.

This error suggests that the database has wrongly chosen the value '1', 
and then (rightly) complains that it is already used!

I would really appreciate a response on this one as I'm now at the end 
of my tether trying to work out what is wrong.

Thanks in advance,

Steve



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to