MySQL如何设置默认值 字段默认值设置与修改指南

那天我在调试一个电商网站的后台,发现新注册的用户没有默认头像,数据库中用户表的头像字段一直为NULL。
快速打开phpMyAdmin,连接生产数据库,选择users表,点击编辑,发现头像字段没有默认值。
我快速添加:avatar VARCHAR(2 5 5 ) DEFAULT 'default_avatar.png'。
保存后测试正常。
等等,这让我想起之前改产品表的时候,我把数量的默认值从0改为1 0,防止用户忘记库存而下单。
ALTER TABLE 产品 ALTER COLUMN 数量 SET DEFAULT 1 0;执行后我去数据库检查表结构,确认更改成功。
但我突然想到,如果这张表有千万级数据,改变默认值会不会影响性能?虽然我们知道ALTER TABLE是表锁操作,但是具体的时间消耗没有测试过。

mysql设置与取消“onupdatecurrent_timestamp”?

说实话,当我第一次接触MySQL时,我对这个ONUPDATECURRENT_TIMESTAMP设置感到困惑。
后来在一个电商后端项目中遇到了这个问题,慢慢想出了怎么做。

当时我们有一个订单表,我们必须记录每次修改的时间。
只需将 update_time 设置为时间戳 DEFAULT CURRENT_TIMESTAMP,所有操作的时间戳都会更新,即使仅更改订单注释。
结果,日志充满了重复的修改并且变得不可读。
老实说,在这种情况下直接使用 CURRENT_TIMESTAMP 作为默认值会在每次更新时留下痕迹,这根本不是期望的效果。

后来,我的技术主管教我如何添加ONUPDATE CURRENT_TIMESTAMP。
有趣的是,这个设置智能地确定只有当其他字段值实际发生变化时才将 update_time 设置为当前时间戳。
例如,如果订单价格从1 00变为9 9 ,则更新update_time。
但如果您手动更改update_time值(例如“2 02 3 -1 0-2 7 1 0:00:00”),下次正常更新订单时,仍会根据工作时间计算新的update_time。

我记得是MySQL的一个特定版本开始支持这种细粒度的控制。
以前可能可以自己更新。
现在,它可以在 5 .6 及更高版本中本地播放。
我记得块数据是ONUPDATE CURRENT_TIMESTAMP(6 ),可以控制时区,但一般场景下,可以使用默认值。

我没有直接测试过InnoDB和MyISAM在这方面的差异,但是我推荐InnoDB主要是因为它有更好的事务性能。
我记得数据在X左右,过期记录会自动清除。
您应该查看官方文档以了解更多详细信息。
简而言之,此功能在开发过程中有很多用途,特别是在执行审计跟踪或版本控制时。
转到以下代码:
sql 创建表订单( ID INT AUTO_INCRMENT 主键; 产品名称 VARCHAR(1 00); 价格 DECIMAL(1 0,2 ); update_time TIMESTAMP 更新时的默认值 CURRENT_TIMESTAMP CURRENT_TIMESTAMP );
这样,每当product_name或price发生变化时,update_time就会自动记录最新时间。
如果您手动更改字段值,它不会移动。
非常实用,不是吗?