标签: update

MySQL 插入 NULL 插入 0

我正在使用 MySQL 和 PhpMyAdmin,我有一个名为的表items- 结构如下;

+------+---------+------+---------+
| name | type    | Null | Default |
+------+---------+------+---------+
| id   | int(11) | No   | None    |
+------+---------+------+---------+
| year | int(4)  | Yes  | Null    |
+------+---------+------+---------+
Run Code Online (Sandbox Code Playgroud)

在 PhpMyAdmin 中,我运行以下查询;

UPDATE `item` SET `item_publication_year` = '' WHERE `item_id` = '5'
Run Code Online (Sandbox Code Playgroud)

这将成功执行。

然后我运行这个查询;

SELECT * FROM `item` WHERE `item_id` = '5'
Run Code Online (Sandbox Code Playgroud)

这将成功执行并产生以下结果;

+-----+------+
| id  | year |
+-----+------+
| 5   | 0    |
+-----+------+
Run Code Online (Sandbox Code Playgroud)

为什么是这个year领域0——不应该是 …

mysql null select update

0
推荐指数
1
解决办法
1141
查看次数

使用哈希流不同运算符进行查询调整更新

需要一些帮助来理解UPDATE以下语句之一的缓慢:-

UPDATE TOP (100) xyz
SET xyz.flag = 1
OUTPUT inserted.Rcode, inserted.EDR, inserted.id, abc.EID,abc.CID,abc.ENID,abc.Cdate
FROM dbo.table1 xyz WITH (UPDLOCK, READPAST)
INNER JOIN dbo.table2 abc WITH (NOLOCK)
on xyz.id=abc.id
WHERE xyz.flag = 0
Run Code Online (Sandbox Code Playgroud)

表1有大约。50 万行,表 2 大约有。500 万行

慢计划

哈希匹配不同流运算符显示黄色警报,消息为:

操作员使用 Tempdb 溢出数据,以溢出级别 4 和 1 个溢出线程执行”

构建残差:

database.dbo.table2.id as abc.id = database.dbo.table2.id as abc.id

我截了屏。不幸的是,由于安全原因,我不能提供更多,甚至不能提供匿名计划。从我的工作站我无法访问互联网,所以我无法让计划浏览器在那里运行。

在此处输入图片说明

通常,对于较小的行子集,它在几秒钟内,就像我们刚刚匹配 10K 行或其他东西一样。但是随着数据量的增加,这似乎是一个临界点,应用程序无法承受 1 分钟的运行时间。从 SSMS 我得到 30 秒,但从应用程序我们有平均。约 50 秒 RCSI 处于测试阶段。

我的好计划没有显示 Hash Match Flow Distinct 运算符,如我的屏幕截图所示,而其余计划保持不变。好的一个在 3 秒左右完成。正如所见,该操作员花费了近 16 秒。我们可以通过适当的索引或查询重写来消除它吗? …

sql-server execution-plan update sql-server-2014 query-performance

0
推荐指数
1
解决办法
162
查看次数

SQL Server 究竟如何执行 UPDATE 语句?

下面的两个会话尝试更新同一行的场景由 Paul White 提供。

场景一:

  1. 会话 1U在读取时获取基表行的锁。
  2. 会话 2 阻塞,等待获取U基表中的同一行。
  3. 会话 1 将值设置为 10 并提交。
  4. 会话 2 获取了它的U锁并且发现没有什么可做的,因为现在 Value != 0。

结果:值设置为 10。

根据 Paul 的说法,会话 2 已经找到了需要更新的行,但它被阻止了。当阻塞消失并且会话 2 获得 U 锁时,它需要再次检查条件吗?我理解正确吗?对我来说这有点奇怪。会话找到了这一行,这是因为它评估了导致识别该行的过滤器。为什么在实际更新之前需要再次检查条件?

sql-server update

0
推荐指数
1
解决办法
80
查看次数

如何使用具有 10 个以上条件的 CASE 语句更新列

我正在尝试使用 CASE 语句更新 SQL Server 2016 中的列,因为我必须根据不同的条件更改值。问题是我有超过 10 个条件,而且 SQL Server 似乎最多只允许 10 个条件级别。那么我该怎么做呢?这是我试图做的:

UPDATE my_table  
SET my_column = CASE 
    WHEN condition1 THEN expression1  
    WHEN condition2 THEN expression2  ...
Run Code Online (Sandbox Code Playgroud)

不是链接服务器,我还没有尝试在CASE表达式中放入 11 个条件。如果您查看文档,您会发现“SQL Server 仅允许在CASE表达式中进行 10 级嵌套”。

sql-server case update sql-server-2016

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

在更新语句中使用 SUM()

