是否有等同于 LAST_INSERT_ID 的时间戳?
Is there an equivalent to LAST_INSERT_ID for timestamps?
我喜欢 MySQL 的 LAST_INSERT_ID() 函数。之后我一直使用它从我的存储过程中检索刚刚插入的行的 id 到 return。但是,现在我有一个 table,它有一个 TIMESTAMP 作为主键,设置为 DEFAULT CURRENT_TIMESTAMP。如何检索最后插入的时间戳?
在时间戳字段上使用 MAX
方法。
这应该是安全的:
START TRANSACTION;
{do your insert};
SELECT MAX({timestamp field}) FROM {table};
COMMIT;
另一种方法是利用该函数的 LAST_INSERT_ID(expr) 版本,它实际上可以将值设置为您喜欢的任何整数(也许是时间戳的 UNIX_TIMESTAMP 整数?) :
INSERT INTO my_tbl SET the_ts = FROM_UNIXTIME(LAST_INSERT_ID(UNIX_TIMESTAMP()));
现在您可以:
SELECT FROM_UNIXTIME(LAST_INSERT_ID());
与 Jon Harmon 提供的事务解决方案一样,此解决方案的一个缺点是必须考虑到这一点(明确地使用相同的值覆盖列的默认值,或启动事务)。代码可读性降低了一点,这会让其他想使用这个的人感到困惑table。我认为 Jon 的解决方案在保持可读性方面做得更好。
此外,请记住,如果您在触发器中执行此操作,triggers swallow last_insert_id() value changes.
但是,如果确实需要,您可以使用会话变量将其从触发器中冒出。
试试这个设置示例 LAST_INSERT_ID
:
SELECT FROM_UNIXTIME(LAST_INSERT_ID(UNIX_TIMESTAMP()));
SELECT FROM_UNIXTIME(LAST_INSERT_ID());
我喜欢 MySQL 的 LAST_INSERT_ID() 函数。之后我一直使用它从我的存储过程中检索刚刚插入的行的 id 到 return。但是,现在我有一个 table,它有一个 TIMESTAMP 作为主键,设置为 DEFAULT CURRENT_TIMESTAMP。如何检索最后插入的时间戳?
在时间戳字段上使用 MAX
方法。
这应该是安全的:
START TRANSACTION;
{do your insert};
SELECT MAX({timestamp field}) FROM {table};
COMMIT;
另一种方法是利用该函数的 LAST_INSERT_ID(expr) 版本,它实际上可以将值设置为您喜欢的任何整数(也许是时间戳的 UNIX_TIMESTAMP 整数?) :
INSERT INTO my_tbl SET the_ts = FROM_UNIXTIME(LAST_INSERT_ID(UNIX_TIMESTAMP()));
现在您可以:
SELECT FROM_UNIXTIME(LAST_INSERT_ID());
与 Jon Harmon 提供的事务解决方案一样,此解决方案的一个缺点是必须考虑到这一点(明确地使用相同的值覆盖列的默认值,或启动事务)。代码可读性降低了一点,这会让其他想使用这个的人感到困惑table。我认为 Jon 的解决方案在保持可读性方面做得更好。
此外,请记住,如果您在触发器中执行此操作,triggers swallow last_insert_id() value changes.
但是,如果确实需要,您可以使用会话变量将其从触发器中冒出。
试试这个设置示例 LAST_INSERT_ID
:
SELECT FROM_UNIXTIME(LAST_INSERT_ID(UNIX_TIMESTAMP()));
SELECT FROM_UNIXTIME(LAST_INSERT_ID());