
Set the lock wait timeout. See WAIT and NOWAIT.

IF EXISTS
---------

The IF EXISTS and IF NOT EXISTS clauses are available for the following:

ADD COLUMN       [IF NOT EXISTS]
ADD INDEX        [IF NOT EXISTS]
ADD FOREIGN KEY  [IF NOT EXISTS]
ADD PARTITION    [IF NOT EXISTS]
CREATE INDEX     [IF NOT EXISTS]
DROP COLUMN      [IF EXISTS]
DROP INDEX       [IF EXISTS]
DROP FOREIGN KEY [IF EXISTS]
DROP PARTITION   [IF EXISTS]
CHANGE COLUMN    [IF EXISTS]
MODIFY COLUMN    [IF EXISTS]
DROP INDEX       [IF EXISTS]
When IF EXISTS and IF NOT EXISTS are used in clauses, queries will not report
errors when the condition is triggered for that clause. A warning with the
same message text will be issued and the ALTER will move on to the next clause
in the statement (or end if finished).

MariaDB starting with 10.5.2
----------------------------
If this is directive is used after ALTER ... TABLE, one will not get an error
if the table doesn't exist.

Column Definitions
------------------

See CREATE TABLE: Column Definitions for information about column definitions.

Index Definitions
-----------------

See CREATE TABLE: Index Definitions for information about index definitions.

The CREATE INDEX and DROP INDEX statements can also be used to add or remove
an index.

Character Sets and Collations
-----------------------------

CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name
See Setting Character Sets and Collations for details on setting the character
sets and collations.

Alter Specifications
--------------------

Table Options
-------------

See CREATE TABLE: Table Options for information about table options.

ADD COLUMN
----------

... ADD COLUMN [IF NOT EXISTS]  (col_name column_definition,...)
Adds a column to the table. The syntax is the same as in CREATE TABLE. If you
are using IF NOT_EXISTS the column will not be added if it was not there
already. This is very useful when doing scripts to modify tables.

The FIRST and AFTER clauses affect the physical order of columns in the
datafile. Use FIRST to add a column in the first (leftmost) position, or AFTER
followed by a column name to add the new column in any other position. Note
that, nowadays, the physical position of a column is usually irrelevant.

See also Instant ADD COLUMN for InnoDB.

DROP COLUMN
-----------

... DROP COLUMN [IF EXISTS] col_name [CASCADE|RESTRICT]
Drops the column from the table. If you are using IF EXISTS you will not get
an error if the column didn't exist. If the column is part of any index, the
column will be dropped from them, except if you add a new column with
identical name at the same time. The index will be dropped if all columns from
the index were dropped. If the column was used in a view or trigger, you will
get an error next time the view or trigger is accessed.

MariaDB starting with 10.2.8
----------------------------
Dropping a column that is part of a multi-column UNIQUE constraint is not
permitted. For example:

CREATE TABLE a (
 a int,
 b int,
 primary key (a,b)
);

ALTER TABLE x DROP COLUMN a;
[42000][1072] Key column 'A' doesn't exist in table

The reason is that dropping column a would result in the new constraint that
all values in column b be unique. In order to drop the column, an explicit
DROP PRIMARY KEY and ADD PRIMARY KEY would be required. Up until MariaDB
10.2.7, the column was dropped and the additional constraint applied,
resulting in the following structure:

ALTER TABLE x DROP COLUMN a;
Query OK, 0 rows affected (0.46 sec)

DESC x;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| b     | int(11) | NO   | PRI | NULL    |       |
+-------+---------+------+-----+---------+-------+

MariaDB starting with 10.4.0
----------------------------
MariaDB 10.4.0 supports instant DROP COLUMN. DROP COLUMN of an indexed column
would imply DROP INDEX (and in the case of a non-UNIQUE multi-column index,
possibly ADD INDEX). These will not be allowed with ALGORITHM=INSTANT, but
unlike before, they can be allowed with ALGORITHM=NOCOPY

RESTRICT and CASCADE are allowed to make porting from other database systems
easier. In MariaDB, they do nothing.

MODIFY COLUMN
-------------

Allows you to modify the type of a column. The column will be at the same
place as the original column and all indexes on the column will be kept. Note
that when modifying column, you should specify all attributes for the new
column.

CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY((a));
ALTER TABLE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;

CHANGE COLUMN
-------------

Works like MODIFY COLUMN except that you can also change the name of the
column. The column will be at the same place as the original column and all
index on the column will be kept.

CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(a));
ALTER TABLE t1 CHANGE a b BIGINT UNSIGNED AUTO_INCREMENT;

ALTER COLUMN
------------

This lets you change column options.

CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, b varchar(50), PRIMARY KEY(a));
ALTER TABLE t1 ALTER b SET DEFAULT 'hello';

RENAME INDEX/KEY
----------------

MariaDB starting with 10.5.2
----------------------------
From MariaDB 10.5.2, it is possible to rename an index using the RENAME INDEX
(or RENAME KEY) syntax, for example:
