标签: update

将 hstore 条目添加到未初始化 (NULL) 列

我最近被这个“功能”咬了。

如果您的hstore列未初始化并且您开始向其中添加条目,则它们都会被无声地吞下而不会出错。

这是预期的吗?

 create table test_hstore(id int, map hstore);
 insert into test_hstore(id,map) values(0, '');
 INSERT 0 1

 select * from test_hstore ;
  id | map 
 ----+-----
   0 | 


 update test_hstore set map = map || hstore('key1', 'value1') where id = 0;
 UPDATE 1

 select * from test_hstore;
  id |       map        
 ----+------------------
   0 | "key1"=>"value1"


 update test_hstore set map = null where id = 0;
 UPDATE 1

 select * from test_hstore;
  id |  map   
 ----+--------
   0 | (null)


 update …
Run Code Online (Sandbox Code Playgroud)

postgresql null update hstore

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

Mongodb 更新条件集合运算符($set 仅在插入时)

Mongo 更新中是否有任何内容,其中 $set when 仅在插入完成时才起作用。

例如,我有一个包含以下字段的集合:

  1. 用户名
  2. 第一次出现
  3. 数数

我想要的是我将运行这样的更新操作。

coll.update{ q: {username} ,u: {$set:{FirstOccurrence},$inc:count} }
Run Code Online (Sandbox Code Playgroud)

但条件是如果 UserName 已经存在,那么它不会运行 $set 它只会增加计数。

是否可以这样做我正在使用 Java 驱动程序 2.13.0 运行 Mongo 2.6.4

问候维伦

mongodb update

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

使用主键时出现 MySQL 1175 错误

什么会导致以以下开头的错误 1175:You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column...。我的问题是我确实包含了一个WHERE带有键列的子句:WHERE a.a_id = b.b_id

a_id并且b_id是各自表中唯一的键列。

START TRANSACTION;
    UPDATE table_a a, table_b b
    SET a.update_me = b.update_from_me
WHERE a.a_id = b.b_id;
SELECT * FROM a;
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

primary-key update errors mysql-5.6

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

将 SELECT DISTINCT 更改为 UPDATE DISTINCT

如何将SELECT DISTINCT查询修改为UPDATE DISTINCT查询?

重要的是它只更新不同的记录,因为有多个记录与每个 [Finance_Project_Number] 相关联(由于 CRUD 操作)。我只想更新一条记录,因为这只会启动验证数据等的不同过程。

如果由于 DISTINCT 导致多条记录折叠为一行,则可以更新其中任何一条记录 - 没关系。

当我运行我的选择查询时,我得到的结果是:6 982:

SELECT DISTINCT
    [Finance_Project_Number]
FROM [InterfaceInfor].[dbo].[ProjectMaster]
WHERE 
    NOT EXISTS 
    (
        SELECT *
        FROM [IMS].[dbo].[THEOPTION]  
        WHERE 
            [InterfaceInfor].[dbo].[ProjectMaster].[Finance_Project_Number] =
            [IMS].[dbo].[THEOPTION].[NAME]
    );
Run Code Online (Sandbox Code Playgroud)

这是我将查询转换为查询的尝试DISTINCT UPDATE,但这会更新 15 353 条记录:

UPDATE [InterfaceInfor].[dbo].[ProjectMaster]
SET 
    [Processing_Result_Text] = 'UNIQUE',
    [Processing_Result] = 0
WHERE 
    NOT EXISTS 
    (
        SELECT *
        FROM [IMS].[dbo].[THEOPTION]  
        WHERE 
            [InterfaceInfor].[dbo].[ProjectMaster].[Finance_Project_Number] =
            [IMS].[dbo].[THEOPTION].[NAME]
    );
Run Code Online (Sandbox Code Playgroud)

sql-server update distinct

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

这个语句是如何在 Postgres 中更新 3 行的?

我很好奇这个语句是如何在 Postgres 中更新 3 行的。在我运行它的所有其他时间,它会更新 0 或 1。有没有办法找出哪些行?

