我有一条这样的SQL语句:

insert into table1 (col1, col2, col3, col4)
select
    value1,
    value2,
    now(),
    now()
from
    othertable inner join anotherothertable on somecolumn = someothercolumn;

该查询的select部分将返回数十万行.

now()的呼唤会有什么表现?

  • 它是否会为所有行插入返回相同的值?
  • 假设每个单行插入似乎被调用两次,它是否会在同一插入中返回相同的值?

我希望执行此插入操作,以便调用now()一次,并且该值是固定的,并在插入所有行和数据时使用.我不确定这个查询是否会以这种方式运行.

因为不可能在SQL中做类似current_timestamp = now()的事情,并且使用current_timestamp作为参数来代替对now()的两个调用,所以我不确定如何做到这一点.

推荐答案

这在Date/Time Functions and Operators版本中有详细的文档记录,但从本质上讲,如果您的意图是在每一行都有相同的时间,那么您的代码就没有问题.它将 for each 单独的语句甚至整个事务返回相同的值.

您可以进行快速测试:

START TRANSACTION;

SELECT now();
-- Wait a few seconds
SELECT now();

ROLLBACK;
docker=# START TRANSACTION;
START TRANSACTION
docker=*# SELECT now();
              now              
-------------------------------
 2023-12-20 11:55:11.761564+00
(1 row)

docker=*# SELECT now();
              now              
-------------------------------
 2023-12-20 11:55:11.761564+00
(1 row)

docker=*# ROLLBACK;
ROLLBACK
docker=# 

Sql相关问答推荐

PostgreSQL:获取每家店铺收入最高的员工

获取每个帖子的匹配关键字列表

Group By子句返回太多行

有没有一种正确的方法来利用SQL UNION来从三个潜在查询中 Select 最大值?

为什么在这种情况下我不能使用LAG函数?

SQL基于多个值 Select 单行

当交叉联接3个或更多表时,实体框架中是否会传输冗余的行数据并占用数据库带宽?

使用Kotlin Exposed SQL DSL Select 多个值并排序

如何隐藏聚合JSON数组元素的键

具有多个条件的SQL否定

我如何才能在付款人单列中拉出只有9个付款人单的人?

在Athena中使用regexp提取括号前的字符串值

Grafana SQL 模板变量(值、文本)

仅当 SQL Server 中的表为开时,才在存储过程中使用更改跟踪

SQL Server 查询 WHERE LIKE

如何 for each id创建长度等于id长度的不同日期序列?

每次计数器增加时通过运行总重置进行分组

批量更改WooCommerce中所有产品的税收状态

雅典娜弄错了操作顺序

为什么这是 AND,OR with NULL 的真值表?