Update

更新函式以每行輸入隨機/唯一 GUID

  • February 27, 2016

我是 SQL 新手,正在嘗試執行以下操作。

我正在使用 SQLite 瀏覽器來編輯我擁有的目前文件

我確實有一個 SQLite 數據庫,其中包含大約 1500 行數據,我想為其創建 GUID。

我使用名稱創建了 Col,GUID預設值為NULL.

我的更新腳本如下所示:

UPDATE "main"."MyLab" SET guid = (select hex( randomblob(4)) || '-' || hex( randomblob(2))
            || '-' || '4' || substr( hex( randomblob(2)), 2) || '-'
            || substr('AB89', 1 + (abs(random()) % 4) , 1)  ||
            substr(hex(randomblob(2)), 2) || '-' || hex(randomblob(6)) )

這為所有 1,500 行提供了相同的值。我想要每一行的唯一值。

只需在表格中添加另一列並標記 AI 複選框。(AI=自動增量)。這將使其自動成為 PK(主鍵)。

它將自動在每一行中使用不同的數字填充列。

現在,如果您想創建另一種類型的鍵,請在更新中使用此 GUID 欄位作為計算的一部分,以便它在每一行中變化。

為什麼更新不起作用?

您的更新不起作用的原因是 b/c 它將所有值設置為相同,因為您沒有更新條件。

例如:

Update 
   MyTable
set GUID=1
where
  AnotherColumn=1

在您的更新中,您沒有條件,因此所有行值都將更新相同。

例如:

Update MyTable
set GUID=1+1

換句話說,更新我的表並將 GUID 列設置為 2。

這將與具有以下更新相同

Update MyTable
set GUID=1+1
where 
   1=1

WHERE 子句過濾它將更新哪些行。

因此,總而言之,如果要創建 GUID,則每行的公式中都需要一個變體。

Update MyTable
set GUID=1+UniqueValuePerRow

由於更新不會幫助您實現您想要的,您可能需要創建一個 while 循環來一次更新 1 行或了解游標。

…或者簡單地添加一個自動增量欄位,如下圖所示。

乾杯!

只需將 GUID 欄位添加為 AI 。 [1]

子查詢不依賴MyLab表中的任何值,因此只需要評估一次。

但是,此計算不需要是子查詢​​。只需刪除括號和 SELECT:

UPDATE MyLab SET guid = hex(...)...

引用自:https://dba.stackexchange.com/questions/130595