国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql 批量更新與批量更新多條記錄的不同值實現(xiàn)方法

2024-07-24 12:47:55
字體:
供稿:網(wǎng)友

批量更新

mysql更新語句很簡單,更新一條數(shù)據(jù)的某個字段,一般這樣寫:

復制代碼 代碼如下:

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

如果更新同一字段為同一個值,mysql也很簡單,修改下where即可:

復制代碼 代碼如下:

 UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values');
 

這里注意 ‘other_values' 是一個逗號(,)分隔的字符串,如:1,2,3

那如果更新多條數(shù)據(jù)為不同的值,可能很多人會這樣寫:

復制代碼 代碼如下:

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

即是循環(huán)一條一條的更新記錄。一條記錄update一次,這樣性能很差,也很容易造成阻塞。

那么能不能一條sql語句實現(xiàn)批量更新呢?mysql并沒有提供直接的方法來實現(xiàn)批量更新,但是可以用點小技巧來實現(xiàn)。

復制代碼 代碼如下:

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

這里使用了case when 這個小技巧來實現(xiàn)批量更新。
舉個例子:

復制代碼 代碼如下:

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

這句sql的意思是,更新display_order 字段,如果id=1 則display_order 的值為3,如果id=2 則 display_order 的值為4,如果id=3 則 display_order 的值為5。
即是將條件語句寫在了一起。
這里的where部分不影響代碼的執(zhí)行,但是會提高sql執(zhí)行的效率。確保sql語句僅執(zhí)行需要修改的行數(shù),這里只有3條數(shù)據(jù)進行更新,而where子句確保只有3行數(shù)據(jù)執(zhí)行。

如果更新多個值的話,只需要稍加修改:

復制代碼 代碼如下:

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)
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 建水县| 阿荣旗| 边坝县| 许昌市| 丹棱县| 南漳县| 天镇县| 宜州市| 古丈县| 银川市| 松滋市| 扶绥县| 金坛市| 灵丘县| 徐闻县| 通山县| 鸡东县| 嘉义县| 耒阳市| 通辽市| 日照市| 昌都县| 保德县| 建瓯市| 新龙县| 丹东市| 清水河县| 兴业县| 麻栗坡县| 彭水| 锡林郭勒盟| 佛坪县| 炉霍县| 浙江省| 巴林右旗| 筠连县| 凤凰县| 四会市| 皋兰县| 叶城县| 镇宁|