Patrick,

>c.setAutoCommit(false);
...
>rs = statement.executeQuery("select request_id from requestid_innodb for update");
>...
>String updateQuery = "update requestid_innodb set request_id=";
> updateQuery = updateQuery + nextRequestId;
>tempStatement = c.createStatement();
>tempStatement.executeUpdate(updateQuery); ..
>c.commit();
>c.setAutoCommit(true);

As you can demonstrate by running your For Update query on the same InnoDB table row in two instances of the mysql client, a second connection trying to execute your For Update query on a row already locked by that query in another connection first hangs, and then times out. Given your, that query looks like the correct behaviour. When you try the same thing from two instances of your Connector/J code, is the query returning instantly in the second Connector/J client? If so, you would seem to have exposed a Connector/J problem. If not, perhaps it's because you need some deadlock handling code?

PB

-----

Patrick Duda wrote:
I guess I don't understand this locking stuff. I have a InnoDB table that has one thing in it, a counter. All I want to do is have multiple instances of the code read this counter and increment it. I want to make sure that each one is unique.

Here is what I am doing in java:

c.setAutoCommit(false);
...
rs = statement.executeQuery("select request_id from requestid_innodb for update");
...
String updateQuery = "update requestid_innodb set request_id=";
 updateQuery = updateQuery + nextRequestId;
tempStatement = c.createStatement();
tempStatement.executeUpdate(updateQuery);
...
c.commit();
c.setAutoCommit(true);

If I have multiple instances of this code running I end up with duplicate keys. I thought this was suppose to lock the table so that would not happen.

What am I not doing right?  What am I not understanding about locking?

Thanks

Patrick




--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.375 / Virus Database: 267.15.6/257 - Release Date: 2/10/2006


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

Reply via email to