mysql - 数据库(SQL)中的无效默认值(时间戳)问题
问题描述
我正在尝试创建如下表,但出现错误:
“updated_at”的默认值无效
我不知道该怎么办......查询有什么问题。
CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` int(11) DEFAULT NULL,
`title` varchar(255) NOT NULL,
`slug` varchar(255) NOT NULL UNIQUE,
`views` int(11) NOT NULL DEFAULT '0',
`image` varchar(255) NOT NULL,
`body` text NOT NULL,
`published` tinyint(1) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
解决方案
根据 SQL 标准,'0000-00-00 00:00:00' 不是时间戳字段的有效值。您应该将其NULL
用作列的默认值updated_at
。
CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_id` int(11) DEFAULT NULL,
`title` varchar(255) NOT NULL,
`slug` varchar(255) NOT NULL UNIQUE,
`views` int(11) NOT NULL DEFAULT '0',
`image` varchar(255) NOT NULL,
`body` text NOT NULL,
`published` tinyint(1) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
部分ON UPDATE CURRENT_TIMESTAMP
与created_at
领域无关,但与updated_at
推荐阅读
- node.js - Firebase nodejs admin SDK每次获取实时数据库路径的数据时都会下载数据
- amazon-web-services - AWS - IIS 和 Windows 服务以及 SQL 服务器 - 负载均衡器和高可用性
- regex - 具有修剪功能的密码策略的正则表达式
- php - 如何在单击 ajax wordpress 上创建子类别?
- python - OpenCV安装错误:没有这样的文件或目录“pyopencv_generated_include.h”
- android - Create Folder in External Android Storage (nativescript)
- android - when selected add border shape for textView and editText ,
- php - 网页是否有 pcntl_exec
- node.js - PM2 日志轮换每周配置
- mariadb - 在 Windows WSL 上将文件导入 MariaDB