Reputation: 371
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?
Upvotes: 7
Views: 30072
Reputation: 9135
You have a misconception about what locks do. Locks to do not prevent other scripts from accessing data, instead locks affect the timing of when other scripts will access the data. When script 2 tries to access or modify data that it is not allowed to because of a lock, it will pause and wait for the lock to be released. After script 1 unlocks the table, script 2 will proceed and complete without any problems.
Upvotes: 1
Reputation: 33504
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";
Upvotes: 6
Reputation: 5253
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...
Upvotes: 9