Reference Guide: MySQL & MariaDB Online DDL
MySQL Tutorial This column introduces and guides MySQL & MariaDB Online DDL.
Overview
In early MySQL versions, DDL operations (such as creating indexes, etc.) usually required locking the data table. DML operations will be blocked during the process, affecting normal business. MySQL 5.6 and MariaDB 10.0 begin to support Online DDL, which can perform DDL operations without affecting the normal execution of DML. Directly executing DDL operations online is basically invisible to users (some operations have an impact on performance).
Different versions of databases have certain differences in their support for various DDL statements. This article will summarize the support of MySQL and MariaDB for Online DDL. When you need to perform DDL operations, you can refer to this article. Online DDL Support section.
This article will continue to be revised and updated. For the latest content, please refer to my Programmer Growth Plan project on GITHUB. Stars are welcome. For more exciting content, please follow me.
In the ALTER TABLE
statement, Online DDL is supported through the ALGORITHM
and LOCK
statements:
-
ALGORITHM
- Control how DDL operations are performed and which algorithm is used -
LOCK
- Control the level of table locks allowed when executing DDL
ALTER TABLE tab ADD COLUMN c varchar(50), ALGORITHM=INPLACE, LOCK=NONE;复制代码
ALGORITHM Supported algorithms
ALGORITHM | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DEFAULT | Default algorithm, automatically uses the most efficient algorithm available | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
COPY | The most original way, supported by all storage engines, does not use Online DDL, when operating, will create a temporary table, perform full table copy and reconstruction, and write Redo Log and a large amount of Undo Log during the process, which requires adding read locks and is very inefficient | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Avoid table copying and reconstruction as much as possible. A more accurate name should be | ENGINE algorithm. It is up to the storage engine to decide how to implement . Some operations can take effect immediately ( For example, rename columns, change column default values, etc.), but some operations still require copying and rebuilding the entire table or part of the table (such as adding and deleting columns, adding primary keys, changing columns to NULL, etc.)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This algorithm is a subset of the | INPLACE algorithm, used to avoid the reconstruction of the clustered index (primary key index) causing the reconstruction of the entire table , and also It is said that using this algorithm will prohibit any operation that causes clustered index reconstruction
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is used to avoid | INPLACE The algorithm is extremely inefficient when data files need to be modified. All operations involving table copying and reconstruction will be prohibited
|
Strategy | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Use current The smallest granular lock policy supported by the operation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Does not acquire any table locks and allows all DML operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Add a shared lock (read lock) to the table, allowing only read-only DML operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Add an exclusive lock to the table ( Write lock), no DML operations are allowed |
Operation | INSTANT | INPLACE | Rebuild table | Concurrent DML | Only modify metadata |
---|---|---|---|---|---|
Create or add secondary index | ❌ | ✅ | ❌ | ✅ | ❌ |
Delete index | ❌ | ✅ | ❌ | ##✅✅ | |
❌ | ✅ | ❌ | ✅ | ✅ | |
FULLTEXT Index
| ❌✅ ① | ❌ ① | ❌ | ❌ | |
SPATIAL index (⚠️MySQL 5.7, MariaDB 10.2.2)
| ❌✅ | ❌ | ❌ | ❌ | |
✅ | ✅ | ##❌ | ✅ | ✅ |
- Primary Key
INSTANT | INPLACE | Rebuild table | Concurrent DML | Modify metadata only | |
---|---|---|---|---|---|
❌ | ✅ ② | ✅ ② | ✅ | ❌ | ##Delete primary key |
❌ | ✅ | ❌ | ❌ | Delete a primary key and add a new one | |
✅ | ✅ | ✅ | ❌ | ##Instructions: |
- NOT NULL
- UNIQUE
- index as the primary key, or use the system-generated KEY
② For clustered indexes, use
INPLACE
mode is more efficient than COPY - mode:
undo log
andredo log
will not be generated, the secondary index is ordered, so it can be loaded in order , no need to use change bufferNormal column
INPLACE | Rebuild table | Concurrent DML | Modify metadata only | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
❌ ③ | ✅ ③ | ❌ | Column Delete | ❌ ④ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
✅ | ✅ | ❌ | ##Column Rename | ❌ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
❌ | ✅ ⑤ | ✅ | ##Change the order of columns | ❌ ⑫ | ✅ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
✅ | ❌ | Set default value | ✅ | ✅ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
✅ | ✅ | Modify data type | ❌ | ❌ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
❌ | ❌ | Extension | VARCHAR | Length (⚠️MySQL 5.7, MariaDB 10.2.2)❌ ⑬ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
❌ ⑥ | ✅✅ | Remove default value of column | ✅ | ✅ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
✅ | Change the self-increment value | ❌ | ✅ | ❌ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
❌ ⑦ | Set the column to NULL | ❌ | ✅ | ✅ ⑧ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
❌ | Set the column to NOT NULL | ❌ | ✅ ⑨ | ✅ ⑨ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
❌ | Modify the definitions of the | ENUM | andSET | columns✅ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
❌ ⑩ ✅
| ✅
INSTANT | INPLACE | Rebuild table | Concurrent DML | Modify metadata only | |
---|---|---|---|---|---|
STORED column
| ❌❌ | ✅ | ❌ | ❌ | |
STORED columns
| ❌❌ | ✅ | ❌ | ❌ | |
STORED Column | ❌✅ | ✅ | ✅ | ❌ | |
VIRTUAL COLUMN
| ✅✅ | ❌ | ✅ | ✅ | |
columns ✅ |
❌ | ✅ | ❌ | ❌ | |
COLUMN ✅ |
✅ | ❌ | ✅ | ✅ |
INPLACE | Rebuild table | Concurrent DML | Modify metadata only | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
✅ ⑭ | ❌ | ✅ | ✅ | ##Delete foreign key constraint | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
✅ | ❌ | ✅ | ✅ |
Note:
Table
mysql tutorial |
The above is the detailed content of Reference Guide: MySQL & MariaDB Online DDL. For more information, please follow other related articles on the PHP Chinese website!

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

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

