Hi,

I've continued trying to solve the problem that I emailed yesterday 
regarding AUTO_INCREMENT, and I just seem to be going backwards.

The sample database/software that I sent yesterday had a UNIQUE 
constraint and a couple of SELECT statements.  I thought that removing 
them bizarrely made it all work, but it turns out that it doesn't -- it 
just takes longer to fail!

I've now reduced the problem to the following simple database/program:

------------------------------
CREATE DATABASE test;

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

------------------------------
use strict;
use warnings;

use DBI;

my $dbh = DBI->connect(
        'dbi:mysql:test', 'root', '',
        {AutoCommit => 0, PrintError => 0, RaiseError => 1}
        );

for (my $deadlocks = 0, my $total = 0, my $i = 1; $i <= 50000; $i++) {
    $total++;

    eval {
        $dbh->do("INSERT INTO foo (num, str) VALUES (1, 'a')");
        $dbh->commit();
    };

    if ($@) {
        if ($DBI::err == 1213) {
            $deadlocks++;
            print "$total: $i: $$: Deadlock! ($deadlocks)\n";

            eval {
                $dbh->rollback();
            };

            if ($@) {
                print "Rollback Error! ($@)\n";
                last;
            }

            redo;
        }
        else {
            print "$total: $i: $$: Error! ($@)\n";
            last;
        }
    }
    else {
        $deadlocks = 0;
        print "$total: $i: $$: Success!\n";
    }
}

$dbh->disconnect();
------------------------------

If I run two of these program simultaneously then one of them always 
exits before the 50,000 iterations are up with the error:

    Duplicate entry '1' for key 1

Can anybody help explain why?

This looks like a bug to me.

- 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