Kim,

I use WRITE locks extensively with MySQL 4 with a large distributed
application.

Your example logs indicate that your test application obtained a READ lock,
which will not block other select  requests from accessing the table. Only a
WRITE lock will cause subsequent select requests to be held until the lock
is released.

If your application's break point actually closes the database connection,
then the WRITE lock is released, and subsequent selects will be processed.

In my application, I have several dozen systems all working on data that it
reads in chunks from the MySQL backend. In my application, I do the
following:

LOCK TABLES the_big_backend_table WRITE

(select my data then flag the selected rows as "pending")

UNLOCK TABLES

Over the last year or so, this has worked perfectly. It keeps all the other
systems from selecting duplicate data, just as you are trying to do, I
assume. If you are doing a JOIN with a table you are trying to lock, you
must also specific read locks for each table in your JOIN, if I recall
correctly, or else the lock will not hold. I have to do this in another
location:

LOCK TABLES bigtable AS a WRITE, smalltable AS b READ

Again, all of this locking and releasing should have some degree of
concurrence. You cannot take a lock, close the database connection, and
expect the lock to hold. Your application requesting the lock must keep the
"session" active. Open two command line instances of MySQL to the same
database. In one, instruct the database to lock your first table for WRITE
access. Then, go to your second instance, and try to select, without
shutting down the first or closing it. You will find that you cannot select
data from the table as the first MySQL client has locked it for writing.
Release the lock with UNLOCK TABLES on the first client, then you will see
your second client has noticed the lock release, and has read the data.

-- R


>
> Hello
>
>
> I try in my program to make a lock.
>
> I try to prevent another session to read and write from the whole table
> I tried both
>   LOCK TABLES pstockx WRITE
> and
>   LOCK TABLES pstockx READ
>
> but no success.
>
> I put in a breakpoint in my program to be sure the lock are held
> and then I try to make a select from another session.
>
> It dont lock me up :(
>
> What am I doing wrong ,,is it some settings on server ??
>
>
>                    8128 Query       LOCK TABLES pstockx READ
> 031211  0:22:05    8133 Connect     [EMAIL PROTECTED]  on elprint
>                    8133 Query       SET SQL_BIG_SELECTS=1
>                    8133 Query       select amount from pstockx where
> productID =
>  82846
>                    8133 Query       EXPLAIN select amount from pstockx
> where pro
> ductID = 10000
> 031211  0:23:06    8128 Query       SHOW COLUMNS FROM pstockx
>                    8128 Query       SHOW INDEX FROM pstockx
>                    8128 Query       select amount from pstockx where
> productID=8
> 2846
>
>
>
>
>
>
> TIA
>
> Kim G. Pedersen
> macaos/elprint Development
> +45 35373808
>
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
>
>


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

Reply via email to