【问题标题】:MySQL MYISAM engine does not accept default timestamp value [duplicate]MySQL MISAM 引擎不接受默认时间戳值 [重复]
【发布时间】:2020-05-16 22:30:58
【问题描述】:

我的 cPanel 服务器中运行着 MyISAM 引擎,服务器不支持 InnoDB 引擎,我只有 MyISAM 引擎。

当我尝试创建默认值为(当前时间 + 5 分钟)的时间戳类型的表列时,它会出错。 这在我的使用 InnoDB 的机器上有效,但在使用 MyISAM 的服务器中它给出了错误You have an error in your SQL syntax; check the manual that... near DEFAULT (NOW() + 300)

CREATE TABLE test(
    token_death_time TIMESTAMP DEFAULT (NOW() + 300)
   );

我也试过

CREATE TABLE test(
    token_death_time TIMESTAMP DEFAULT DATE_ADD(NOW(), INTERVAL 5 MINUTE)
   );

我能否使用 MyISAM 实现我想要的,或者我必须在我的 PHP 脚本中进行“添加”?

【问题讨论】:

  • 考虑到“在服务器上我没有创建触发器的权限”,我建议您在检查令牌过期的查询中考虑这 5 分钟。
  • 请查看我更新的答案,您可以使用变量和准备语句找到解决方案。
  • @Akina 谢谢,但我在同步 php 时间和 mysql 时间时遇到问题。
  • 我在同步 php 和 mysql 时间时遇到问题。 在服务器端执行所有计算 - 这个问题没有发生的基础。

标签: php mysql time myisam


【解决方案1】:

您不能使用函数作为默认值(版本 8 之前)

但你可以使用触发器

CREATE TRIGGER before_insert_test
BEFORE INSERT ON test 
FOR EACH ROW
SET new.token_death_time = DATE_ADD(NOW(), INTERVAL 5 MINUTE);

【讨论】:

  • 如果 InnoDB 被锁定,那么我担心触发器创建也被锁定......
  • 是的,它在机器上工作,但在服务器上我没有创建触发器的权限,我无法更改它们。我也尝试创建一个函数并默认调用它,也不能创建函数。
【解决方案2】:

您需要的 DEFAULT 值表达式可用于 MySQL 8.0.13 或更高版本(fiddle - 两个查询都在 8.0.19 版本上成功执行)。

Data Type Default Values

而且问题与表的引擎无关。

【讨论】:

    【解决方案3】:

    您可以使用 CURRENT_TIMESTAMP

    CREATE TABLE test(
       token_death_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    

    要将所需的时间戳设置为默认值,您可以将其设置在变量中,并可以使用准备和执行语句,使用以下代码:

    SET @def_timestamp = DATE_ADD(NOW(), INTERVAL 1 DAY);
    SET @query = CONCAT("CREATE TABLE test(token_death_time TIMESTAMP DEFAULT '", @def_timestamp , "')");
    PREPARE stmt from @query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    【讨论】:

    • 不匹配 OP 的任务。
    • 您的问题是“MySQL MISAM 引擎不接受默认时间戳值”。所以我的回答是,它允许将 CURRENT_TIMESTAMP 设置为默认值
    • 主题!=问题。主题中甚至没有问号...
    • 您正在按主题指定您的问题。这意味着您指定了错误的主题。 MyIsam 允许将 CURRENT_TIMESTAMP 设置为默认值,就是这样
    • @ZOLDIK 是的,没关系
    猜你喜欢
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多