


A brief analysis of PHP's simple operation of mysql lock mechanism
Lock mechanism
Shared lock and exclusive lock
Shared lock (read lock): Other transactions can read, but cannot write.
Exclusive lock (write lock): other transactions cannot read or write.
For MySQL, there are three lock levels: page level, table level, row level
- The typical representative engine of the page level is BDB.
- The typical representative engine at the row level is INNODB.
- Typical representative engines at the table level are MyISAM, MEMORY and the long-ago ISAM.
- BDB storage engine uses page-level locking, but also supports table-level locks
- InnoDB storage engine supports both row-level locking (row-level locking) and table-level locking. Table-level locks, but row-level locks are used by default.
- MyISAM and MEMORY storage engines use table-level locks
Related free learning recommendations: php programming (video)
1. MyISAM table lock
MyISAM table-level lock mode:
- Table shared read lock (Table Read Lock): No Will block other users' read requests to the same table, but will block other users' write requests to the same table;
- Table exclusive write lock (Table Write Lock): will block other users' read and write operations on the same table;
MyISAM table lock method:
- Use the LOCK TABLE command to explicitly lock the MyISAM table
- LOCK TABLES real_table (READ|WRITE), insert_table (READ|WRITE); //Lock
- UNLOCK TABLES; //Unlock
Example:
For example, there is account(id,name ,cash), hero (number, name, country) these two tables
- lock tables account read; add account as a read-only lock
Current process query: select * from hero; will Report Table 'hero' was not locked with LOCK TABLES.
The current process changes other tables: update hero set name="ss" where number=1; will report Table 'hero' was not locked with LOCK TABLES
The current process changes the table: update account set name="ssss" where id=1; it will be reported that Table 'account' was locked with a READ lock and can't be updated
If another mysql process comes in, you can query other tables and accounts, but you cannot change the account, it will wait forever and needs to be released. The lock is executed
1.1PHP operation
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2021/4/29 0029 * Time: 11:20 */$link = new mysqli('127.0.0.1', 'root', '123', 'db_school'); // 连接数据库if(mysqli_connect_errno()){ // 检查连接错误 printf("连接失败:%s<br>", mysqli_connect_error()); exit();}//(s1)$table = "account";$type = "read";$sql1 = "LOCK TABLES $table $type";$link->query($sql1);//处理逻辑//$sql1 = "select * from $table;"; //(s1)true//$sql1 = "select * from hero;"; //false//$sql1 = "update hero set name='ss' where number=1; "; //false$sql1 = "update account set name='ssss' where id=1;"; //false$result = $link->query($sql1);var_dump($result);sleep(20); //测试 //假设还没释放锁,开启cmd进mysql(s2)可以查询,但不能执行更改和删除操作,会等待这边释放锁$link->query("unlock tables"); //取消全部的锁//解锁后正常操作//$result = $link -> query($sql1);//var_dump($result);$link->close();
Query table-level lock contention
show status like 'Table%';
- Table_locks_immediate refers to the number of times that table-level locks can be obtained immediately
- Table_locks_waited refers to the number of times that table-level locks cannot be obtained immediately and need to wait
2.InnoDB locking method:
For ordinary SELECT statements, InnoDB will not add any locks; Locking can only be used during transaction execution
The lock can only be used during transaction execution It will only be released when commit or rollback is executed, and all locks will be released at the same time.
- Shared lock(S): SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE. Other sessions can still query the record and add share mode shared locks to the record. However, if the current transaction needs to update the record, it is likely to cause a deadlock. Everyone can read it, but it cannot change it. It can only be changed when one of the exclusive shared locks is locked;
- Exclusive lock (X): SELECT * FROM table_name WHERE ... FOR UPDATE. Other sessions can query the record, but they cannot add shared locks or exclusive locks to the record, but wait to obtain the lock. I want to change it, but you can’t change it, and you can’t read it
#select … lock in share mode //Shared lock
#select … for update //Exclusive lock
##In MySQL 8.0- Shared lock (S): SELECT * FROM table_name WHERE … FOR SHARE
- Exclusive lock (X): SELECT * FROM table_name WHERE … FOR UPDATE[NOWAIT|SKIP LOCKED]
–NOWAIT: Discovery After waiting for a lock, an error will be returned immediately. There is no need to wait for the lock to time out and report an error.
–SKIP LOCKED: Skip the locked rows and update other rows directly, but be careful whether the update results will not meet expectations.
2.1PHP operation
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2021/4/29 0029 * Time: 10:06 */$link = new mysqli('127.0.0.1', 'root', '123', 'db_school'); // 连接数据库if(mysqli_connect_errno()){ // 检查连接错误 printf("连接失败:%s<br>", mysqli_connect_error()); exit();}//案例1$id = 1; //明确指定主键,并且有此数据,row lock (行锁)//$id = -1; //明确指定主键,若查无此数据,无lock (无锁)$link->autocommit(0); // 开始事务(s1)//FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。$sql = "select * from account where id=$id for update";$link->query($sql);/*** * 此时其他mysql进程可以查询该记录,但是不能对该记录加共享锁或排他锁,而是等待获得锁。 *///(s1)可以进行更改,和查询等操作//$sql1 = "update account set name='aaa' where id=$id;"; //进行更改//$sql1 = "select * from account where id=$id;"; //进行查询$sql1 = "delete from account where id=$id;"; //进行删除$result = $link -> query($sql1);var_dump($result);sleep(20); //测试 //假设还在事务处理中,开启cmd进mysql(s2)执行更改和删除操作,会等待这边释放锁$link->commit();$link->close();
View the tables being locked
show OPEN TABLES where In_use > 0;
SHOW PROCESSLIST display Which threads are running.
The above is the detailed content of A brief analysis of PHP's simple operation of mysql lock mechanism. For more information, please follow other related articles on the PHP Chinese website!

What’s still popular is the ease of use, flexibility and a strong ecosystem. 1) Ease of use and simple syntax make it the first choice for beginners. 2) Closely integrated with web development, excellent interaction with HTTP requests and database. 3) The huge ecosystem provides a wealth of tools and libraries. 4) Active community and open source nature adapts them to new needs and technology trends.

PHP and Python are both high-level programming languages that are widely used in web development, data processing and automation tasks. 1.PHP is often used to build dynamic websites and content management systems, while Python is often used to build web frameworks and data science. 2.PHP uses echo to output content, Python uses print. 3. Both support object-oriented programming, but the syntax and keywords are different. 4. PHP supports weak type conversion, while Python is more stringent. 5. PHP performance optimization includes using OPcache and asynchronous programming, while Python uses cProfile and asynchronous programming.

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

PHP remains important in the modernization process because it supports a large number of websites and applications and adapts to development needs through frameworks. 1.PHP7 improves performance and introduces new features. 2. Modern frameworks such as Laravel, Symfony and CodeIgniter simplify development and improve code quality. 3. Performance optimization and best practices further improve application efficiency.

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values and handle functions that may return null values.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Zend Studio 13.0.1
Powerful PHP integrated development environment

SublimeText3 English version
Recommended: Win version, supports code prompts!

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool