您的当前位置:首页>全部文章>文章详情

改数据库字段之前,先让它答完这 6 问

发表于:2026-10-07 12:04:53浏览:4次TAG: #MySql #webman #教程

ALTER 它写得很快

需求是给文章加发布时间,到点才在前台可见。模型几十秒就能交出改表语句、模型字段和后台表单。语句能跑。危险不在语法,在它没问你的那几件旧事。

这张表里已经有几年的文章。新列加上去,旧行是空的。空着代表「马上可见」还是「不可见」,两条解释都能写成代码,上线之后的效果相反。

动表之前的六问

  1. 旧行的空值是什么意思。我定的是:空值表示沿用原来的状态,前台该显示还显示。只有填了时间、又还没到点的,才隐藏。不把这句话写进注释和查询,模型会猜一个它觉得合理的默认。
  2. 谁可以写这个字段。后台编辑可以。前台接口不行。定时任务只能把它从「待发布」改成「已发布」,不能改标题。写不写得清,决定要不要在接口里单独拦。
  3. 哪些查询会用它过滤,要不要索引。前台列表会加「已到点或为空」。这是高频条件。先看现有查询,再决定索引,而不是顺手给每个新列都加索引。
  4. 时间和哪一个时区比。服务器若是 UTC,直接和现在比,文章会提前八小时出现。比较和写入都按上海时间,这句话要出现在代码里,不能只出现在聊天里。
  5. 代码和表谁先上。代码先上、列还没有,详情页会因为未知列变成 500。列先上、代码还是旧的,新列先躺着,没有行为变化。这次选择列先上,代码确认读得到空值之后再发。
  6. 要撤回时,列能不能删。代码已经读这个列之后,删列会再次 500。撤回顺序是先回到不读它的代码,再删列。模型写的回滚脚本如果只有一句 DROP,那是半截。
它默认会做的你要改成的
新列默认当前时间旧文章保持空,空就是原来的可见规则
用数据库的当前时间比较按上海时间比较
回滚就是删列先停掉读取,再删列

这六问答完,再让它写 ALTER。它写得依然很快,但这次快在你已经定过的规则上,不是快在替你猜旧数据。