bestsales=# update keyword set revenue = random()*10 where id = cast(random()*99999 as int);
UPDATE 3
Run Code Online (Sandbox Code Playgroud)

id 是主键。

 id               | integer                        | not null default nextval('keyword_id_seq'::regclass)
    "keyword_pkey" PRIMARY KEY, btree (id)
Run Code Online (Sandbox Code Playgroud)

我尝试将其运行为SELECT

bestsales=# select * from keyword where id = cast(random()*99999 as int);
  id   |       keyword       | seed_id | source | search_count | country | language | volume | cpc  | competition | modified_on | google_violation | revenue | bing_violation
-------+---------------------+---------+--------+--------------+---------+----------+--------+------+-------------+-------------+------------------+---------+---------------- …
Run Code Online (Sandbox Code Playgroud)

postgresql random update

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

mysql 更新查询错误代码 1054 字段列表中的未知列

Error: Code 1054. Unknown column 'U2.id_naslov' in 'field list' 在 MySQL Workbench 中抛出这个简单的查询:

UPDATE krneki_1 AS U1, krneki_2 AS U2 
SET U1.id_naslov = U2.id_naslov
WHERE (U2.id_zaposlen = U1.id_naslovi_zaposleni)
Run Code Online (Sandbox Code Playgroud)

我在网上搜索并阅读了其他帖子,但没有任何帮助...

我想这是一个微不足道的解决方案,但我看不到它。

这种错误从未出现在 TSQL (sql server) 上。

表 krneki_2 是由 Mysql 工作台通过数据导入(创建新表)稍后在发生此错误时创建的,我还将数字字段更改为 smallint 只是为了看看它是否有帮助......但是......没有。

结果SHOW CREATE TABLE krneki_2

       Table: krneki_2 
Create Table: CREATE TABLE `krneki_2` 
( `id` smallint(6) NOT NULL AUTO_INCREMENT, 
  `id_naslov` smallint(6) NOT NULL, 
  `id_zaposlen` smallint(6) NOT NULL, 
  PRIMARY KEY (id) 
) ENGINE=InnoDB AUTO_INCREMENT=204 DEFAULT CHARSET=utf8 

1 row in …
Run Code Online (Sandbox Code Playgroud)

mysql update errors

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

如何在 SQL Server 中执行 UPSERT,返回预先更新的值?

所有语法都是有效的 PostgreSQL 作为 UPSERT 的示例,它返回字段的旧值和新值。比方说,我有一个表foo(1,A)...(5,E)

CREATE TEMP TABLE foo
AS
  SELECT id, chr(id+64)
  FROM generate_series(1,5) AS t(id);
CREATE UNIQUE INDEX ON foo(id);

 id | chr 
----+-----
 1  | A
 2  | B
 3  | C
 4  | D
 5  | E
(5 rows)
Run Code Online (Sandbox Code Playgroud)

现在,假设我想要 UPSERT 6 行。一些碰撞,一些新的行。

SELECT id, chr(id+74)
FROM generate_series(3,8) AS t(id);
 id | chr 
----+-----
  3 | M
  4 | N
  5 | O
  6 | P
  7 | Q
  8 | R …
Run Code Online (Sandbox Code Playgroud)

sql-server insert update upsert

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

INSERT/UPDATE 存储过程本身死锁

我有一个表 (Database2.dbo.OrganizerDataDependencyChange),其中包含有关某些其他表中的行上次更改时间的信息。在这些表中的每一个上,我都有一个触发器,它调用一个存储过程 (Database2.dbo.SaveOrganizerDataDependencyChange),该过程简单地用触发器触发的时间更新 Database2.dbo.OrganizerDataDependencyChange。这些触发器是从 Database1 或 Database2 触发的,因此它们通常是跨数据库调用。

当更新表上的两个不同行时,我在 Database1.dbo.OrganizerDataDependencyChange 表上遇到读写死锁,我不明白为什么。表上只有一个索引,而且它是完全覆盖查询的聚集索引,因此不可能出现查找死锁,尽管 proc 中有两条语句,但我特地将其重写为我所理解的最佳方法避免并发问题,使用 WHERE NOT EXISTS 而不是使用 IF/ELSE 逻辑,所以它不应该从不同的角度出现在这个索引上,对吗?由于它是在触发器和跨数据库中触发的,因此我在重现该问题时遇到了一些困难,我当然可以重现阻塞,但这应该没问题,这正是我所期望的。

