程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 履行一條sql語句update多筆記錄完成思緒

履行一條sql語句update多筆記錄完成思緒

編輯:MSSQL

履行一條sql語句update多筆記錄完成思緒。本站提示廣大學習愛好者:(履行一條sql語句update多筆記錄完成思緒)文章只能為提供參考,不一定能成為您想要的結果。以下是履行一條sql語句update多筆記錄完成思緒正文


平日情形下,我們會應用以下SQL語句來更新字段值:

UPDATE mytable SET myfield='value' WHERE other_field='other_value';

然則,假如你想更新多行數據,而且每行記載的各字段值都是各紛歧樣,你會怎樣辦呢?舉個例子,我的博客有三個分類目次(收費資本、教程指南、櫥窗展現),這些分類目次的信息存儲在數據庫表categories中,而且設置了顯示次序字段 display_order,每一個分類占一行記載。假如我想從新編排這些分類目次的次序,例如改成(教程指南、櫥窗展現、收費資本),這時候就須要更新categories表響應行的display_order字段,這就觸及到更新多行記載的成績了,剛開端你能夠會想到應用輪回履行多條UPDATE語句的方法,就像以下的php法式示例:

foreach ($display_order as $id => $ordinal) {
$sql="UPDATE categories SET display_order = $ordinal WHERE id = $id";
mysql_query($sql);
}

這類辦法並沒有甚麼任何毛病,而且代碼簡略易懂,然則在輪回語句中履行了不止一次SQL查詢,在做體系優化的時刻,我們老是想盡量的削減數據庫查詢的次數,以削減資本占用,同時可以進步體系速度。
榮幸的是,還有更好的處理計劃,上面羅列兩種經常使用的計劃只不外SQL語句略微龐雜點,然則只需履行一次查詢便可,語法以下:

•第一種:IF--THEN語句聯合

UPDATE mytable
SET myfield = CASE other_field
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3)

回到我們適才的分類目次的例子,我們可使用以下SQL語句:

UPDATE categories
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
WHEN 2 THEN 'New Title 2'
WHEN 3 THEN 'New Title 3'
END
WHERE id IN (1,2,3)

以上計劃年夜年夜削減了數據庫的查詢操作次數,年夜年夜勤儉了體系資本,然則該如何與我們的編程說話聯合起來呢?我們照樣用適才分類目次的例子,以下是php的法式示例:

$display_order = array(
1 => 4,
2 => 1,
3 => 2,
4 => 3,
5 => 9,
6 => 5,
7 => 8,
8 => 9
);
$ids = implode(',', array_keys($display_order));
$sql = "UPDATE categories SET display_order = CASE id ";
foreach ($display_order as $id => $ordinal) {
$sql .= sprintf("WHEN %d THEN %d ", $id, $ordinal); // 拼接SQL語句
}
$sql .= "END WHERE id IN ($ids)";
echo $sql;
mysql_query($sql);

在這個例子中總共更新了8行數據,然則只履行了一次數據庫查詢,比擬於輪回履行8次UPDATE語句,以上例子所勤儉的時光可以說是眇乎小哉的。然則想一想,當你須要更新10,0000或許更多行記載時,你會發明這個中的利益!獨一要留意的成績是SQL語句的長度,須要斟酌法式運轉情況所支撐的字符串長度,我今朝取得的數據:SQL語句長度到達1,000,960在php中依然可以順遂履行,我查詢了php文檔並沒有發明明白劃定字符串最年夜長度。

•第二種INSERT方法
MySql中INSERT語法具有一個前提DUPLICATE KEY UPDATE,這個語法和合適用在須要斷定記載能否存在,不存在則拔出存在則更新的記載。
基於下面這類情形,針對更新記載,依然應用insert語句,不外限制主鍵反復時,更新字段。以下:

INSERT INTO t_member (id, name, email) VALUES
(1, 'nick', '[email protected]'),
(4, 'angel','[email protected]'),
(7, 'brank','[email protected]')
ON DUPLICATE KEY UPDATE name=VALUES(name), email=VALUES(email);

留意:ON DUPLICATE KEY UPDATE只是MySQL的特有語法,其實不是SQL尺度語法!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved