mysql默认值为0写什么数据类型_[译] MySQL 数据类型的默认值

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

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

如果一个列可以将 NULL 作为一个值,该列就显式定义为: DEFAULT NULL 。

如果一个列不能将 NULL 作为一个值,MySQL 将不对该列显式定义 DEFAULT 属性。

主键列属于特殊情况:如果某一主键列没有显式定义 NOT NULL,MySQL 将为它设置 NOT NULL(因为主键列必须是 NOT NULL) 。在 MySQL 5.7.3 之前,主键列会隐式的加入一个默认值定义,为了避免这种情况,应该在任何主键列的定义中包含一个显式 NOT NULL 。

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

如果启用 strict 模式,若是事务表,则会发生错误并回滚SQL语句。若是非事务表,则会发生错误,但多行语句执行时,错误行之前的SQL语句会生效。

如果未启用 strict 模式,则 MySQL 将列设置为列数据类型的隐式默认值。

假设一个表 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));

隐式默认值定义如下:

数字类型的默认值为 0,声明了 AUTO_INCREMENT 的 integer 和 浮点型字段的默认值为下一个序列值;

除 TIMESTAMP 之外的日期和时间类型,默认值为适当“零”值。如果启用了explicit_defaults_for_timestamp 系统变量,则 TIMESTAMP ,则默认值为适当的“零”值(请参见 第 6.1.5 节 “Server System Variables”)。否则,对于表中的第一个 TIMESTAMP 列,默认值为当前日期和时间。请参见 第 12.3 节“Date and Time Types”。

除 ENUM 之外的字符串类型,默认值为空字符串。对于ENUM,默认值是第一个枚举值。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值