亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

MySQL中游標使用以及讀取文本數據

系統 1970 0
原文: MySQL中游標使用以及讀取文本數據

前言

之前一直沒有接觸數據庫的學習,只是本科時候修了一本數據庫基本知識的課。當時只對C++感興趣,天真的認為其它的課都沒有用,數據庫也是半懂不懂,胡亂就考試過了。現在學習大數據分析,接觸了數據挖掘,才感覺到數據庫是不可跨越的坎。直到現在才感覺到《操作系統》、《編譯原理》、《計算機組成原理》等等課程的重要性。在浩瀚的知識面前,個人是非常渺小的。掌握了一種思想之后,任何事情都不困難,困難的是你是否真的靜下心看一看幫助文檔、認真的Google。靜心、靜氣、認真、執著。

游標-cursor

學習了幾天MySQL,談一談自己對游標的認識。

游標就類似于C++中的指針,用于指向查詢結果。比如你查詢后的的數據格式如下:

      
        +
      
      
        --
      
      
        ----------+----------------------+------+------+------+-------------+----------+----------+------+---------+
      
      
        |
      
       station_id 
      
        |
      
       get_time             
      
        |
      
       PM25 
      
        |
      
       PM10 
      
        |
      
       NO2  
      
        |
      
       temperature 
      
        |
      
       pressure 
      
        |
      
       humidity 
      
        |
      
       wind 
      
        |
      
       weather 
      
        |
      
      
        +
      
      
        --
      
      
        ----------+----------------------+------+------+------+-------------+----------+----------+------+---------+
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        8
      
      
        /
      
      
        2013
      
      
        9
      
      :
      
        00
      
      :
      
        00
      
       PM  
      
        |
      
      
        149
      
      
        |
      
      
        59
      
      
        |
      
      
        16
      
      
        |
      
      
        -
      
      
        5
      
      
        |
      
      
        1031
      
      
        |
      
      
        46
      
      
        |
      
      
        4
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        8
      
      
        /
      
      
        2013
      
      
        10
      
      :
      
        00
      
      :
      
        00
      
       PM 
      
        |
      
      
        159
      
      
        |
      
      
        65
      
      
        |
      
      
        22
      
      
        |
      
      
        -
      
      
        5
      
      
        |
      
      
        1030
      
      
        |
      
      
        46
      
      
        |
      
      
        1
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        9
      
      
        /
      
      
        2013
      
      
        12
      
      :
      
        00
      
      :
      
        00
      
       AM 
      
        |
      
      
        179
      
      
        |
      
      
        73
      
      
        |
      
      
        28
      
      
        |
      
      
        -
      
      
        6
      
      
        |
      
      
        1029
      
      
        |
      
      
        46
      
      
        |
      
      
        4
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        9
      
      
        /
      
      
        2013
      
      
        2
      
      :
      
        00
      
      :
      
        00
      
       AM  
      
        |
      
      
        194
      
      
        |
      
      
        73
      
      
        |
      
      
        29
      
      
        |
      
      
        -
      
      
        7
      
      
        |
      
      
        1028
      
      
        |
      
      
        49
      
      
        |
      
      
        3
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        9
      
      
        /
      
      
        2013
      
      
        3
      
      :
      
        00
      
      :
      
        00
      
       AM  
      
        |
      
      
        191
      
      
        |
      
      
        73
      
      
        |
      
      
        27
      
      
        |
      
      
        -
      
      
        7
      
      
        |
      
      
        1028
      
      
        |
      
      
        50
      
      
        |
      
      
        2
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        9
      
      
        /
      
      
        2013
      
      
        4
      
      :
      
        00
      
      :
      
        00
      
       AM  
      
        |
      
      
        194
      
      
        |
      
      
        73
      
      
        |
      
      
        25
      
      
        |
      
      
        -
      
      
        7
      
      
        |
      
      
        1026
      
      
        |
      
      
        53
      
      
        |
      
      
        2
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        9
      
      
        /
      
      
        2013
      
      
        5
      
      :
      
        00
      
      :
      
        00
      
       AM  
      
        |
      
      
        193
      
      
        |
      
      
        73
      
      
        |
      
      
        23
      
      
        |
      
      
        -
      
      
        7
      
      
        |
      
      
        1026
      
      
        |
      
      
        54
      
      
        |
      
      
        2
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        9
      
      
        /
      
      
        2013
      
      
        6
      
      :
      
        00
      
      :
      
        00
      
       AM  
      
        |
      
      
        192
      
      
        |
      
      
        73
      
      
        |
      
      
        21
      
      
        |
      
      
        -
      
      
        8
      
      
        |
      
      
        1026
      
      
        |
      
      
        52
      
      
        |
      
      
        2
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        9
      
      
        /
      
      
        2013
      
      
        7
      
      :
      
        00
      
      :
      
        00
      
       AM  
      
        |
      
      
        192
      
      
        |
      
      
        73
      
      
        |
      
      
        23
      
      
        |
      
      
        -
      
      
        8
      
      
        |
      
      
        1025
      
      
        |
      
      
        54
      
      
        |
      
      
        3
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        001001
      
      
        |
      
      
        2
      
      
        /
      
      
        9
      
      
        /
      
      
        2013
      
      
        8
      
      :
      
        00
      
      :
      
        00
      
       AM  
      
        |
      
      
        190
      
      
        |
      
      
        73
      
      
        |
      
      
        20
      
      
        |
      
      
        -
      
      
        8
      
      
        |
      
      
        1025
      
      
        |
      
      
        55
      
      
        |
      
      
        3
      
      
        |
      
      
        1
      
      
        |
      
      
        +
      
      
        --
      
      
        ----------+----------------------+------+------+------+-------------+----------+----------+------+---------+
      
    

