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