mysql的update_time,create_time错误

本文详细介绍了如何解决在MySQL中因NO_ZERO_IN_DATE和NO_ZERO_DATE模式导致的零日期插入错误。通过调整sql_mode参数,可以成功避免此类错误,确保数据库操作正常进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
https://blog.youkuaiyun.com/zrp1992/article/details/77868305
解决方法:
在这里插入图片描述
查看sql_mode:
mysql> show session variables like ‘%sql_mode%’;
±--------------±------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value |
±--------------±------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
±--------------±------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

修改sql_mode,去掉NO_ZERO_IN_DATE,NO_ZERO_DATE:
mysql> set sql_mode=“ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”;
Query OK, 0 rows affected, 1 warning (0.00 sec)

重新执行,成功:
mysql> source cms_user.sql
Query OK, 0 rows affected (0.00 sec)

注:
NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。

只需要在my.ini配置文件里面去掉NO_ZERO_IN_DATE,NO_ZERO_DATE

### SQL `update_time` 字段用法及示例 #### 定义与作用 在 MySQL 中创建带有 `update_time` 字段的表格时,可以通过指定该字段为 `NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP` 来实现自动记录每次修改的时间戳功能[^1]。这意味着每当对应行的数据被更改时,数据库会自动更新此列至最新的时间戳。 对于希望获取不受本地时区影响的标准协调世界时(UTC),则应考虑采用 `GETUTCDATE()` 函数来代替默认的时间处理方式[^2]。 #### 实际应用案例 下面是一个具体的例子展示如何定义包含 `update_time` 的表结构: ```sql CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, data VARCHAR(255), update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` 这段代码片段展示了怎样在一个名为 `example_table` 的新表中加入了一个自动生成并维护其最后变更时刻的 `update_time` 列。当任何一行中的其他字段发生变化时,MySQL 将负责同步刷新这个特别标记出来用于追踪变动历史的信息项。 为了确保应用程序逻辑能够充分利用这些特性,在执行插入操作之后再尝试对该条目做某些改动即可观察到预期行为——即 `update_time` 值随每一次有效提交而相应调整。 #### 批量更新场景下的注意事项 如果涉及到多条记录的同时更新,则需要注意构建合理的查询语句以覆盖目标范围内的所有实例而不遗漏任何一个待更正的对象。例如通过使用 `IN` 关键字配合列表参数化的方式可以高效完成此类任务[^3]。 ```sql UPDATE websites SET status='active' WHERE name IN ('Google', '速学堂'); ``` 上述命令将会把符合条件的名字对应的站点状态设为激活,并触发相应的 `ON UPDATE CURRENT_TIMESTAMP` 动作去重置关联的 `update_time` 时间戳。 #### 添加时间戳字段的意义 许多现代开发框架鼓励甚至强制要求开发者在其设计的数据模型内引入诸如 `created_at` 和 `updated_at` 这样的元数据属性以便更好地支持审计跟踪、版本控制等功能需求[^5]。这样做不仅有助于提高系统的可追溯性和透明度,同时也简化了许多业务流程的设计思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值