2015-06-20 84 views
2

SQL中的UPDATE命令如何工作?
我有一個表有三列a,b,c,其中a是主鍵。
表中的值是(1,2,3),(2,4,5)。
假設我想更新這個元組,並將列c的值設置爲4,其中a的值爲1.
元組(1,2,3)是否被刪除,然後插入新的元組?
或值1,2保持不變3將被刪除並插入4?SQL UPDATE命令如何工作

+1

你正在使用哪些DBMS? Postgres的?甲骨文?在_how_上的實際實現是在技術上實現的,幕後是_highly_ DBMS依賴(有時甚至依賴於涉及的表的實際語句以及任何可能的索引) –

+0

對於SQL Server更新可以在位,或者刪除/插入或混合的兩個。 http://stackoverflow.com/a/14082375/73226 –

回答

0

這應該修改表條目不增加新的元組到表

UPDATE tableName 
SET c='4' 
WHERE a='1' 
+0

更新語句只覆蓋已更改的數據。數據庫服務器可能必須將您的數據記錄物理移動到新頁面,但這對您而言是透明的。 1 + 2中的數據保持不變。 – PhillipH

+0

SQL中的UPDATE命令如何工作? – HelloNewWorld

+0

是更新的值只改變其他值不受影響。 – nifCody

-1

更新table_name的 集合C = '4' 其中a = '1';

這將工作正常,沒有任何問題,它不會刪除或添加一個新的元組到您的表。

+0

鏈接到文檔以解釋您的答案,並教他們如何解決問題,而不是簡單地提供答案會更好。感謝您給出答案! – ToothlessRebel

-1

簡短的回答是,UPDATE首先查找所有匹配的行(您正在調用元組),然後修改它們。它不會刪除或添加任何行。

然而UPDATE聲明將火都 DELETEINSERT觸發,如果任何定義。因此,從某個角度來看,它看起來似乎是一個刪除和一個插入。

編輯:我的意思說的是,當一個UPDATE觸發閃光,UPDATE之前的數據都在DELETED pseudotable可用,而UPDATE後的數據出現在INSERTED pseudotable。從這個意義上說,只有UPDATE看起來有點像刪除加插入。我對上述錯誤陳述表示歉意。

+0

對我而言,這是一件愚蠢的事情。用我真正的意思編輯。 –

0

由於您沒有指定哪些數據庫特別感興趣,因此我將選擇MySQL。 (但是說大多數其他關係數據庫具有類似的實現方式並不太遙不可及。)

簡而言之,MySQL UPDATE支持單表語法和多表語法。在這兩種情況下,元組都不會被刪除,然後重新插入。編輯直接發生在由SET子句指定的列中。

就在docs的頂部,它說,

對於單表的語法,在用新值命名錶中現有行的UPDATE語句更新的列。

然後

對於多表的語法中,在每個表UPDATE更新行中滿足的條件table_references命名。即使匹配條件多次,每個匹配行也會更新一次。

沒有提及DELETE THEN RE-INSERT操作。在你的情況,是的,值1和2保持不變,而3被替換爲4.