标签: update

用一条语句更新表中的多行?

更新表中多行的最简单方法是什么?我有一个如下所示的 csv 文件:

|primary_key |value|
|          1 |  xyz|
|          2 |  abc|
|          3 |  def|
...
Run Code Online (Sandbox Code Playgroud)

目标表中已存在具有这些主键的行

我想用这些值更新目标表。是否有语法,以便我可以编写如下内容:

update mytable set value = ('xyz', 'abc', 'def') where primary key = (1,2,3);
Run Code Online (Sandbox Code Playgroud)

查看MySQL 更新参考、本站点(MySQL-csv 更新)、SO(更新多行多个数据库更新更新多行),我怀疑答案是“否”,但我想确认这一点是真的。

mysql update replace

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

将 RECORD 插入触发器函数中的表中

我想在触发器的表中插入一个 RECORD 数据类型变量(新变量)。SQL 会是什么样子?
以下尝试均未成功:

EXECUTE 'INSERT INTO my_table VALUES ' || NEW;
EXECUTE 'INSERT INTO my_table VALUES ' || NEW.*;
EXECUTE 'INSERT INTO my_table SELECT * FROM ' || NEW;
Run Code Online (Sandbox Code Playgroud)

postgresql trigger plpgsql update record

9
推荐指数
2
解决办法
6630
查看次数

How to limit rows in PostgreSQL update statement

My table employees contain more than ten million data. i want to update 10k rows in commission_pct column where commission_pct is null and set zero(0) value.

in oracle I can easily solve this by using rownum.

update employees
set commission_pct=0
where commission_pct is null and rownum<=10000;
Run Code Online (Sandbox Code Playgroud)

but postgresql does not support rownum.

how to solve this in postgresql?

postgresql update

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

Postgresql 10 没有与 ON CONFLICT 规范匹配的唯一或排除约束

我目前有一个看起来像这样的表:

