DEFAULTclause in a data type specification indicates a default value for a column. With one exception, the default value must be a constant; it cannot be a function or an expression. This means, for example, that you cannot set the default for a date column to be the value of a function such as
CURRENT_DATE. The exception is that you can specify
CURRENT_TIMESTAMPas the default for a
TIMESTAMPcolumn. See Section 10.3.1.1, “
If a column definition includes no explicit
DEFAULTvalue, MySQL determines the default value as follows:
If the column can take
NULLas a value, the column is defined with an explicit
If the column cannot take
NULLas the value, MySQL defines the column with no explicit
DEFAULTclause. For data entry, if an
REPLACEstatement includes no value for the column, or an
UPDATEstatement sets the column to
NULL, MySQL handles the column according to the SQL mode in effect at the time:
If strict SQL mode is not enabled, MySQL sets the column to the implicit default value for the column data type.
If strict mode is enabled, an error occurs for transactional tables and the statement is rolled back. For nontransactional tables, an error occurs, but if this happens for the second or subsequent row of a multiple-row statement, the preceding rows will have been inserted.
Suppose that a table
tis defined as follows:
CREATE TABLE t (i INT NOT NULL);
In this case,
ihas no explicit default, so in strict mode each of the following statements produce an error and no row is inserted. When not using strict mode, only the third statement produces an error; the implicit default is inserted for the first two statements, but the third fails because
DEFAULT(i)cannot produce a value:
INSERT INTO t VALUES(); INSERT INTO t VALUES(DEFAULT); INSERT INTO t VALUES(DEFAULT(i));
For a given table, you can use the
SHOW CREATE TABLEstatement to see which columns have an explicit
Implicit defaults are defined as follows:
For numeric types, the default is
0, with the exception that for integer or floating-point types declared with the
AUTO_INCREMENTattribute, the default is the next value in the sequence.
For date and time types other than
TIMESTAMP, the default is the appropriate “zero” value for the type. For the first
TIMESTAMPcolumn in a table, the default value is the current date and time. See Section 10.3, “Date and Time Types”.
SERIAL DEFAULT VALUEin the definition of an integer column is an alias for
NOT NULL AUTO_INCREMENT UNIQUE.