标签: update

Oracle 10g:正确使用 ora_rowscn 检测表行更改(即插入、更新、删除)

对检查表的记录上次更新、修改或删除时间的一些研究使我找到了称为 ora_rowscn 的伪列。

首先,我这样做:

select max(ora_rowscn) from tablename;

我记下了这个数字。然后我执行插入、更新和删除,检查每个之前和之后的最大值。它似乎随着每种类型的变化而增加。

如果您想知道我为什么要这样做,我们会在 C# windows 服务中缓存实体列表。此服务在两个负载平衡的服务器上运行,因此每个服务器都有一个单独的实例运行。当服务器 A 上发生更新时,服务器 B 需要知道它。我想要做的是将 max(ora_rowscn) 缓存到一个变量中。每次我们的应用程序插入、更新或删除一条记录时,它都会从数据库中获得一个新的最大值。如果值不同,那么它显然知道它需要从数据库中获取一个新列表。

所以我的实际问题是:是否还有其他我应该注意的问题可能会导致插入、更新或删除记录而不增加该值?

编辑:有人可以添加ora_rowscn为标签吗?

delete oracle-10g insert update

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

在大表上更新排名

我有一个现在有 1200 万条记录的 mysql 表,我正在尝试使用以下 UPDATE 代码更新列(排名):

SET @r=0;
UPDATE records SET rank= @r:= (@r+1) where type = 2 ORDER BY seconds DESC;
Run Code Online (Sandbox Code Playgroud)

几乎每分钟都会插入新行。所以,一小时后,我有几行没有排名,我需要再次更新整个表格。

然而,这需要太多时间。有什么优化方法或不同的方法来更快地更新表吗?也许是一种不同的方法?分区表?

mysql update

6
推荐指数
1
解决办法
3687
查看次数

使用由现有值中的字符组成的新字符串更新字段

字段是meta_value,当前值就像01/01/2006

我想把它改成一个字符串,20060101所以我想我可以得到这个值并按正确的顺序用字符更新它。

IE

UPDATE wp_postmeta SET meta_value = meta_value[9]meta_value[8]meta_value[7]meta_value[6] 
Run Code Online (Sandbox Code Playgroud)

mysql update

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

在根据一列对该表进行排序的同时更新另一个表中的一个表

这是我试图在 MySQL 中找出的问题。我们有一个旧表,其中包含我们用户提交的一些表单。不知何故,之前的决定是每次用户参与此调查时,都会提交一个新表单。因此,在旧表中,我们很容易有几行具有相同的名字和姓氏,但其他列中的值不同,并且还有一个时间戳列 Date_Submission。

现在我们正在尝试将所有内容移动到一个新表中,但这一次,对于每个人,我们只保留一行。我们希望保留该用户的一些最新旧数据(如电子邮件、电话号码等)

我可以执行以下操作:

update newtable, oldtable set newtable.email = oldtable.email where newtable.firstname = oldtable.firstname and newtable.lastname = oldtable.lastname;

显然,这不会给我每个人的“最新”旧日期。

所以我尝试了这个:

update newtable, oldtable set newtable.email = oldtable.email where newtable.firstname = oldtable.firstname and newtable.lastname = oldtable.lastname 按 oldtable.Date_Submission 顺序;

但是他们 MySQL 会抱怨:

“错误 1221 (HY000):UPDATE 和 ORDER BY 的错误使用”。

所以我想知道,实现这一目标的正确方法是什么?

mysql order-by update

6
推荐指数
1
解决办法
5898
查看次数

此更新,选择组合查询线程安全吗?

我有一张桌子叫做座位,它有这样的架构

身份证号

对于每个用户,我取一个随机未使用的 id 并分配给该用户,这里为简单起见,我使已使用 =1。我正在使用的查询

   update seats u inner join  (
        SELECT id from seats  
        where taken is null limit 1) s 
   on s.id = u.id set taken = 1;
Run Code Online (Sandbox Code Playgroud)

此查询随机获取一个带有标记为空的席位,对于该席位,它使标志为 1。虽然此查询工作正常,但此线程安全吗?

考虑这种情况,我有两个并行的用户。对于 user1,我选择第 X 行,就在运行更新查询之前,user2 签入,对于该用户,select 查询返回与 user1 相同的行。所以我将结束两次更新同一行。

此查询是否可能出现这种情况?

mysql locking update

6
推荐指数
1
解决办法
1852
查看次数

更新多个连接表的视图

由于 MSDN 没有说太多,如果我执行以下查询会发生什么?