你如果想逐條處理數據,那么必須要用到游標進行循環處理。

加載進來的數據是varchar格式,但是對于第二個屬性“get_time”我們需要的格式是“datatime”,需要進行獲取屬性值并進行循環處理。

使用游標的步驟如下:

1.定義游標 declare 游標名 cursor for select語句

2.定義處理游標結束的變量?declare continue handler for not found ?set 變量名= true;

3.打開游標 open 游標名

4.判斷是否結束,如果不結束,則處理當前游標指向值;如果結束,則結束循環

5.關閉游標 close 游標名

注:游標一般是在存儲過程(procedure)中調用,procedure類似于C++中的函數,里面封裝了SQL語句,想要使用時,直接CALL ‘procedure_name’即可。游標(cursor)中若有使用的變量必須在聲明cursor前把變量定義完。詳細的代碼設計如下:

      
        CREATE
      
       DEFINER
      
        =
      
      `root`@`localhost` 
      
        PROCEDURE
      
      
         `strToDate`()


      
      
        begin
      
      
        --
      
      
         定義一個臨時變量用于存儲轉換后的時間格式
      
      
        declare
      
      
        temp
      
      
        datetime
      
      
        ;



 
      
      
        --
      
      
         定義字符串臨時變量,存儲查詢后的每條內容
      
      
        declare
      
      
        str
      
      
        varchar
      
      (
      
        150
      
      
        );



 
      
      
        --
      
      
         是否結束的標識
      
      
        declare
      
       flag 
      
        int
      
      
        default
      
      
         false;



 
      
      
        --
      
      
         定義游標
      
      
        declare
      
       getTimeCursor 
      
        cursor
      
      
        for
      
      
        select
      
       get_time 
      
        from
      
      
         train;



 
      
      
        --
      
      
         定義結束的標識
      
      
        declare
      
      
        continue
      
       handler 
      
        for
      
      
        not
      
       found  
      
        set
      
       flag 
      
        =
      
      
         true;



 
      
      
        --
      
      
         打開游標
      
      
        open
      
      
         getTimeCursor;



 
      
      
        --
      
      
         開始循環處理
      
      
         read_loop:loop

 

 
      
      
        --
      
      
         把當前游標內容放到變量中
      
      
        fetch
      
       getTimeCursor 
      
        into
      
      
        str
      
      
        ;



 
      
      
        --
      
      
         如果結束標識為TRUE,則結束循環
      
      
        if
      
       flag 
      
        then
      
      
        

