Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL/Postgres:LAST_INSERT_ID()/LASTVAL()不同的行为_Mysql_Postgresql - Fatal编程技术网

MySQL/Postgres:LAST_INSERT_ID()/LASTVAL()不同的行为

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,该变量保存完整的插入行,

我在mysql和postgres中都有一个简单的触发器设置

当在主表中插入行时,此触发器在日志记录表中插入行

当我现在在主表中插入一行时,如果我随后调用以下函数之一,mysql/postgres将显示不同的行为:

  • SELECT LAST\u INSERT\u ID()
    :返回主表中行的ID
  • SELECT LASTVAL()
    :返回日志记录表中行的id

这是故意的、可靠的行为吗?

是的,这是故意的,显然是故意的


在PostgreSQL中,您应该使用触发器的预定义变量
NEW
,该变量保存完整的插入行,包括新的
id
。请看,我相信MySQL也有类似的功能。在触发器中不会调用LAST_INSERT_ID()/LASTVAL()。他们被称为外面。我更新了这个问题,使之更加精确。Postgersql和MySQL是两种不同的产品,具有不同的实现。在一个非标准功能中要求两个产品之间的一致性有点过分了。另外,不要忘记last_insert_id()适用于自动递增字段。如果表中没有这样的字段,则last_insert_id()无法从该表返回任何值。