欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL實現(xiàn)批量更新不同表中的數(shù)據(jù)

 更新時間:2022年05月07日 15:32:11   作者:風(fēng)水月  
這篇文章主要介紹了MySQL實現(xiàn)批量更新不同表中的數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

批量更新不同表的數(shù)據(jù)

今天翻到以前寫的批量更新表中的數(shù)據(jù)的存儲過程,故在此做一下記錄。

當(dāng)時MySQL中的表名具有如下特征,即根據(jù)需求將業(yè)務(wù)表類型分為了公有、私有和臨時三種類型,即不同的業(yè)務(wù)對應(yīng)三張表,而所做的是區(qū)分出是什么類型(公有、私有、臨時)的業(yè)務(wù)表對數(shù)據(jù)的固定字段做統(tǒng)一規(guī)律的處理。

下面為當(dāng)時所編寫的存儲過程

BEGIN
  DECLARE done             INT;
  DECLARE v_table_name     VARCHAR(100);
  DECLARE v_disable        VARCHAR(100);
  DECLARE v_disable_temp   VARCHAR(100); -- 存放最終刪除sql 
  DECLARE v_table_pre      VARCHAR(100);
  DECLARE v_table_sub      VARCHAR(200);
  DECLARE v_disable_temp_2 VARCHAR(100);
  -- 查詢testkaifa庫中以'temp_test_p_'開頭的表
  DECLARE cursor_table_gis CURSOR FOR SELECT DISTINCT table_name tableName
                                      FROM
                                        information_schema.columns
                                      WHERE
                                        table_schema = 'testkaifa'
                                        AND table_name LIKE '%temp_test_p_%';
 
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
 
  SELECT @done;
 
  OPEN cursor_table_gis;
 
cursor_loop:
  LOOP
    FETCH cursor_table_gis INTO v_table_name;
    IF done = 1 THEN
      LEAVE cursor_loop;
    END IF;
    -- 連接字符串函數(shù)
    SET @v_disable = concat_ws(' ', 'update ', v_table_name, 'set is_valid=false where expire_time>now();');
    SELECT @v_disable;
    PREPARE sqlstr FROM @v_disable;
    EXECUTE sqlstr;
    DEALLOCATE PREPARE sqlstr;
 
    SELECT substring_index(v_table_name, '_', 1)
    INTO
      v_table_pre;
    -- IF v_table_pre = 'temp' THEN
    SELECT reverse(left(reverse(v_table_name), instr(reverse(v_table_name), '_')))
    INTO
      v_table_sub;
    SET @v_disable_temp = concat_ws(' ', 'update ', v_table_name, 'set is_valid=false where (expire_time-now())> (select value_data from ', concat('platform_params_p', v_table_sub), 'where param_key=\'tempDismissInterval\');');
    SELECT @v_disable_temp;
    PREPARE sqlstr2 FROM @v_disable_temp;
    EXECUTE sqlstr2;
    DEALLOCATE PREPARE sqlstr2;
    --  END IF;
 
    SET @v_disable_temp_2 = concat_ws(' ', 'update ', v_table_name, 'set is_valid=false where (test_id in(select test_id from ', concat('temp_test_user_p', v_table_sub), ' where (max(latest_act_time )-now())> (select value_data from ', concat('platform_params_p', v_table_sub), 'where param_key=\'tempDismissInterval\'));');
    SELECT @v_disable_temp_2;
    PREPARE sqlstr2 FROM @v_disable_temp;
    EXECUTE sqlstr2;
    DEALLOCATE PREPARE sqlstr2;
 
  END LOOP cursor_loop;
 
  CLOSE cursor_table_gis;
 
  COMMIT;
-- 
END

本代碼涉及到的MySQL的內(nèi)容為

1.查詢表名

SELECT DISTINCT table_name tableName
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? FROM
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? information_schema.columns
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? WHERE
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? table_schema = 'testkaifa'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? AND table_name LIKE '%temp_test_p_%';

2.執(zhí)行拼接的字符串SQL

PREPARE statement_name FROM sql_text /*定義*/?
EXECUTE statement_name [USING variable [,variable...]] /*執(zhí)行預(yù)處理語句*/?
DEALLOCATE PREPARE statement_name /*刪除定義*/

例如:

