您的查詢不包含where子句,因此,每一行都將被更新。大多數關係型引擎通過維護舊的和新的值來工作(更多關於這個概念的調查觸發器)。您創建的查詢是將存儲在一列中的舊值分配給另一列中的新值。
create table test (col1 int, col2 int, col3 int, col4 int, col5 int, col6 int);
insert into test values (1,2,3,4,5,6), (10,20,30,40,50,60);
commit;
select * from test;
+------+------+------+------+------+------+
| col1 | col2 | col3 | col4 | col5 | col6 |
------+------+------+------+------+------+
| 1 | 2 | 3 | 4 | 5 | 6 |
| 10 | 20 | 30 | 40 | 50 | 60 |
+------+------+------+------+------+------+
2 rows in set (0.00 sec)
update test
set Col6=Col5
, Col5=Col4
, Col4=Col3
, Col3=Col2
, Col2=Col1;
commit;
select * from test;
+------+------+------+------+------+------+
| col1 | col2 | col3 | col4 | col5 | col6 |
+------+------+------+------+------+------+
| 1 | 1 | 2 | 3 | 4 | 5 |
| 10 | 10 | 20 | 30 | 40 | 50 |
+------+------+------+------+------+------+
2 rows in set (0.00 sec)
如上所示,col6包含5中的內容,5中的內容等等。 Col1保留原來的值,因爲它沒有被重新定義。
那麼如果我們試圖引用更改的值會發生什麼?
update test
set Col1=Col2
, Col2=Col3
, Col3=Col4
, Col4=Col5
, Col5=Col6;
commit;
select * from test;
+------+------+------+------+------+------+
| col1 | col2 | col3 | col4 | col5 | col6 |
+------+------+------+------+------+------+
| 1 | 2 | 3 | 4 | 5 | 5 |
| 10 | 20 | 30 | 40 | 50 | 50 |
+------+------+------+------+------+------+
2 rows in set (0.00 sec)
正如您所見,MySQL按照預期將相應的值分配到列中。由於未定義新值,Col6未更新。
該文件說單表更新將按順序,但多表更新可能不會。所以,如果我的更新是象下面這樣: 更新T1 集t1.Col6 = t1.Col5 ,t1.Col5 = t1.Col4 ,t1.Col4 = t1.Col3 ,t1.Col3 = t1.Col2 ,T1 .Col2 = t1.Col1 ,t1.Col1 = t2.Col0 from [table1] t1 join table2 t2 on t2.id = t1.id 這會被認爲是單表更新還是多重? (我假設它是單身) – Abhishek
@Abhishek。 。 。這將是單表語法。但我必須強調,該語法是SQL Server語法,而不是MySQL語法。如果你誤解了這個問題,我會建議你問另外一個問題,清楚地說明你正在使用的實際數據庫。 (這個問題有4個答案,所有這些答案都基於MySQL;更改數據庫會使這些答案失效。) –