MySQL/Postgres:LAST_INSERT_ID()/LASTVAL()不同的行为
我在mysql和postgres中都有一个简单的触发器设置 当在主表中插入行时,此触发器在日志记录表中插入行 当我现在在主表中插入一行时,如果我随后调用以下函数之一,mysql/postgres将显示不同的行为:MySQL/Postgres:LAST_INSERT_ID()/LASTVAL()不同的行为,mysql,postgresql,Mysql,Postgresql,我在mysql和postgres中都有一个简单的触发器设置 当在主表中插入行时,此触发器在日志记录表中插入行 当我现在在主表中插入一行时,如果我随后调用以下函数之一,mysql/postgres将显示不同的行为: SELECT LAST\u INSERT\u ID():返回主表中行的ID SELECT LASTVAL():返回日志记录表中行的id 这是故意的、可靠的行为吗?是的,这是故意的,显然是故意的 在PostgreSQL中,您应该使用触发器的预定义变量NEW,该变量保存完整的插入行,
:返回主表中行的IDSELECT LAST\u INSERT\u ID()
:返回日志记录表中行的idSELECT LASTVAL()
这是故意的、可靠的行为吗?是的,这是故意的,显然是故意的
在PostgreSQL中,您应该使用触发器的预定义变量
NEW
,该变量保存完整的插入行,包括新的id
。请看,我相信MySQL也有类似的功能。在触发器中不会调用LAST_INSERT_ID()/LASTVAL()。他们被称为外面。我更新了这个问题,使之更加精确。Postgersql和MySQL是两种不同的产品,具有不同的实现。在一个非标准功能中要求两个产品之间的一致性有点过分了。另外,不要忘记last_insert_id()适用于自动递增字段。如果表中没有这样的字段,则last_insert_id()无法从该表返回任何值。