mysql中的默认值有什么作用_mysql默认值使用说明

17次阅读

mysql默认值(default)用于字段未指定值时自动填充,保障插入成功且避免NULL,支持常量、时间函数等,可动态修改但不影响已有数据。

mysql中的默认值有什么作用_mysql默认值使用说明

MySQL 中的默认值(DEFAULT)主要解决“字段没给值时怎么办”这个问题。它不是可有可无的修饰,而是保障插入操作能顺利执行、数据结构更健壮的关键机制。

自动填充未指定字段

插入数据时,如果某列在 INSERT 语句中被省略,且该列设置了 DEFAULT,MySQL 就不会报错,也不会让它变成 NULL(除非显式允许 NULL 且没设默认值),而是直接填入你定义的默认值。

  • 例如:status VARCHAR(20) DEFAULT 'pending',插入时不写 status 字段,新记录自动为 ‘pending’
  • 时间字段常用:created_at timestamp DEFAULT CURRENT_TIMESTAMP,省去每次手写 NOW()
  • 数字字段如:sort_order int DEFAULT 0,避免因遗漏导致 NULL 或插入失败

配合非空约束防止报错

当字段定义为 NOT NULL 又没给默认值,INSERT 时若漏掉该字段,MySQL 直接报错(Error 1364)。加上 DEFAULT 后,既保持非空,又让插入更宽松。

  • 推荐组合:is_deleted TINYINT NOT NULL DEFAULT 0,比允许 NULL 更清晰可控
  • 注意:DEFAULT NULL 是合法写法,但和不设默认值效果一样——省略该字段时仍存为 NULL
  • 类型必须匹配,比如不能给 date 字段设 DEFAULT ‘abc’

支持常量、函数与简单表达式

MySQL 允许的默认值类型有限制,但覆盖大多数实用场景:

  • 常量:’draft’、100、-1、true
  • 时间函数:CURRENT_TIMESTAMP、NOW()、CURRENT_DATE(注意:CURRENT_TIME 不支持作为列默认值)
  • 表达式:仅限“常量表达式”,如 DEFAULT (1 + 1)DEFAULT 'v1_',但不能引用其他列或使用子查询

运行时可动态调整

表建好后,默认值不是一成不变的。用 ALTER table 可随时修改或清除:

  • 设新默认值:ALTER TABLE users ALTER column status SET DEFAULT 'inactive';
  • 删掉默认值:ALTER TABLE users ALTER COLUMN status DROP DEFAULT;
  • 注意:修改默认值只影响后续 INSERT,已有数据不受影响
text=ZqhQzanResources