mysql主从复制中, 若从库有额外字段, 如何设置其默认值

发布于 2022-09-01 18:10:24 字数 1192 浏览 23 评论 0

现有一套mysql的主库从库, 均有表A:

CREATE TABLE `member` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nickname` varchar(64) DEFAULT NULL COMMENT '昵称',
) ENGINE=InnoDB AUTO_INCREMENT=10000 DEFAULT CHARSET=utf8mb4

这时, 我在从库中, 给A表添加一个last_updated字段(主库中的表结构不变):

ALTER TABLE `member` ADD COLUMN `last_updated` timestamp NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新时间' AFTER `nickname`;

修改后变成了:
主库中表A有两个字段:id,nickname;
而从库中表A有3个字段:id,nickname,last_updated, 且每行数据的last_updated都被填充为现在的时间.

这样修改预期达到的效果是, 主库中表A数据的任何insertupdate操作, 主从同步, 对应的从库中的A表, 都会自动记录最后insertupdate的时间.

但实际观察发现:

  • 主库中有新的数据插入时,从库中last_updated字段的值为null(预期为CURRENT_TIMESTAMP).

  • 主库中有新的数据修改时,从库中last_updated字段的值不变(预期为更新到最新时间).

请问这是为什么. 我本想在从库中, 利用last_updated字段做数据迁移的增量更新依据的, 现在发现没法做.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

濫情▎り 2022-09-08 18:10:24

last_updated 类型:timestamp 默认值:CURRENT_TIMESTAMP
这个可以记录插入时间;
如果记录每次的更新时间,可以写个触发器来记录

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文