leave read_loop;


      
      
        end
      
      
        if
      
      
        ;



 
      
      
        --
      
      
         否則循環處理每個屬性,調用字符串轉換日期函數
      
      
        set
      
      
        temp
      
      
        =
      
       (
      
        select
      
       str_to_date(
      
        str
      
      ,
      
        '
      
      
        %c/%e/%Y %l:%i:%s %p
      
      
        '
      
      
        ));



 
      
      
        --
      
      
         把轉換結果存儲到新的表中
      
      
        insert
      
      
        into
      
       time_test 
      
        values
      
      (
      
        temp
      
      
        );



 
      
      
        --
      
      
         結束循環
      
      
        end
      
      
         loop;



 
      
      
        --
      
      
         關閉游標
      
      
        close
      
      
         getTimeCursor;



 
      
      
        --
      
      
         查詢結果
      
      
        select
      
      
        *
      
      
        from
      
      
         time_test limit 10;


      
      
        end
      
    

其中,str_to_date()函數的功能是把string類型的數據轉成date類型。查詢后的結果為:

      
        +
      
      
        --
      
      
        -------------------+
      
      
        |
      
       get_time            
      
        |
      
      
        +
      
      
        --
      
      
        -------------------+
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        16
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        08
      
      
        21
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        08
      
      
        22
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        00
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        02
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        03
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        04
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        05
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        06
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        07
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        +
      
      
        --
      
      
        -------------------+
      
    

see,所有字符串都轉換成了標準的時間格式。

MySQL load data控制

其實上面的問題完全可以利用另外一種方法完成,那就是在裝載數據的時候進行格式控制。具體SQL代碼如下:

      
        use
      
      
         train;


      
      
        drop
      
      
        table
      
      
         traindata;


      
      
        create
      
      
        table
      
      
        if
      
      
        not
      
      
        exists
      
      
         traindata(

id 
      
      
        int
      
       auto_increment 
      
        primary
      
      
        key
      
      
        ,

station_id 
      
      
        varchar
      
      (
      
        10
      
      
        ),

get_time 
      
      
        datetime
      
      
        ,

PM25 
      
      
        int
      
      
        ,

PM10 
      
      
        int
      
      
        ,

NO2 
      
      
        int
      
      
        ,

temperature 
      
      
        int
      
      
        ,

pressure 
      
      
        int
      
      
        ,

humidity 
      
      
        int
      
      
        ,

wind 
      
      
        double
      
      
        ,

weather 
      
      
        int
      
      
        );




      
      
        load
      
      
         data local

infile 
      
      
        '
      
      
        f:\\dataset\\beijing\\crawleddata.txt
      
      
        '
      
      
        into
      
      
        table
      
      
         traindata

fields terminated 
      
      
        by
      
      
        '
      
      
        ,
      
      
        '
      
      
        

(station_id, 
      
      
        @var_time
      
      
        , PM25, PM10, NO2, temperature, pressure, humidity, wind, weather)


      
      
        set
      
       get_time 
      
        =
      
       str_to_date(
      
        @var_time
      
      , 
      
        '
      
      
        %c/%e/%Y %l:%i:%s %p
      
      
        '
      
      
        );




      
      
        select
      
      
        *
      
      
        from
      
       traindata limit 
      
        10
      
      ;
    

