时间戳是否等效于LAST_INSERT_ID?

时间:2017-09-11 14:34:31

标签: mysql timestamp last-insert-id

我喜欢MySQL的LAST_INSERT_ID()函数。我一直用它来检索刚插入的行的id,然后从我的存储过程返回。但是,现在我有一个表,其TIMESTAMP作为主键设置为DEFAULT CURRENT_TIMESTAMP。如何检索最后插入的时间戳?

3 个答案:

答案 0 :(得分:5)

这应该安全地做到:

START TRANSACTION;
{do your insert};
SELECT MAX({timestamp field}) FROM {table};
COMMIT;

答案 1 :(得分:1)

另一种方法是利用该函数的LAST_INSERT_ID(expr)版本,它实际上可以将值设置为您喜欢的任何整数(可能是您的时间戳的UNIX_TIMESTAMP整数?):

bytea

现在你可以:

INSERT INTO my_tbl SET the_ts = FROM_UNIXTIME(LAST_INSERT_ID(UNIX_TIMESTAMP()));

与Jon Harmon提供的事务解决方案一样,此解决方案的一个缺点是,必须考虑到这一点进入插入(明确地用相同的值覆盖列的默认值,或者启动事务)。代码可读性略有下降,并且可能会使希望使用此表的其他人感到困惑。我认为Jon的解决方案可以更好地保留可读性。

另外,请记住,如果您在触发器中执行此操作,triggers swallow last_insert_id() value changes.

但是,如果确实需要,可以使用会话变量将其从触发器中冒出来。

尝试设置SELECT FROM_UNIXTIME(LAST_INSERT_ID());

的示例
LAST_INSERT_ID

答案 2 :(得分:0)

在时间戳字段上使用MAX方法。

相关问题