Metadata locking has been supported since MariaDB 5.5. This
means that when a transaction (including XA transactions)
uses a table, it locks its metadata until the end of
transaction. Non-transactional tables are also locked, as
well as views and objects which are related to locked
tables/views (stored functions, triggers, etc). When a
connection tries to use a DDL statement (like an ALTER
TABLE) which modifies a table that is locked, that
connection is queued, and has to wait until it's unlocked.
Using savepoints and performing a partial rollback does not
release metadata locks.
 
which produce an error may not need to wait for the lock to
be freed.
 
Metadata lock's timeout is determined by the value of the
lock_wait_timeout server system variable (in seconds).
However, note that its default value is 31536000 (1 year).
If this timeout exceeds, the following error is returned:
 
ERROR 1205 (HY000): Lock wait timeout exceeded;
 try restarting transaction
 
If the metadata_lock_info plugin is installed, the
Information Schema metadata_lock_info table stores
information about existing metadata locks.
 
Example
 
Let's use the following MEMORY (non-transactional) table:
 
CREATE TABLE t (a INT) ENGINE = MEMORY;
 
Connection 1 starts a transaction, and INSERTs a row into t:
 
START TRANSACTION;
 
INSERT INTO t SET a=1;
 
t's metadata is now locked by connection 1. Connection 2
tries to alter t, but has to wait:
 
ALTER TABLE t ADD COLUMN b INT;
 
Connection 2's prompt is blocked now.
 
Now connection 1 ends the transaction:
 
COMMIT;
 
...and connection 2 finally gets the output of its command:
 
Query OK, 1 row affected (35.23 sec)
Records: 1 Duplicates: 0 Warnings: 0
 

 
 
 
 
 
 
 

URL: https://mariadb.com/kb/en/metadata-locking/