在 MySQL 中使用 CURRENT_TIMESTAMP 作为默认值
本文教你如何在低于 5.6.5
的 MySQL 版本中使用 CURRENT_TIMESTAMP
作为 DEFAULT
。因此,你可以防止 MySQL 错误 1293。
我们的方法包括重新排序表列并使用 DEFAULT 0
和时间值。
在 MySQL 中使用 CURRENT_TIMESTAMP
作为 DEFAULT
时重现错误
在向你展示如何将 CURRENT_TIMESTAMP
用作 DEFAULT
之前,让我们重现错误。这是你尝试将 CURRENT_TIMESTAMP
用作 DEFAULT
时会遇到的错误。
要继续,请执行以下操作:
-
下载低于
5.6.5
的 MySQL 版本。你将获得它作为 XAMPP 1.8.0 的一部分,或其他方式。 -
在 XAMPP 中打开 MySQL,使用
mysql -u root -p
登录。你会注意到 MySQL 版本是5.5.2a
,所以它小于5.6.5
。 -
创建一个名为
just_a_test_db
的数据库。
现在,使用以下 SQL 在数据库中创建一个 site_users
表:
CREATE TABLE site_users (
user_id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(255) NOT NULL UNIQUE,
user_firstname VARCHAR(255) NOT NULL,
user_surname VARCHAR(255) NOT NULL,
user_email_address VARCHAR(255) NOT NULL UNIQUE,
user_password CHAR(40) NOT NULL,
is_active BOOL NOT NULL DEFAULT FALSE,
is_validated BOOL NOT NULL DEFAULT FALSE,
date_validated TIMESTAMP,
date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id)
) Engine=InnoDB;
你将收到如下图所示的错误:
重新排序表列以在 MySQL 中使用 CURRENT_TIMESTAMP
作为 DEFAULT
如果你对 SQL 查询中的表列重新排序,则可以使用 CURRENT_TIMESTAMP
作为 DEFAULT
。以 CURRENT_TIMESTAMP
为 DEFAULT
的列应该放在第一位;应遵循具有 TIMESTAMP
值的其他列。
在下面的 SQL 中,我们对 SQL 进行了重新排序,MySQL 创建了表:
CREATE TABLE site_users (
user_id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(255) NOT NULL UNIQUE,
user_firstname VARCHAR(255) NOT NULL,
user_surname VARCHAR(255) NOT NULL,
user_email_address VARCHAR(255) NOT NULL UNIQUE,
user_password CHAR(40) NOT NULL,
is_active BOOL NOT NULL DEFAULT FALSE,
is_validated BOOL NOT NULL DEFAULT FALSE,
date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
date_validated TIMESTAMP,
PRIMARY KEY (user_id)
) Engine=InnoDB;
MySQL 控制台中的输出:
使用 DEFAULT 0
在 MySQL 中使用 CURRENT_TIMESTAMP
作为 DEFAULT
使用 DEFAULT 0
是另一个选项,它允许你使用 CURRENT_TIMESTAMP
作为 DEFAULT
。你将其应用于没有默认值的 TIMESTAMP
列。
在我们的 SQL 中,这是 date_validated
列。以下 SQL 向你展示了如何执行此操作:
CREATE TABLE site_users_2 (
user_id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(255) NOT NULL UNIQUE,
user_firstname VARCHAR(255) NOT NULL,
user_surname VARCHAR(255) NOT NULL,
user_email_address VARCHAR(255) NOT NULL UNIQUE,
user_password CHAR(40) NOT NULL,
is_active BOOL NOT NULL DEFAULT FALSE,
is_validated BOOL NOT NULL DEFAULT FALSE,
date_validated TIMESTAMP NOT NULL DEFAULT 0,
date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id)
) Engine=InnoDB;
MySQL 控制台中的输出:
使用时间值在 MySQL 中使用 CURRENT_TIMESTAMP
作为 DEFAULT
如果 TIMESTAMP
的默认值是时间,你可以在其他列上使用 CURRENT_TIMESTAMP
作为 DEFAULT
。这个时间值是 0000-00-00 00:00:00
,我们在 date_validated
列中使用了它。
以下 SQL 显示了这一点:
CREATE TABLE site_users_3 (
user_id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(255) NOT NULL UNIQUE,
user_firstname VARCHAR(255) NOT NULL,
user_surname VARCHAR(255) NOT NULL,
user_email_address VARCHAR(255) NOT NULL UNIQUE,
user_password CHAR(40) NOT NULL,
is_active BOOL NOT NULL DEFAULT FALSE,
is_validated BOOL NOT NULL DEFAULT FALSE,
date_validated TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
date_registered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (user_id)
) Engine=InnoDB;
MySQL 控制台中的输出:
相关文章
MySQL 中的减法运算
发布时间:2024/03/25 浏览次数:140 分类:MySQL
-
本教程将指导你如何在 MySQL 中模拟 MINUS 操作。它还通过不同的示例教你各种模拟 MINUS 操作的方法。
MySQL 中的 MUL vs PRI vs UNI
发布时间:2024/03/25 浏览次数:190 分类:MySQL
-
本教程将指导你了解 MySQL 中 MUL、PRI 和 UNI 键之间的区别。它还强调了它们中的每一个的使用。
MySQL 中的 DATETIME 与 TIMESTAMP 的比较
发布时间:2024/03/25 浏览次数:155 分类:MySQL
-
本教程将向你介绍 DATETIME 和 TIMESTAMP 数据类型。你还将了解在哪里使用它们以及它们的异同。
在 MYSQL 中的一个查询中执行多个连接
发布时间:2024/03/25 浏览次数:161 分类:MySQL
-
本教程展示了如何在 MySQL 中的一个查询中合并多个连接;无论是内部的还是外部的。我们还展示了定义连接条件的不同方法。