[译] MySQL 数据类型的默认值

2017-03-09  本文已影响1062人  翼徳

原文地址:https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html

在数据类型规范中 DEFAULT value 表示该列的默认值。默认值必须是常数,不能是一个函数或表达式。 例如,不能将 date 列的默认值设置为函数的值,如 NOW()CURRENT_DATE唯一例外的是,可以将 CURRENT_TIMESTAMP 指定为 TIMESTAMPDATETIME 类型的默认值。 参考 第 12.3.5 节 “Automatic Initialization and Updating for TIMESTAMP and DATETIME”

BLOBTEXT,GEOMETRY 和 JSON 列不能设置默认值。

如果在定义列时没有显式指定默认值(DEFAULT value),MySQL 将按以下方式设置默认值:

当没有显示指定默认值的列有数据插入或变更时,如果 INSERTREPLACE 语句不包含该列的值,或者 UPDATE 语句将该列设置为 NULL,则 MySQL 将根据当时的 SQL 模式做处理:

假设一个表 t 的定义如下:

CREATE TABLE t (i INT NOT NULL);

上述定义中,i 列没有显式的指定默认值,因此在 strict 模式下,下面三句SQL都会报错,不会插入数据。在非 strict 模式时,只有第三句报错,前两句会插入隐式默认值(因为 DEFAULT(i) 会报错,不会返回默认值):

INSERT INTO t VALUES();
INSERT INTO t VALUES(DEFAULT);
INSERT INTO t VALUES(DEFAULT(i));

参考 Section 6.1.8, “Server SQL Modes”.

可以使用 SHOW CREATE TABLE tablename 语句查看哪些列有 DEFAULT 语句。

隐式默认值定义如下:

在 integer 列加 SERIAL DEFAULT VALUE 定义,等价于 NOT NULL AUTO_INCREMENT UNIQUE 。

上一篇下一篇

猜你喜欢

热点阅读