【问题标题】:Return MySQL timestamp on insert在插入时返回 MySQL 时间戳
【发布时间】:2013-02-17 01:06:41
【问题描述】:

当我在 PHP 中对 MySQL 数据库执行插入语句时,有没有办法返回自动生成的时间戳,还是需要单独调用数据库来检索数据?

编辑:我忘记了 MySQL 不使用纪元日期。我决定只使用一个自增整数和一个存储过程。

【问题讨论】:

  • 你说的自动增量时间戳是什么意思?这可以使用存储过程来完成。
  • 没有。最多您可以使用 last_insert_id() 获取新记录的 ID,然后您可以在 select 中使用它来获取该时间戳。
  • 时间戳为PK,默认为CURRENT_TIMESTAMP。为了最大限度地减少数据库查询,我希望可以在不再次查询数据库的情况下返回它的值。
  • 大概的时间戳还不够吗?所以你可以通过 PHP 获取当前时间,然后进行插入查询。
  • 到底谁对合法问题投反对票?作为对 Benjamin 的回应,同时查询的可能性使得在代码中生成时间戳不是一个好主意,因为它们是 PK。

标签: php mysql sql timestamp


【解决方案1】:

您需要单独提出请求才能获取该信息。执行 INSERT 时,您只能获取自动递增表的最后一个插入 ID。

【讨论】:

  • 这几乎是我所期望的。至少查询很小。
【解决方案2】:

据我所知,如果ID 设置为AUTO_INCREMENTed,最后插入的 ID 是可能的。但是对于时间戳,我建议您创建一个stored procedure,这样您就只会对数据库有一个请求。请记住,连接到数据库的成本很高。

【讨论】:

  • 因此问题。我不想打开另一个查询。总查询的数量肯定很少,可能无关紧要,但这不是马虎的借口。
  • 您不必打开另一个查询。您只需调用该过程一次。
  • 我只是同意你的看法。
  • 我正在添加其他信息:D
【解决方案3】:

你可以在insert之后返回一个last inserted id,比如:

<?php
$sql=mysql_query("INSERT INTO <TABLE> VALUES (?,?)");
return mysql_insert_id();
?>

【讨论】:

  • 这符合常识。但是如果有波动并且需要确切的时间,“现在”可能会晚于甚至早于刚刚插入的数据库行中的时间。这可能是由于文件服务器和/或数据库服务器上的繁重工作负载和/或流量造成的。但尽管如此;对于普通的人类互动,这不会构成任何威胁:)
  • 正如我一般认为的那样,所以我将答案和return last insert id 更改为uniqueness
【解决方案4】:

使用多语句查询。

  1. 选择当前时间戳到一个变量中。
  2. 插入带有时间戳的行。
  3. 将变量返回(选择)到 php。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2016-03-06
    • 2012-01-29
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多