$query_ = "lock tables test1 as test11 write"; mysql_query($query); $query_ = "select * from test11"; sleep(20); $query_ = "unlock tables"; mysql_query($query_);
$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?
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:
- The session that holds the lock can read the table (but not write it).
- Multiple sessions can acquire a READ lock for the table at the same time.
- Other sessions can read the table without explicitly acquiring a READ lock.
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 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 have to grant the rights of lock tables to the db user.
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.