Script 1.
$query_ = "lock tables test1 as test11 write";
mysql_query($query);
$query_ = "select * from test11";
sleep(20);
$query_ = "unlock tables";
mysql_query($query_);
Script 2.
$query_ = "select * from test1";
$result = mysql_query($query_);
The problem is that if i run second script while running first script. Table is not locked. And i can read any data from it.
I need it to be locked and return error.
How to make this work?
To lock a table using the MySQL LOCK TABLES Statement you need have the TABLE LOCK and SELECT privileges. READ LOCK − If you apply this lock on a table the write operations on it are restricted. i.e., only the sessions that holds the lock can write into this table.
MySQL uses table locking (instead of row locking or column locking) on all table types, except InnoDB and BDB tables, to achieve a very high lock speed.
In MySQL, locked tables are identified using the SHOW OPEN TABLES command. In its simplest form is displays all locked tables. All open tables in the table cache are listed, but the IN_USE column indicates of the table is locked. When the first lock is taken, the value increments to 1.
A locked table remains locked until you either commit your transaction or roll it back, either entirely or to a savepoint before you locked the table. A lock never prevents other users from querying the table. A query never places a lock on a table.
If you do not want others to access that table then use
LOCK TABLES test1 WRITE;
Other script will not return error but will wait until lock is released.
Hope it helps...
You are read
locking the table with $query_ = "lock tables test1 as test11 read";
- which means that other queries can still read it without any problems what-so-ever (Relevant link - scroll down to the section on lock types):
Info on the read
lock type:
If you want to stop anything else so much as reding the table, you need to use a write
lock as follows:
$query_ = "lock tables test1 as test11 write";
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With