标签: update

将 SELECT 的结果列表存储在变量中以进行计数并使用结果

我有一个存储过程,它使用游标,每次获取一个重复项SELECT,一次确定找到的 ID 数量 ( SELECT COUNT(ID) FROM TableA WHERE something.. @cur_var),如果该值COUNT(ID)大于指定值,则为UPDATE另一个表发出一个,WHERE使用上述 ID ( SELECT ID FROM TableA WHERE something.. @cur_var) 。

这个想法是将其SELECT存储在变量中(伪代码idlist = SELECT COUNT(ID) FROM TableA WHERE something.. @cur_var)。然后在(伪代码length(idlist)中使用该列表的长度。在这种情况下,在语句 (再次伪代码,)中再次使用该列表IFIF>100WHEREUPDATE TableB SET value = @cur_var WHERE ID IN idlist

我希望足够具体,我想将 a 的结果保存SELECT在变量中。然后使用结果WHERE IN variable和变量中的行数在IF.

使用 Microsoft SQL Server Enterprise Edition …

sql-server-2005 sql-server count update

4
推荐指数
1
解决办法
5万
查看次数

如果其他列被索引,Postgres 更新速度会慢吗?

某些更新在大型 Postgres 表上花费的时间太长。鉴于这些条件:

  • 仅更新一列,且未建立索引
  • 由于之前的更新,该列中的每一行都已包含数据
  • 数据的大小没有改变(例如,重写布尔值)
  • 此表或任何其他表中没有其他列依赖于正在更新的列的值
  • 没有对数据库执行其他查询(这是工作站上的个人研究数据库,而不是企业数据库)
  • 其他列上有索引
  • 带 Bitlocker 的旋转驱动器(非 SSD)和带 Windows 8.1 x64 的快速 PC
  • 该表有 1000 万行和 60 列

...您可能会认为,相对于使用 Bitlocker 旋转媒体的预期,更新将花费合理的时间。我们不会创建更多数据,因此不需要在 HDD 上移动现有数据,只需覆盖它即可。其他索引应该不需要更改。等等,相反,经过20个小时不断的硬盘磨练,我厌倦了等待,停止了查询。如果我删除其他列上的所有索引并重新运行查询,则只需要大约 30 分钟。

为什么与此查询无关的列上的索引会使更新时间膨胀?

postgresql performance index update postgresql-performance

4
推荐指数
1
解决办法
3982
查看次数

静态光标和当前位置

静态游标不允许修改数据,因为它是只读的,并且当使用“Where current of”执行时,它会按预期返回错误。到目前为止,一切都很好。但我惊讶地发现静态游标允许使用这样的变量修改数据。

DECLARE @nome varchar(100), @salario int,@idemp int
DECLARE contact_cursor  CURSOR STATIC FOR
SELECT empno,ename, sal FROM emp

OPEN contact_cursor;

FETCH NEXT from contact_cursor into @idemp,@nome, @salario WHILE @@FETCH_STATUS=0 BEGIN

If @salario < 5000
    Update Emp
    Set Sal = Sal * 1.1
    where empno=@idemp --No error and do the update
    --Where current of contact_cursor; --gives error

print @nome+' '+cast(@salario as varchar(100));
Run Code Online (Sandbox Code Playgroud)

FETCH NEXT from contact_cursor into @idemp,@nome, @salario END CLOSE contact_cursor; DEALLOCATE contact_cursor;

Run Code Online (Sandbox Code Playgroud) 问题是:在这次更新中使用“where current”和用光标提取的变量有什么区别?

sql-server t-sql cursors update

4
推荐指数
1
解决办法
5126
查看次数

想要知道“UPSERT”操作是否执行了 INSERT 或 UPDATE

我有一个查询,我尝试插入一条记录并准备更新以防记录存在。

问题是我想知道,一旦执行查询,该操作是更新还是插入。

任何想法?

mysql insert update

4
推荐指数
1
解决办法
1768
查看次数

如何在一条 SQL 语句中更新多行的多列

在我的 SQL Server 数据库中,我想更新多行的列。我只能为一行做:

UPDATE theTable
SET theColumn = case
WHEN id = 1 then 'a' 
WHEN id = 2 then 'b'
WHEN id = 3 then 'c'
WHERE id in (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

如何在同一查询中更新更多列(theColumn2、theColumn3...)?

sql-server update

4
推荐指数
2
解决办法
8万
查看次数

使用 WHERE 子句更新数组的第 n 个元素

我在 PostgreSQL 10 数据库product中有一个jsonb名为“元数据”的列的表。这是我第一次使用文档和 Postgres。jsonb值看起来像这样:

{
  "name": "l33t 衬衫",
  “价格”:“1200”,
  "数量": "60",
  “选项” : 
    {
      “类型”:“收音机”,
      "title": "颜色",
      “选择”:[
        {“价值”:“红色”,“价格”:“-100”,“数量”:“30”},
        {“价值”:“蓝色”,“价格”:“+200”,“数量”:“10”},
        {“价值”:“绿色”,“价格”:“+300”,“数量”:“20”}
      ]
    }
}

两个问题:

1.如何选择“opts”数组中的特定元素?

select metadata->'options'->'opts'->(element here) from product
where  metadata->'options'->'opts' @> '[{"value" : "blue"}]'
Run Code Online (Sandbox Code Playgroud)

2 、当售出一件或多件时,如何更新“数量”(减去当前的“数量”)?

对指南/注释的进一步链接表示赞赏。

postgresql update json postgresql-10

4
推荐指数
1
解决办法
8694
查看次数

更新查询 (Postgres) 中 Set 子句的执行顺序

我最近在 Postgres 中遇到了这种奇怪的行为。我有一张像下面这样的表:

sasdb=# \d emp_manager_rel 
           表“db3004db.emp_manager_rel”
   专栏 | 类型 | 整理 | 可空 | 默认
------------+--------+-----------+------------+----- ----
 emp_id | bigint | | |
 manager_id | bigint | | |

select * from emp_manager_rel ;
 emp_id | manager_id
--------+------------
      1 | 123

我执行了以下更新语句:

更新1:

更新 emp_manager_rel 设置 manager_id = manager_id+emp_id , emp_id=emp_id*4;

更新表格如下:

emp_id | manager_id
--------+------------
      4 | 124

更新 2:我执行了以下查询(在原始表上,而不是在更新表上)

更新 emp_manager_rel 设置 emp_id=emp_id*4 , manager_id = manager_id+emp_id ;

它更新表格如下:

emp_id | manager_id
--------+------------
      4 | 124

我期望 …

postgresql update sql-standard

4
推荐指数
1
解决办法
1623
查看次数

如何使用 GROUP BY 从 JOIN 更新

SELECT查询中

SELECT b.id, MIN(IFNULL(a.views,0)) AS counted 
FROM table1 a JOIN table2 b ON a.id=b.id GROUP BY id 
HAVING counted>0
Run Code Online (Sandbox Code Playgroud)

我怎么能拒绝此查询UPDATE作为

UPDATE b.number = counted
Run Code Online (Sandbox Code Playgroud)

mysql join query update group-by

4
推荐指数
1
解决办法
2万
查看次数

在测试和生产环境之间看到 2 个非常不同的 UPDATE 执行计划

对于作为存储过程一部分的 UPDATE 语句,我在测试/生产之间看到 2 个非常不同的查询计划。显然表大小不同(大约有 1000 万行差异)。基本上区别在于 Prod 我看到一组昂贵的排序,然后是索引更新(nc 索引)

而在测试中,我根本没有看到这些运算符集!只有聚集索引更新。我已经验证了 NC 索引存在等等。我不知道发生了什么?!我已经验证了索引、sp,我试过重新编译,参数的不同值等等。肯定有我遗漏的东西,我什至检查了约束,一切都匹配。

有什么想法吗?我以前从未见过这个。SQL 是否只是抓住了一个糟糕的执行计划!?

UPDATE 的结构是这样的:UPDATE [tablename] SET [column]=123 FROM ...

以下 Prod 计划中的额外运算符(减去聚集索引更新): 在此处输入图片说明

performance sql-server update query-performance

4
推荐指数
1
解决办法
294
查看次数

更新会锁定该行还是整个表?

基本问题:当我更新数据库表中的一行时,它会锁定当前行还是整个表?

我正在使用MySQL。当我更新不唯一的列时。

一种数据库引擎与另一种数据库引擎的锁定是否不同?我读过这篇文章,但我仍然很困惑。

mysql locking update

4
推荐指数
1
解决办法
1万
查看次数