加載進數據庫后,具體數據格式如下:

      
        +
      
      
        --
      
      
        --+------------+---------------------+------+------+------+-------------+----------+----------+------+---------+
      
      
        |
      
       id 
      
        |
      
       station_id 
      
        |
      
       get_time            
      
        |
      
       PM25 
      
        |
      
       PM10 
      
        |
      
       NO2  
      
        |
      
       temperature 
      
        |
      
       pressure 
      
        |
      
       humidity 
      
        |
      
       wind 
      
        |
      
       weather 
      
        |
      
      
        +
      
      
        --
      
      
        --+------------+---------------------+------+------+------+-------------+----------+----------+------+---------+
      
      
        |
      
      
        1
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        08
      
      
        21
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        149
      
      
        |
      
      
        59
      
      
        |
      
      
        16
      
      
        |
      
      
        -
      
      
        5
      
      
        |
      
      
        1031
      
      
        |
      
      
        46
      
      
        |
      
      
        4
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        2
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        08
      
      
        22
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        159
      
      
        |
      
      
        65
      
      
        |
      
      
        22
      
      
        |
      
      
        -
      
      
        5
      
      
        |
      
      
        1030
      
      
        |
      
      
        46
      
      
        |
      
      
        1
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        3
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        00
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        179
      
      
        |
      
      
        73
      
      
        |
      
      
        28
      
      
        |
      
      
        -
      
      
        6
      
      
        |
      
      
        1029
      
      
        |
      
      
        46
      
      
        |
      
      
        4
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        4
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        02
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        194
      
      
        |
      
      
        73
      
      
        |
      
      
        29
      
      
        |
      
      
        -
      
      
        7
      
      
        |
      
      
        1028
      
      
        |
      
      
        49
      
      
        |
      
      
        3
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        5
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        03
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        191
      
      
        |
      
      
        73
      
      
        |
      
      
        27
      
      
        |
      
      
        -
      
      
        7
      
      
        |
      
      
        1028
      
      
        |
      
      
        50
      
      
        |
      
      
        2
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        6
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        04
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        194
      
      
        |
      
      
        73
      
      
        |
      
      
        25
      
      
        |
      
      
        -
      
      
        7
      
      
        |
      
      
        1026
      
      
        |
      
      
        53
      
      
        |
      
      
        2
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        7
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        05
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        193
      
      
        |
      
      
        73
      
      
        |
      
      
        23
      
      
        |
      
      
        -
      
      
        7
      
      
        |
      
      
        1026
      
      
        |
      
      
        54
      
      
        |
      
      
        2
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        8
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        06
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        192
      
      
        |
      
      
        73
      
      
        |
      
      
        21
      
      
        |
      
      
        -
      
      
        8
      
      
        |
      
      
        1026
      
      
        |
      
      
        52
      
      
        |
      
      
        2
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        9
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        07
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        192
      
      
        |
      
      
        73
      
      
        |
      
      
        23
      
      
        |
      
      
        -
      
      
        8
      
      
        |
      
      
        1025
      
      
        |
      
      
        54
      
      
        |
      
      
        3
      
      
        |
      
      
        1
      
      
        |
      
      
        |
      
      
        10
      
      
        |
      
      
        1001
      
      
        |
      
      
        2013
      
      
        -
      
      
        02
      
      
        -
      
      
        09
      
      
        08
      
      :
      
        00
      
      :
      
        00
      
      
        |
      
      
        190
      
      
        |
      
      
        73
      
      
        |
      
      
        20
      
      
        |
      
      
        -
      
      
        8
      
      
        |
      
      
        1025
      
      
        |
      
      
        55
      
      
        |
      
      
        3
      
      
        |
      
      
        1
      
      
        |
      
      
        +
      
      
        --
      
      
        --+------------+---------------------+------+------+------+-------------+----------+----------+------+---------+
      
    

see,標準的數據格式。

?

原創內容,轉載請注明出處。http://www.cnblogs.com/chuantingSDU/p/4243990.html

聯系方式:chuanting.zhang@gmail.com

MySQL中游標使用以及讀取文本數據


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 97免费观看| 日韩视频在线一区 | 99精品大学生啪啪自拍 | 欧美6699在线视频免费 | 日本a在线视频 | 男人的天堂在线精品视频 | 色综合色狠狠天天久久婷婷基地 | 亚洲色图插插插 | 一级黄色录像毛片 | 麻豆精品在线 | 国产福利午夜波多野结衣 | 亚洲精品一区专区 | 97影院理论片在线观看 | 亚洲精品亚洲一区二区 | 国产 色| 免费国产成人 | 免费在线黄色网 | avav国产| 久久久久久麻豆 | 欧美日韩国产在线 | 久久综合精品不卡一区二区 | 国产成人精品综合久久久软件 | 两性视频久久 | 久久精彩 | 人人爽影院 | 激情一区二区三区 | 成人二区 | 日本一区二区三区高清福利视频 | 久久天天躁狠狠躁夜夜爽蜜月 | 国产精品k | 成人在线免费观看视频 | 成年女人黄小视频 | 中文字幕一区二区三区免费看 | 97看片网 | 网色视频 | 久久亚洲国产欧洲精品一 | 亚洲伊人久久综合 | 国产伦精品一区二区三区网站 | 99这里只有精品66视频 | 欧美乱大交xxxxx另类 | 亚洲国产成人综合 |