ULT as the value),
the actual value will be taken from the counter, with each insertion
incrementing the counter by one. You can still insert a value explicitly. If
you insert a value that is greater than the current counter value, the counter
is set based on the new value. An AUTO_INCREMENT column is implicitly NOT
NULL. Use LAST_INSERT_ID to get the AUTO_INCREMENT value most recently used by
an INSERT statement.

ZEROFILL Column Option
----------------------

If the ZEROFILL column option is specified for a column using a numeric data
type, then the column will be set to UNSIGNED and the spaces used by default
to pad the field are replaced with zeros. ZEROFILL is ignored in expressions
or as part of a UNION. ZEROFILL is a non-standard MySQL and MariaDB
enhancement.

PRIMARY KEY Column Option
-------------------------

Use PRIMARY KEY to make a column a primary key. A primary key is a special
type of a unique key. There can be at most one primary key per table, and it
is implicitly NOT NULL.

Specifying a column as a unique key creates a unique index on that column. See
the Index Definitions section below for more information.

UNIQUE KEY Column Option
------------------------

Use UNIQUE KEY (or just UNIQUE) to specify that all values in the column must
be distinct from each other. Unless the column is NOT NULL, there may be
multiple rows with NULL in the column.

Specifying a column as a unique key creates a unique index on that column.

See the Index Definitions section below for more information.

COMMENT Column Option
---------------------

You can provide a comment for each column using the COMMENT clause. The
maximum length is 1024 characters. Use the SHOW FULL COLUMNS statement to see
column comments.

REF_SYSTEM_ID
-------------

REF_SYSTEM_ID can be used to specify Spatial Reference System IDs for spatial
data type columns. For example:

CREATE TABLE t1(g GEOMETRY(9,4) REF_SYSTEM_ID=101);

Generated Columns
-----------------

A generated column is a column in a table that cannot explicitly be set to a
specific value in a DML query. Instead, its value is automatically generated
based on an expression. This expression might generate the value based on the
values of other columns in the table, or it might generate the value by
calling built-in functions or user-defined functions (UDFs).

There are two types of generated columns:

* PERSISTENT or STORED: This type's value is actually stored in the table.
* VIRTUAL: This type's value is not stored at all. Instead, the value is
generated dynamically when the table is queried. This type is the default.

Generated columns are also sometimes called computed columns or virtual
columns.

For a complete description about generated columns and their limitations, see
Generated (Virtual and Persistent/Stored) Columns.

COMPRESSED
----------

Certain columns may be compressed. See Storage-Engine Independent Column
Compression.

INVISIBLE
---------

Columns may be made invisible, and hidden in certain contexts. See Invisible
Columns.

WITH SYSTEM VERSIONING Column Option
------------------------------------

Columns may be explicitly marked as included from system versioning. See
System-versioned tables for details.

WITHOUT SYSTEM VERSIONING Column Option
---------------------------------------

Columns may be explicitly marked as excluded from system versioning. See
System-versioned tables for details.

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

index_definition:
  {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option]
...
 {{{|}}} {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
[index_option] ...
 {{{|}}} [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
[index_option] ...
 {{{|}}} [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type]
(index_col_name,...) [index_option] ...
 {{{|}}} [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)
reference_definition

index_col_name:
  col_name [(length)] [ASC | DESC]

index_type:
  USING {BTREE | HASH | RTREE}

index_option:
  [ KEY_BLOCK_SIZE [=] value
 {i