SET @v_disable_temp = concat_ws(' ', 'update ', v_table_name, 'set is_valid=false where (expire_time-now())> (select value_data from ', concat('platform_params_p', v_table_sub), 'where param_key=\'tempDismissInterval\');');
? ? SELECT @v_disable_temp;
? ? PREPARE sqlstr2 FROM @v_disable_temp;
? ? EXECUTE sqlstr2;
? ? DEALLOCATE PREPARE sqlstr2;

批量更新語句(UPDATE)

使用UPDATE語句實現(xiàn)批量修改

示例

下面創(chuàng)建一個名為‘bhl_tes’的數(shù)據(jù)庫,并創(chuàng)建名為‘test_user’的表,字段分別為‘id’,‘age’,‘name’,’sex‘。

創(chuàng)建數(shù)據(jù)庫‘bhl_tes’

代碼

CREATE DATABASE IF NOT EXISTS bhl_test;

查看結(jié)果

創(chuàng)建表‘test_user’

代碼

CREATE TABLE IF NOT EXISTS `test_user`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `name` VARCHAR(255) NOT NULL,
   `age` INT(11) NOT NULL,
   `sex` VARCHAR(16),
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

查看結(jié)果

批量插入記錄

INSERT INTO test_user 
(name, age, sex)
VALUES 
('張三', 18, '男'),
('趙四', 17, '女'),
('劉五', 16, '男'),
('周七', 19, '女');

查看結(jié)果

批量修改記錄

UPDATE test_user SET 
name = CASE id 
WHEN 1 THEN '張三' 
WHEN 2 THEN '李四' 
WHEN 3 THEN '王五' 
WHEN 4 THEN '小六' 
END,
age = CASE id 
WHEN 1 THEN 7 
WHEN 2 THEN 8 
WHEN 3 THEN 9 
WHEN 4 THEN 14 
END,
sex = CASE id 
WHEN 1 THEN '男' 
WHEN 2 THEN '男' 
WHEN 3 THEN '男' 
WHEN 4 THEN '男' 
END
WHERE id IN (1,2,3,4);

查看結(jié)果

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談開啟magic_quote_gpc后的sql注入攻擊與防范

    淺談開啟magic_quote_gpc后的sql注入攻擊與防范

    通過啟用php.ini配置文件中的相關(guān)選項,就可以將大部分想利用SQL注入漏洞的駭客拒絕于門外
    2012-01-01
  • MySQL獲取所有分類的前N條記錄

    MySQL獲取所有分類的前N條記錄

    本文給大家分享的是使用mysql實現(xiàn)獲取所有分類的前N條記錄的方法,本文給出了3個示例,有需要的小伙伴可以參考下。
    2015-04-04
  • MySQL的索引你了解嗎

    MySQL的索引你了解嗎

    這篇文章主要為大家詳細(xì)介紹了MySQL的索引,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • MySQL數(shù)據(jù)類型之淺談字符串(string)

    MySQL數(shù)據(jù)類型之淺談字符串(string)

    這篇文章主要介紹了MySQL數(shù)據(jù)類型之字符串(string)的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • MySQL中的日期時間類型與格式化方式

    MySQL中的日期時間類型與格式化方式

    這篇文章主要介紹了MySQL中的日期時間類型與格式化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MySQL優(yōu)化常用的19種有效方法(推薦!)

    MySQL優(yōu)化常用的19種有效方法(推薦!)

    關(guān)于數(shù)據(jù)庫優(yōu)化,網(wǎng)上有不少資料和方法,但是不少質(zhì)量參差不齊,有些總結(jié)的不夠到位,內(nèi)容冗雜,下面這篇文章主要給大家介紹了關(guān)于MySQL優(yōu)化常用的19種有效方法,需要的朋友可以參考下
    2022-03-03
  • mysql CPU高負(fù)載問題排查

    mysql CPU高負(fù)載問題排查

    這篇文章主要介紹了mysql CPU高負(fù)載問題排查的相關(guān)資料,幫助大家更好的理解和使用MySQL,維護(hù)數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-11-11
  • mysql對于模糊查詢like的一些匯總

    mysql對于模糊查詢like的一些匯總

    這篇文章主要給大家介紹了關(guān)于mysql對于模糊查詢like的一些匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • mysql中怎樣使用合適的字段和字段長度

    mysql中怎樣使用合適的字段和字段長度

    這篇文章主要介紹了mysql中怎樣使用合適的字段和字段長度問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • MySQL如何快速批量插入1000w條數(shù)據(jù)

    MySQL如何快速批量插入1000w條數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于MySQL如何快速批量插入1000w條數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論