我有以下表结构:
badge_id
并且interface_id
是主键。
当我尝试仅指定 的INSERT操作时badge_id
,我预计它会失败,但interface_id
默认为 0。
我正在运行以下版本:
有人可以解释为什么它默认为零吗?这不应该失败吗?提前致谢。
答案在CREATE TABLE的文档中:
如果列定义不包含显式 DEFAULT 值,MySQL 会根据第 11.5 节,“数据类型默认值”中的描述确定默认值。
数据类型默认值中提供了更多信息:
隐式默认值定义如下: 对于数字类型,默认值为 0,但使用 AUTO_INCREMENT 属性声明的整数或浮点类型除外,默认值为序列中的下一个值。
看看这个:http ://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html
从 MySQL 5.0.2 开始,如果列定义不包含显式 DEFAULT 值,MySQL 将按如下方式确定默认值:
如果列可以将 NULL 作为值,则使用显式 DEFAULT NULL 子句定义该列。这与 5.0.2 之前的相同。
如果该列不能以 NULL 作为值,MySQL 将定义没有显式 DEFAULT 子句的列。对于数据输入,如果 INSERT 或 REPLACE 语句不包含列的值,则 MySQL 根据当时有效的 SQL 模式处理该列:
如果未启用严格 SQL 模式,MySQL 会将列设置为列数据类型的隐式默认值。