MySQL is an open source relational database management system, mainly used to store and retrieve data quickly and reliably. Its working principle includes client requests, query resolution, execution of queries and return results. Examples of usage include creating tables, inserting and querying data, and advanced features such as JOIN operations. Common errors involve SQL syntax, data types, and permissions, and optimization suggestions include the use of indexes, optimized queries, and partitioning of tables.

MySQL's position in databases and programming is very important. It is an open source relational database management system that is widely used in various application scenarios. 1) MySQL provides efficient data storage, organization and retrieval functions, supporting Web, mobile and enterprise-level systems. 2) It uses a client-server architecture, supports multiple storage engines and index optimization. 3) Basic usages include creating tables and inserting data, and advanced usages involve multi-table JOINs and complex queries. 4) Frequently asked questions such as SQL syntax errors and performance issues can be debugged through the EXPLAIN command and slow query log. 5) Performance optimization methods include rational use of indexes, optimized query and use of caches. Best practices include using transactions and PreparedStatemen

MySQL is chosen for its performance, reliability, ease of use, and community support. 1.MySQL provides efficient data storage and retrieval functions, supporting multiple data types and advanced query operations. 2. Adopt client-server architecture and multiple storage engines to support transaction and query optimization. 3. Easy to use, supports a variety of operating systems and programming languages. 4. Have strong community support and provide rich resources and solutions.

Apache connects to a database requires the following steps: Install the database driver. Configure the web.xml file to create a connection pool. Create a JDBC data source and specify the connection settings. Use the JDBC API to access the database from Java code, including getting connections, creating statements, binding parameters, executing queries or updates, and processing results.

The process of starting MySQL in Docker consists of the following steps: Pull the MySQL image to create and start the container, set the root user password, and map the port verification connection Create the database and the user grants all permissions to the database

The main role of MySQL in web applications is to store and manage data. 1.MySQL efficiently processes user information, product catalogs, transaction records and other data. 2. Through SQL query, developers can extract information from the database to generate dynamic content. 3.MySQL works based on the client-server model to ensure acceptable query speed.

Laravel is a PHP framework for easy building of web applications. It provides a range of powerful features including: Installation: Install the Laravel CLI globally with Composer and create applications in the project directory. Routing: Define the relationship between the URL and the handler in routes/web.php. View: Create a view in resources/views to render the application's interface. Database Integration: Provides out-of-the-box integration with databases such as MySQL and uses migration to create and modify tables. Model and Controller: The model represents the database entity and the controller processes HTTP requests.

The key to installing MySQL elegantly is to add the official MySQL repository. The specific steps are as follows: Download the MySQL official GPG key to prevent phishing attacks. Add MySQL repository file: rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm Update yum repository cache: yum update installation MySQL: yum install mysql-server startup MySQL service: systemctl start mysqld set up booting