update claims set status='Awaiting Auth.'
where status = 'Approved' 
Run Code Online (Sandbox Code Playgroud)

我可以使用ClaimStatusName链接表的列dimClaimStatus来更新通过外键引用的主表吗?

视图本身查询多个表,主表是tabData,我也想用上面的查询更新。我想改变fiClaimStatustabData从FK该手段 Approved在引用表dimClaimStatusAwaiting Auth.。它是这样工作的吗?

tabData 中的每一行只能有一个视图行。

这是视图:

CREATE VIEW [dbo].[Claims] 
AS 
  SELECT mu.MarketUnitName AS MarketUnit, 
         c.CountryName     AS Country, 
         gsp.GSPName       AS GSP, 
         gsp.WCMSKeyNumber AS GspNumber, 
         sl.SLName         AS SL, 
         sl.WCMSKeyNumber  AS SlNumber, 
         m.ModelName       AS Model, 
         m.SalesName       AS [Model-Salesname], 
         s.ClaimStatusName AS [Status], 
         d.Work_Order      AS [Work Order], 
         d.SSN_Number      AS IMEI, 
         .... more columns ....
         idData,         -- …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server t-sql view update

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

哪个更快?游标循环中的多个更新查询,还是单个查询?

哪个更快?游标循环中的多个更新查询,还是单个查询?例如,在这种情况下,哪个更快?此查询在触发器中。

  1. 循环中的多个查询

    DECLARE done INT DEFAULT FALSE;
    DECLARE record_id INT;
    DECLARE cur CURSOR FOR SELECT id FROM table1 WHERE column = 0;
    
    OPEN cur;
    
      users_loop: LOOP
    
         FETCH cur INTO id;
    
         IF done THEN
             LEAVE users_loop;
         END IF;
    
         UPDATE table2 SET column = 0 WHERE id = id;
    
      END LOOP;
    
    CLOSE cur;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 单一查询

     CREATE TEMPORARY TABLE tmp_table (id int(10));
    
     INSERT INTO tmp_table SELECT id FROM table1 WHERE column = 0;
    
     UPDATE table2 SET column = 0 WHERE id IN(SELECT id FROM …
    Run Code Online (Sandbox Code Playgroud)

mysql performance optimization update query-performance

6
推荐指数
1
解决办法
9114
查看次数

UPDATE 只有一行(使用更新和连接)

我正在尝试获得一个快速、简单的 sql 查询,以便在使用 join 时一次只更新一行。

我试过了LIMIT,但没有成功。

询问:

UPDATE
table1
JOIN
table2 ON table2.col=table1.col
SET 
table1.row1='a value'
WHERE
table1.row2 LIKE '%something%' 
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

信息:

错误代码:1221. UPDATE 和 LIMIT 的错误用法

mysql join update limits

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

有没有办法确定事务修改了多少行(在事务结束之前)?

我有一个约 3.2 亿的行表,我在上面运行以下查询:

UPDATE my_table SET state = TRIM(state)
Run Code Online (Sandbox Code Playgroud)

不用说,这已经运行了 90 多个小时(从星期四下午开始)并且还没有完成。

我想或多或少地知道它到目前为止修改了多少行。有没有办法从正在运行的事务中获取这些信息?

尝试搜索时,我发现如何使用该函数粗略估计将有多少行添加到表中pgstattuple

select dead_tuple_count from pgstattuple('my_table');
Run Code Online (Sandbox Code Playgroud)

但这似乎没有显示关于修改了多少行的任何有趣信息。

postgresql monitoring update

6
推荐指数
1
解决办法
1487
查看次数

用于仅更新 UPSERT 中更改的行的语法简写

我有一个查询,当一个键冲突时,只有在其他列之一发生更改时才会向上插入 Postgres(以避免不必要的插入和返回的行,但实际上没有任何更改):

INSERT INTO public.test_upsert (some_id, a, b, note) 
VALUES 
  ('c', 1, true, 'asdf')
ON CONFLICT (some_id)
DO UPDATE SET 
  a = excluded.a, 
  b = excluded.b, 
  note = excluded.note 
WHERE
  test_upsert.a IS DISTINCT FROM excluded.a OR 
  test_upsert.b IS DISTINCT FROM excluded.b OR
  test_upsert.note IS DISTINCT FROM excluded.note
RETURNING *;
Run Code Online (Sandbox Code Playgroud)

我的问题是:这个有简写吗?我基本上想在插入的任何列与现有列不同时插入新记录更新行。单独写出每一列会变得非常冗长,尽管它更明确。

postgresql syntax update upsert

6
推荐指数
1
解决办法
580
查看次数