我以为我已经确定了这个语法,但是当我尝试执行时,我收到了 Incorrect syntax near ) 的错误。为什么我的语法不正确?

    ;with CTE As
    (
         Select max(entryID) As "MaxEntryID"
         ,userID FROM loghist group by userID
    )
    Select es.userID As userID, cm.companyName, SUM(COALESCE(eq.TotalValue,0)) As TotalValue
    FROM CTE vn
    Inner Join loghist es
    ON vn.userID=es.userID
    AND Coalesce(vn."MaxEntryID",0)=COALESCE(es.entryID,0)
    INNER JOIN company cm
    ON es.customerid = cm.customerid    
    Inner Join loghistpart ep
    ON ep.loghist = es.loghistid
    Inner Join lhq eq
    On eq.loghistpartid = ep.loghistpartid
    GROUP BY es.userID, cm.companyName
)
UPDATE fvi
Set TotalValue = loghistdTotalValue
FROM FullVarianceInfo fvi
INNER JOIN …
Run Code Online (Sandbox Code Playgroud)

sql-server cte t-sql sql-server-2008-r2 update

-1
推荐指数
1
解决办法
1080
查看次数

postgres 存储过程中的 UPSERT

Postgres 已经有一种方法可以执行“upsert”,但我不喜欢发送这些长查询,我想知道它是否可以实现为一个存储过程,它将接受 json 并执行

INSERT INTO ... (keys)
  VALUES (values)
  ON CONFLICT DO UPDATE SET (setEverythingFromExcluded)
Run Code Online (Sandbox Code Playgroud)

我知道我可以以某种方式使用json_object_keysandjson_extract_path或直接使用json_each,但我最初的尝试毫无结果,所以也许有人已经这样做了?

postgresql insert update upsert

-1
推荐指数
1
解决办法
1329
查看次数

如何以高性能且准确的方式增加主表列中的值与详细信息表中的记录数?

我使用的是 SQL Server 2008 及以上版本。

我有以下两个表:

MasterTable
MId
DetailsCount DEFAULT 0

DetailsTable
DId
MId
Run Code Online (Sandbox Code Playgroud)

在 中,我将匹配的MasterTable.DetailsCount记录数存储在 中。DetailsTableMId

首先将记录插入到主表中,然后将给定 MId 的数千条记录插入到详细信息表中。这发生在多个线程上。每个线程都有自己的SqlConnection.
详细信息表中的总记录数为数百万,并且还在不断增加。

DetailsTable.MId列上添加非聚集索引。无法添加聚集索引。

我尝试过两种维护DetailsCount专栏的方法:

  1. 扫描详细信息表以获取计数
    插入详细信息表后,更新DetailsCount使用查询:
UPDATE MasterTable
SET DetailsCount = (SELECT COUNT(*) FROM DetailsTable WHERE MId = ?)
WHERE MId = ?
Run Code Online (Sandbox Code Playgroud)

由于详细信息表中有数百万条记录,这种方法的性能不高,因为每次在其中添加新记录时我都需要扫描详细信息表(以获取计数)。即使使用非聚集索引,它的性能也不佳。如果我们简单地评论该列的更新,我们会看到性能的显着提高。

  1. 主表中的增量计数
    在详细信息表中插入后,更新DetailsCountusing 查询:
UPDATE MasterTable
SET DetailsCount = DetailsCount + 1
WHERE MId = ?
Run Code Online (Sandbox Code Playgroud)

这种方式更好,因为我不需要访问详细信息表。
但是,详细信息表中的插入发生在多个线程上。每个线程使用不同的SqlConnection实例。
这就是为什么DetailsCount经常会更新错误的值。

我查看了 …

sql-server-2008 sql-server count update query-performance

-1
推荐指数
1
解决办法
801
查看次数

无法更新或插入数据到日期时间字段

我试图通过我正在开发的一个 Web 应用程序插入数据,但无法插入数据,在解决问题时,我发现即使直接通过 Microsoft SQL Server Management Studio 也无法编辑日期时间字段。

我正在尝试更新 SQL Server 2014 中的日期时间字段,但我收到了这个奇怪的错误

尝试更新日期时间字段时出错

我试图使第一行与第二行相同,但出现上述错误:

我如何尝试编辑数据

我有完全权限用户,我还可以编辑除日期时间类型列之外的所有其他列!

在这方面的任何帮助将更受欢迎。

这是列定义:

在此处输入图片说明

sql-server insert ssms update datetime

-2
推荐指数
1
解决办法
548
查看次数

通过连接 2 个 int 列来更新字符串字段

我有 2 列 anint和 a tiny int,我想varchar用值更新另一列 a one column1 + '-' + column2。像这样的伪代码:

UPDATE COLUMN3 varchar = CONCAT (COLUMN1 INT AND + COLUMN2 TINYINT);
Run Code Online (Sandbox Code Playgroud)

我怎样才能用真正的代码做到这一点?

sql-server sql-server-2012 update concat

-2
推荐指数
1
解决办法
7501
查看次数