迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

在 MySQL 中使用 CURRENT_TIMESTAMP 作为默认值

作者:迹忆客 最近更新:2024/03/25 浏览次数:

本文教你如何在低于 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_TIMESTAMPDEFAULT 的列应该放在第一位;应遵循具有 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 控制台中的输出:

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

MySQL 中的减法运算

发布时间:2024/03/25 浏览次数:140 分类:MySQL

本教程将指导你如何在 MySQL 中模拟 MINUS 操作。它还通过不同的示例教你各种模拟 MINUS 操作的方法。

MySQL 中的安全模式

发布时间:2024/03/25 浏览次数:193 分类:MySQL

本教程帮助我们了解 MySQL 数据库中的安全模式。

MySQL 中的 MUL vs PRI vs UNI

发布时间:2024/03/25 浏览次数:190 分类:MySQL

本教程将指导你了解 MySQL 中 MUL、PRI 和 UNI 键之间的区别。它还强调了它们中的每一个的使用。

MySQL 中的 If ELSE

发布时间:2024/03/25 浏览次数:65 分类:MySQL

本教程演示如何在 MySQL 中使用 IF ELSE 语句。

在 MYSQL 中的一个查询中执行多个连接

发布时间:2024/03/25 浏览次数:161 分类:MySQL

本教程展示了如何在 MySQL 中的一个查询中合并多个连接;无论是内部的还是外部的。我们还展示了定义连接条件的不同方法。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便