有人可以帮助我了解这里发生了什么吗?我可能可以使用 NOLOCK 提示或 applock 修复它,但我仍然不明白为什么会发生这种情况。

这是表:

CREATE TABLE [dbo].[OrganizerDataDependencyChange](
[TableID] [INT] NOT NULL,
[Database] [VARCHAR](150) NOT NULL,
[Updated] [DATETIME] NULL
)
CREATE CLUSTERED INDEX [CX_OrganizerDataDependencyChange_TableID_DB] ON [dbo].[OrganizerDataDependencyChange]
(
[TableID] ASC,
[Database] ASC
)
Run Code Online (Sandbox Code Playgroud)

这是存储过程:

CREATE PROCEDURE [dbo].[SaveOrganizerDataDependencyChange]
(
@TableID int,
@Database varchar(150)
)
AS
BEGIN

SET NOCOUNT ON;

    DECLARE @rowcount INT;

INSERT INTO dbo.OrganizerDataDependencyChange
        ( TableID, [Database], Updated )
SELECT TOP …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock insert update sql-server-2014

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

三更新查询 vs 单更新查询性能

正在尝试优化程序。过程中有 3 个不同的更新查询。

update #ResultSet
set MajorSector = case 
        when charindex('  ', Sector) > 2 then rtrim(ltrim(substring(Sector, 0, charindex('  ', Sector)))) 
            else ltrim(rtrim(sector)) 
        end

update #ResultSet
set MajorSector = substring(MajorSector, 5, len(MajorSector)-4)
where left(MajorSector,4) in ('(00)','(01)','(02)','(03)','(04)','(05)','(06)','(07)','(08)','(09)')

update #ResultSet
set MajorSector = substring(MajorSector, 4, len(MajorSector)-3)
where left(MajorSector,3) in ('(A)','(B)','(C)','(D)','(E)','(F)','(G)','(H)','(I)','(J)','(K)','(L)','(M)','(N)','(O)','(P)','(Q)','(R)','(S)','(T)','(U)','(V)','(W)','(X)','(Y)','(Z)')
Run Code Online (Sandbox Code Playgroud)

要完成所有三个更新查询,只需不到10 秒

所有三个更新查询的执行计划。

https://www.brentozar.com/pastetheplan/?id=r11BLfq7b

我的计划是将三个不同的更新查询变成一个更新查询,这样可以减少I/O。

;WITH ResultSet
     AS (SELECT CASE
                  WHEN LEFT(temp_MajorSector, 4) IN ( '(00)', '(01)', '(02)', '(03)', '(04)', '(05)', '(06)', '(07)', '(08)', '(09)' ) 
                      THEN Substring(temp_MajorSector, 5, Len(temp_MajorSector) …
Run Code Online (Sandbox Code Playgroud)

performance sql-server update query-performance

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

SQL更新目标表中具有相同ID但来自源表的不同值的多行

我有两个不同的表,其中有一个名为 id 的公共列:

Table1
----  -------
id  |  Date
----  -------
1      null
1      null
2      null
2      null
2      null
2      null
3      null
4      null
4      null

Table2
----  -------
id  |  Date
----  -------
1      2013-01-29 08:50:00.000
1      2013-01-29 15:28:00.000
2      2013-01-31 11:56:00.000
2      2013-03-11 16:08:00.000
2      2013-01-31 14:04:00.000
2      2013-01-31 14:08:00.000
3      2013-02-28 23:44:00.000
4      2013-01-31 14:04:00.000
4      2013-01-31 14:08:00.000
Run Code Online (Sandbox Code Playgroud)

我需要写一个更新语句,将主要从把值的第一行与ID = 1Table2Table1一个id = 1,第二行与ID = 1,从Table2进入Table1一个id = …

sql-server sql-server-2008-r2 update

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