CREATE TABLE "PDPC".collection
(
    col_no bigint NOT NULL DEFAULT nextval('"PDPC".collection_col_no_seq'::regclass),
    q1 character varying(10000) COLLATE pg_catalog."default",
    q2 character varying(10000) COLLATE pg_catalog."default",
    q3 character varying(10000) COLLATE pg_catalog."default",
    q4 character varying(10000) COLLATE pg_catalog."default",
    dg_fkey bigint,
    CONSTRAINT collection_pkey PRIMARY KEY (col_no),
    CONSTRAINT collection_dg_fkey_fkey FOREIGN KEY (dg_fkey)
        REFERENCES "PDPC".datagroup (dg_no) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

ALTER TABLE "PDPC".collection
    OWNER to postgres;
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 postgresql 在 PHP 中执行 UPSERT 语句,但我收到了

致命错误:未捕获的 PDOException:SQLSTATE[42P10]:无效的列引用:7 …

postgresql foreign-key insert update

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

如何从 PostgreSQL 中的 JSON[] 数组中删除已知元素?

我遇到了在 PostgreSQL 中使用 JSON 数据类型的问题。我尝试实现在数据库中存储非规范化的 Java 模型。该模型具有复杂对象列表。因此,我决定将它们建模为原生 PostgreSQL 数组中的 JSON。

这是我的表创建语句的精简片段:

CREATE TABLE test.persons
(
  id UUID,
  firstName TEXT,
  lastName TEXT,
  communicationData JSON[],
  CONSTRAINT pk_person PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

如您所见,它是一个以 JSON 格式显示通信数据对象列表的人。其中一个对象可能如下所示:

{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}
Run Code Online (Sandbox Code Playgroud)

我可以使用 PostgreSQL 的 array_append 轻松地将这样的 JSON 对象附加到数组中。但是,我无法从数组中删除已知值。考虑一下这个 SQL 语句:

UPDATE test.persons
SET communicationData = array_remove(
      communicationData, 
      '{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}'::JSON
    )
WHERE id = 'f671eb6a-d603-11e3-bf6f-07ba007d953d';
Run Code Online (Sandbox Code Playgroud)

这失败了ERROR: could not identify an equality operator for type json。您是否有提示我如何从 JSON 数组中删除已知值?也可以按数组中的位置删除,因为我知道一个也......

PostgreSQL …

postgresql update array json

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

INSERT ... ON DUPLICATE KEY UPDATE 没有按我预期的那样工作

我有一个名为“示例”的表

CREATE TABLE IF NOT EXISTS `example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` int(11) NOT NULL,
  `b` int(11) NOT NULL,
  `c` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

如果不存在,我想插入值,如果值存在则更新,所以我使用以下语句:

INSERT INTO example (a, b, c) VALUES (1,2,3) 
  ON DUPLICATE KEY UPDATE a = VALUES(a), b = VALUES(b), c = VALUES(c);
Run Code Online (Sandbox Code Playgroud)

执行上述查询后,该表如下所示:

在此处输入图片说明

再次执行上面的语句,结果如下:

在此处输入图片说明

我的陈述有什么问题?

mysql insert duplication update

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

更新大小为 5k 的行时出现 8k 行溢出错误

我正在尝试将一行大小为 5k 的目标表更新为一行大小为 5k 的目标表。

由于它是一行,因此很容易知道行的实际大小:

select *
from sys.dm_db_index_physical_stats(DB_ID('RODS_HSD_ES'), 
OBJECT_ID(N'TBL_BM_HSD_SUBJECT_AN_148_REPRO'), NULL, NULL, 'DETAILED')
Run Code Online (Sandbox Code Playgroud)

复制

表自创建以来没有改变。没有看到它应该失败的任何原因。想法?

sql-server sql-server-2012 update

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

为什么我的更新语句会更新每一行?

问题:

由于语法和回滚事务,我的最终更新语句应该出错,预期的错误应该类似于:

消息 207,级别 16,状态 1,第 45 行无效的列名称“FakeTest1”

我很好奇当允许执行引用不存在的列的子查询时,为什么 SQL Server 更新列中的每一行。

背景

我正在创建一个包含两列的临时表,FakeID并且FakeVarchar.

 SELECT  [FakeID], [FakeVarchar]
 INTO [#T]
 FROM [CTE];
Run Code Online (Sandbox Code Playgroud)

当我的UPDATE语句使用此WHERE子句在 中指定列 [ID] 时SELECT SUBQUERY,它会更新整个表,而不是在解析命令时出错。

WHERE [FakeTableDestination].[ID] IN
(
    SELECT [ID]
    FROM [#T]
);
Run Code Online (Sandbox Code Playgroud)

应该在子查询中以使其正确运行的列将是FakeID. 此语句显然有效,并且按预期更新。

WHERE [FakeTableDestination].[ID] IN
(
    SELECT [FakeID]
    FROM [#T]
);
Run Code Online (Sandbox Code Playgroud)

当我用任何其他列名替换 FakeID / ID 时,它会按预期失败。

WHERE [FakeTableDestination].[ID] IN
(
    SELECT [NotActuallyAColumnInThisTableEither]
    FROM [#T]
);
Run Code Online (Sandbox Code Playgroud)

完整的 SQL 代码,当它应该出错时更新整个表

IF OBJECT_ID('dbo.FakeTableSource', 'U') IS NOT …
Run Code Online (Sandbox Code Playgroud)

sql-server update

8
推荐指数
0
解决办法
206
查看次数

更新嵌套在 JSON 对象数组中给定键的所有值

我在 Postgres 表中有一个jsonb列。它包含以下数据:datamy_table

[
   {"id":"1","status":"test status1","updatedAt":"1571145003"},
   {"id":"2","status":"test status2","updatedAt":"1571145323"}
]
Run Code Online (Sandbox Code Playgroud)

我想updatedAt使用一个查询更新该数组中所有对象的键。我试过:

update my_table set data = data || '{"updatedAt": "1571150000"}';
Run Code Online (Sandbox Code Playgroud)

上面的查询在数组中添加了一个新对象,如下所示:

[
   {"id":"1","status":"test status1","updatedAt":"1571145003"},
   {"id":"2","status":"test status2","updatedAt":"1571145323"},
   {"updatedAt":"1571150000"}
]
Run Code Online (Sandbox Code Playgroud)

我想要的输出如下:

[
   {"id":"1","status":"test status1","updatedAt":"1571150000"},
   {"id":"2","status":"test status2","updatedAt":"1571150000"}
]
Run Code Online (Sandbox Code Playgroud)

我也尝试过jsonb_set(),但这需要第二个参数是数组索引。我无法确定数组中 JSON 对象的数量。

如果可以通过自定义函数解决这个问题,也很好。

postgresql update json postgresql-10 json-path

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

UPDATE 语句行为

我有一个关于 SQL Server 的 UPDATE 语句的内部工作原理的问题。我试图了解如果同时收到或服务以下 2 个更新语句会发生什么:

 |    Session 1 - Statement 1 | Session 2 - Statement 2
 |   -------------------------+-------------------------
 |    update dbo.Table1       |  update dbo.Table1 
 |    set Value = 10          |  set Value = 20 
 |    where ID = 1            |  where ID = 1 
 ?    and Value = 0;          |  and Value = 0;
(t)
Run Code Online (Sandbox Code Playgroud)

据我了解,更新将首先选择需要使用共享锁更新的行,这意味着两个更新语句都可以选择特定行。然后它请求一个排它锁来更新列值。因此,结果似乎将 Value 设置为 20。

我错过了什么还是我的理解正确?

连接的隔离级别设置为 READ UNCOMMITTED。

sql-server concurrency isolation-level update

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