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

MySQL學(xué)習(xí)筆記二

系統(tǒng) 1829 0

? function 函數(shù)

        函數(shù)的作用比較大,一般多用在select查詢語句和where條件語句之后。按照函數(shù)返回的結(jié)果,
      
        可以分為:多行函數(shù)和單行函數(shù);所謂的單行函數(shù)就是將每條數(shù)據(jù)進(jìn)行獨(dú)立的計(jì)算,然后每條數(shù)據(jù)得到一條結(jié)果。
      
        如:字符串函數(shù);而多行函數(shù),就是多條記錄同時(shí)計(jì)算,得到最終只有一條結(jié)果記錄。如:
        
          sum
        
        、avg等
      
        多行函數(shù)也稱為聚集函數(shù)、分組函數(shù),主要用于完成一些統(tǒng)計(jì)功能。MySQL的單行函數(shù)有如下特征:
      
            單行函數(shù)的參數(shù)可以是變量、常量或數(shù)據(jù)列。單行函數(shù)可以接受多個(gè)參數(shù),但返回一個(gè)值。
      
            單行函數(shù)就是它會(huì)對(duì)每一行單獨(dú)起作用,每一行(可能包含多個(gè)參數(shù))返回一個(gè)結(jié)果。
      
            單行函數(shù)可以改變參數(shù)的數(shù)據(jù)類型。單行函數(shù)支持嵌套使用:內(nèi)層函數(shù)的返回值是外層函數(shù)的參數(shù)。
      
        ?
      
        單行函數(shù)可以分為:
      
            類型轉(zhuǎn)換函數(shù);
      
            位函數(shù);
      
            流程控制語句;
      
            加密解密函數(shù);
      
            信息函數(shù)
      

單行函數(shù)

        ?
      
        1、    char_length字符長度
      
        
          select
        
        
          char_length
        
        (tel) 
        
          from
        
        
          user
        
        ;
      
        ?
      
        2、    sin函數(shù)
      
        
          select
        
         sin(age) 
        
          from
        
        
          user
        
        ;
      
        
          select
        
         sin(1.57);
      
        ?
      
        3、    添加日期函數(shù)
      
        
          select
        
         date_add(
        
          '2010-06-21'
        
        , 
        
          interval
        
         2 
        
          month
        
        );
      
        interval是一個(gè)關(guān)鍵字,2 month是2個(gè)月的意思,2是數(shù)值,month是單位
      
        
          select
        
         addDate(
        
          '2011-05-28'
        
        , 2);
      
        在前面的日期上加上后面的天數(shù)
      
        ?
      
        4、    獲取當(dāng)前系統(tǒng)時(shí)間、日期
      
        
          select
        
         curdate();
      
        
          select
        
         curtime();
      
        ?
      
        5、    加密函數(shù)
      
        
          select
        
         md5(
        
          'zhangsan'
        
        );
      
        ?
      
        6、    
        
          Null
        
         處理函數(shù)
      
        
          select
        
         ifnull(birthday, 
        
          'is null birthday'
        
        ) 
        
          from
        
        
          user
        
        ;
      
        如果birthday為null,就返回后面的字符串
      
        ?
      
        
          select
        
        
          nullif
        
        (age, 245) 
        
          from
        
        
          user
        
        ;
      
        如果age等于245就返回null,不等就返回age
      
        ?
      
        
          select
        
         isnull(birthday) 
        
          from
        
        
          user
        
        ;
      
        判斷birthday是否為null
      
        ?
      
        
          select
        
        
          if
        
        (isnull(birthday), 
        
          'birthday is null'
        
        , 
        
          'birthday not is null'
        
        ) 
        
          from
        
        
          user
        
        ;
      
        如果birthday為null或是0就返回birthday 
        
          is
        
        
          null
        
        ,否則就返回birthday 
        
          not
        
        
          is
        
        
          null
        
        ;類似于三目運(yùn)算符
      
        ?
      
        7、    
        
          case
        
         流程函數(shù)
      
        case函數(shù)是一個(gè)流程控制函數(shù),可以接受多個(gè)參數(shù),但最終只會(huì)返回一個(gè)結(jié)果。
      
        
          select
        
         name, 
      
        age, 
      
        (
        
          case
        
         sex
      
        
          when
        
         1 
        
          then
        
        
          '男'
        
      
        
          when
        
         0 
        
          then
        
        
          '女'
        
      
        
          else
        
        
          '火星人'
        
      
        
          end
        
      
        ) sex
      
        
          from
        
        
          user
        
        ;
      

?

組函數(shù)

組函數(shù)就是多行函數(shù),組函數(shù)是完成一行或多行結(jié)果集的運(yùn)算,最后返回一個(gè)結(jié)果,而不是每條記錄返回一個(gè)結(jié)果。

        1、    avg平均值運(yùn)算
      
        
          select
        
        
          avg
        
        (age) 
        
          from
        
        
          user
        
        ;
      
        
          select
        
        
          avg
        
        (
        
          distinct
        
         age) 
        
          from
        
        
          user
        
        ;
      
        ?
      
        2、    
        
          count
        
         記錄條數(shù)統(tǒng)計(jì)
      
        
          select
        
        
          count
        
        (*), 
        
          count
        
        (age), 
        
          count
        
        (
        
          distinct
        
         age) 
        
          from
        
        
          user
        
        ;
      
        ?
      
        3、    
        
          max
        
         最大值
      
        
          select
        
        
          max
        
        (age), 
        
          max
        
        (
        
          distinct
        
         age) 
        
          from
        
        
          user
        
        ;
      
        ?
      
        4、    
        
          min
        
         最小值
      
        
          select
        
        
          min
        
        (age), 
        
          min
        
        (
        
          distinct
        
         age) 
        
          from
        
        
          user
        
        ;
      
        ?
      
        5、    
        
          sum
        
         求和、聚和
      
        
          select
        
        
          sum
        
        (age), 
        
          sum
        
        (
        
          distinct
        
         age) 
        
          from
        
        
          user
        
        ;
      
        
          select
        
        
          sum
        
        (ifnull(age, 0)) 
        
          from
        
        
          user
        
        ;
      
        ?
      
        6、    
        
          group
        
        
          by
        
         分組
      
        
          select
        
        
          count
        
        (*), sex 
        
          from
        
        
          user
        
        
          group
        
        
          by
        
         sex;
      
        
          select
        
        
          count
        
        (*) 
        
          from
        
        
          user
        
        
          group
        
        
          by
        
         age;
      
        
          select
        
         * 
        
          from
        
        
          user
        
        
          group
        
        
          by
        
         sex, age;
      
        ?
      
        7、    having進(jìn)行條件過濾
      
        不能在where子句中過濾組,where子句僅用于過濾行。過濾group by需要having
      
        不能在where子句中用組函數(shù),having中才能用組函數(shù)
      
        
          select
        
        
          count
        
        (*) 
        
          from
        
        
          user
        
        
          group
        
        
          by
        
         sex 
        
          having
        
         sex <> 2;
      

?

? 多表查詢和子查詢

        數(shù)據(jù)庫的查詢功能最為豐富,很多時(shí)候需要用到查詢完成一些事物,而且不是單純的對(duì)一個(gè)表進(jìn)行操作。而是對(duì)多個(gè)表進(jìn)行聯(lián)合查詢,
      
        MySQL中多表連接查詢有兩種規(guī)范,較早的SQL92規(guī)范支持,如下幾種表連接查詢:
      
            等值連接
      
            非等值連接
      
            外連接
      
            廣義笛卡爾積
      
        SQL99規(guī)則提供了可讀性更好的多表連接語法,并提供了更多類型的連接查詢,SQL99支持如下幾種多表連接查詢:
      
            交叉連接
      
            自然連接
      
            使用using子句的連接
      
            使用on子句連接
      
            全部連接或者左右外連接
      
        ?
      
        SQL92的連接查詢
      
        SQL92的連接查詢語法比較簡(jiǎn)單,多將多個(gè)table放置在from關(guān)鍵字之后,多個(gè)table用“,”隔開;
      
        連接的條件放在where條件之后,與查詢條件直接用and邏輯運(yùn)算符進(jìn)行連接。如果條件中使用的是相等,
      
        則稱為等值連接,相反則稱為非等值,如果沒有任何條件則稱為廣義笛卡爾積。
      
        廣義笛卡爾積:
        
          select
        
         s.*, c.* 
        
          from
        
         student s, classes c;
      
        等值:
        
          select
        
         s.*, c.* 
        
          from
        
         student s, classes c 
        
          where
        
         s.cid = c.id;
      
        非等值:
        
          select
        
         s.*, c.* 
        
          from
        
         student s, classes c 
        
          where
        
         s.cid <> c.id;
      
        
          select
        
         s.*, c.name classes 
        
          from
        
         classes c, student s 
        
          where
        
         c.id = s.classes_id 
        
          and
        
         s.name 
        
          is
        
        
          not
        
        
          null
        
        ;
      
        ?
      
        SQL99連接查詢
      
        1、交叉連接cross 
        
          join
        
        ,類似于SQL92的笛卡爾積查詢,無需條件。如:
      
        
          select
        
         s.*, c.name 
        
          from
        
         student s 
        
          cross
        
        
          join
        
         classes c;
      
        ?
      
        2、自然連接 
        
          natural
        
         join查詢,無需條件,默認(rèn)條件是將2個(gè)table中的相同字段作為連接條件,如果沒有相同字段,查詢的結(jié)果就是空。
      
        
          select
        
         s.*, c.name 
        
          from
        
         student s 
        
          natural
        
        
          join
        
         classes c;
      
        ?
      
        3、using子句連接查詢:using的子句可以是一列或多列,顯示的指定兩個(gè)表中同名列作為連接條件。
      
        如果用natural join的連接查詢,會(huì)把所有的相同字段作為連接查詢。而using可以指定相同列及個(gè)數(shù)。
      
        
          select
        
         s.*, c.name 
        
          from
        
         student s 
        
          join
        
         classes c 
        
          using
        
        (id);
      
        ?
      
        4、    
        
          join
        
         … on連接查詢,查詢條件在on中完成,每個(gè)on語句只能指定一個(gè)條件。
      
        
          select
        
         s.*, c.name 
        
          from
        
         student s 
        
          join
        
         classes c 
        
          on
        
         s.classes_id = c.id;
      
        ?
      
        5、    左右外連接:3種外連接,
        
          left
        
         [
        
          outer
        
        ] 
        
          join
        
          right
        
         [
        
          outer
        
        ] 
        
          join
        
        ,連接條件都是通過用on子句來指定,條件可以等值、非等值。
      
        
          select
        
         s.*, c.name 
        
          from
        
         student s 
        
          left
        
        
          join
        
         classes c 
        
          on
        
         s.classes_id = c.id;
      
        
          select
        
         s.*, c.name 
        
          from
        
         student s 
        
          right
        
        
          join
        
         classes c 
        
          on
        
         s.classes_id = c.id;
      
        ?
      
            子查詢
      
            子查詢就是指在查詢語句中嵌套另一個(gè)查詢,子查詢可以支持多層嵌套。子查詢可以出現(xiàn)在2個(gè)位置:
      
            from關(guān)鍵字之后,被當(dāng)做一個(gè)表來進(jìn)行查詢,這種用法被稱為行內(nèi)視圖,因?yàn)樵撟硬樵兊膶?shí)質(zhì)就是一個(gè)臨時(shí)視圖
      
            出現(xiàn)在where條件之后作為過濾條件的值
      
        ?
      
        子查詢注意點(diǎn):
      
            子查詢用括號(hào)括起來,特別情況下需要起一個(gè)臨時(shí)名稱
      
            子查詢當(dāng)做臨時(shí)表時(shí)(在from之后的子查詢),可以為該子查詢起別名,尤其是要作為前綴來限定數(shù)據(jù)列名時(shí)
      
            子查詢用作過濾條件時(shí),將子查詢放在比較運(yùn)算符的右邊,提供可讀性
      
            子查詢作為過濾條件時(shí),單行子查詢使用單行運(yùn)算符,多行子查詢用多行運(yùn)算符
      
        ?
      
        將from后面的子查詢當(dāng)做一個(gè)table來用:
      
        
          select
        
         * 
        
          from
        
         (
        
          select
        
         id, name 
        
          from
        
         classes) s 
        
          where
        
         s.id 
        
          in
        
         (1, 2);
      
        當(dāng)做條件來用:
      
        
          select
        
         * 
        
          from
        
         student s 
        
          where
        
         s.classes_id 
        
          in
        
         (
        
          select
        
         id 
        
          from
        
         classes);
      
        
          select
        
         * 
        
          from
        
         student s 
        
          where
        
         s.classes_id = 
        
          any
        
         (
        
          select
        
         id 
        
          from
        
         classes);
      
        
          select
        
         * 
        
          from
        
         student s 
        
          where
        
         s.classes_id > 
        
          any
        
         (
        
          select
        
         id 
        
          from
        
         classes);
      

? 操作符和函數(shù)

        1、    boolean只判斷
      
        
          select
        
         1 
        
          is
        
        
          true
        
        , 0 
        
          is
        
        
          false
        
        , 
        
          null
        
        
          is
        
        
          unknown
        
        ;
      
        
          select
        
         1 
        
          is
        
        
          not
        
        
          unknown
        
        , 0 
        
          is
        
        
          not
        
        
          unknown
        
        , 
        
          null
        
        
          is
        
        
          not
        
        
          unknown
        
        ;
      
        ?
      
        2、    coalesce函數(shù),返回第一個(gè)非null的值
      
        
          select
        
        
          coalesce
        
        (
        
          null
        
        , 1);
      
        
          select
        
        
          coalesce
        
        (1, 1);
      
        
          select
        
        
          coalesce
        
        (
        
          null
        
        , 1);
      
        
          select
        
        
          coalesce
        
        (
        
          null
        
        , 
        
          null
        
        );
      
        ?
      
        3、    當(dāng)有2個(gè)或多個(gè)參數(shù)時(shí),返回最大的那個(gè)參數(shù)值
      
        
          select
        
         greatest(2, 3);
      
        
          select
        
         greatest(2, 3, 1, 9, 55, 23);
      
        
          select
        
         greatest(
        
          'D'
        
        , 
        
          'A'
        
        , 
        
          'B'
        
        );
      
        ?
      
        4、    Least函數(shù),返回最小值,如果有null就返回null值
      
        
          select
        
         least(2, 0);
      
        
          select
        
         least(2, 0, 
        
          null
        
        );
      
        
          select
        
         least(2, 10, 22.2, 35.1, 1.1);
      
        ?
      
        5、    控制流函數(shù)
      
        
          select
        
        
          case
        
         1 
        
          when
        
         1 
        
          then
        
        
          'is 1'
        
        
          when
        
         2 
        
          then
        
        
          'is 2'
        
        
          else
        
        
          'none'
        
        
          end
        
        ;
      
        
          select
        
        
          case
        
        
          when
        
         1 > 2 
        
          then
        
        
          'yes'
        
        
          else
        
        
          'no'
        
        
          end
        
        ;
      
        ?
      
        6、    ascii字符串函數(shù)
      
        
          select
        
         ascii(
        
          'A'
        
        );
      
        
          select
        
         ascii(
        
          '1'
        
        );
      
        ?
      
        7、    二進(jìn)制函數(shù)
      
        
          select
        
         bin(22);
      
        ?
      
        8、    返回二進(jìn)制字符串長度
      
        
          select
        
        
          bit_length
        
        (11);
      
        ?
      
        9、    char將值轉(zhuǎn)換成字符,小數(shù)取整四舍五入
      
        
          select
        
        
          char
        
        (65);
      
        
          select
        
        
          char
        
        (65.4);
      
        
          select
        
        
          char
        
        (65.5);
      
        
          select
        
        
          char
        
        (65.6);
      
        
          select
        
        
          char
        
        (65, 66, 67.4, 68.5, 69.6, 
        
          '55.5'
        
        , 
        
          '97.3'
        
        );
      
        ?
      
        10、    using改變字符集
      
        
          select
        
         charset(
        
          char
        
        (0*65)), charset(
        
          char
        
        (0*65 
        
          using
        
         utf8));
      
        ?
      
        11、    得到字符長度char_length,
        
          character_length
        
      
        
          select
        
        
          char_length
        
        (
        
          'abc'
        
        );
      
        
          select
        
        
          character_length
        
        (
        
          'eft'
        
        );
      
        ?
      
        12、    compress壓縮字符串、uncompress解壓縮
      
        
          select
        
         compress(
        
          'abcedf'
        
        );
      
        
          select
        
         uncompress(compress(
        
          'abcedf'
        
        ));
      
        ?
      
        13、    concat_ws分隔字符串
      
        
          select
        
         concat_ws(
        
          '#'
        
        , 
        
          'first'
        
        , 
        
          'second'
        
        , 
        
          'last'
        
        );
      
        
          select
        
         concat_ws(
        
          '#'
        
        , 
        
          'first'
        
        , 
        
          'second'
        
        , 
        
          null
        
        , 
        
          'last'
        
        );
      

? 事務(wù)處理

        動(dòng)作
      
            開始事務(wù):
        
          start
        
        
          transaction
        
      
            提交事務(wù):
        
          commit
        
      
            回滾事務(wù):
        
          rollback
        
      
            設(shè)置自動(dòng)提交:
        
          set
        
         autocommit 1 | 0 
      
            atuoCommit系統(tǒng)默認(rèn)是1立即提交模式;如果要手動(dòng)控制事務(wù),需要設(shè)置set autoCommit 0;
      
            這樣我們就可以用commit、rollback來控制事務(wù)了。
      
        ?
      
        在一段語句塊中禁用autocommit 而不是set autocommit
      
        
          start
        
        
          transaction
        
        ;
      
        
          select
        
         @
        
          result
        
         := 
        
          avg
        
        (age) 
        
          from
        
         temp;
      
        
          update
        
         temp 
        
          set
        
         age = @
        
          result
        
        
          where
        
         id = 2;
      
        
          select
        
         * 
        
          from
        
         temp 
        
          where
        
         id = 2;
        
          //值被改變
        
      
        
          rollback
        
        ;
        
          //回滾
        
      
        
          select
        
         * 
        
          from
        
         temp 
        
          where
        
         id = 2;
        
          //變回來了
        
      
        在此期間只有遇到commit、
        
          rollback
        
          start
        
         Transaction的禁用autocommit才會(huì)結(jié)束。然后就恢復(fù)到原來的autocommit模式;
      
        ?
      
        不能回滾的語句
      
            有些語句不能被回滾。通常,這些語句包括數(shù)據(jù)定義語言(DDL)語句,比如創(chuàng)建或取消數(shù)據(jù)庫的語句,
      
            和創(chuàng)建、取消或更改表或存儲(chǔ)的子程序的語句。
      
            您在設(shè)計(jì)事務(wù)時(shí),不應(yīng)包含這類語句。如果您在事務(wù)的前部中發(fā)布了一個(gè)不能被回滾的語句,
      
            則后部的其它語句會(huì)發(fā)生錯(cuò)誤,在這些情況下,通過發(fā)布ROLLBACK語句不能 回滾事務(wù)的全部效果。
      
        ?
      
        一些操作也會(huì)隱式的提交事務(wù)
      
        如alter、
        
          create
        
          drop
        
        、rename 
        
          table
        
        、lock 
        
          table
        
          set
        
         autocommit、
        
          start
        
        
          transaction
        
          truncate
        
        
          table
        
         等等,
      
        在事務(wù)中出現(xiàn)這些語句也會(huì)提交事務(wù)的
      
            事務(wù)不能嵌套事務(wù)
      
            事務(wù)的保存點(diǎn)
      
        
          Savepoint
        
         pointName/
        
          Rollback
        
        
          to
        
        
          savepoint
        
         pointName
      
        一個(gè)事務(wù)可以設(shè)置多個(gè)保存點(diǎn),rollback可以回滾到指定的保存點(diǎn),恢復(fù)保存點(diǎn)后面的操作。
      
        如果有后面的保存點(diǎn)和前面的同名,則刪除前面的保存點(diǎn)。
      
        Release savepoint會(huì)刪除一個(gè)保存點(diǎn),如果在一段事務(wù)中執(zhí)行commit或rollback,則事務(wù)結(jié)束,所以保存點(diǎn)刪除。
      
        ?
      
        
          Set
        
         Transaction設(shè)計(jì)數(shù)據(jù)庫隔離級(jí)別
      
        
          SET
        
         [
        
          GLOBAL
        
         | 
        
          SESSION
        
        ] 
        
          TRANSACTION
        
        
          ISOLATION
        
        
          LEVEL
        
      
        { 
        
          READ
        
         UNCOMMITTED | 
        
          READ
        
         COMMITTED | REPEATABLE 
        
          READ
        
         | SERIALIZABLE }
      
        本語句用于設(shè)置事務(wù)隔離等級(jí),用于下一個(gè)事務(wù),或者用于當(dāng)前會(huì)話。
      
        在默認(rèn)情況下,
        
          SET
        
         TRANSACTION會(huì)為下一個(gè)事務(wù)(還未開始)設(shè)置隔離等級(jí)。
      
        如果您使用GLOBAL關(guān)鍵詞,則語句會(huì)設(shè)置全局性的默認(rèn)事務(wù)等級(jí),
      
        用于從該點(diǎn)以后創(chuàng)建的所有新連接。原有的連接不受影響。使用SESSION關(guān)鍵測(cè)可以設(shè)置默認(rèn)事務(wù)等級(jí),
      
        用于對(duì)當(dāng)前連接執(zhí)行的所有將來事務(wù)。
      
        默認(rèn)的等級(jí)是REPEATABLE READ全局隔離等級(jí)。
      

?

? 注釋

        
          select
        
         1+1;     # 單行注釋
      
        
          select
        
         1+1;     
        
          -- 單行注釋
        
      
        
          select
        
         1 
        
          /* 多行注釋 */ + 1;
        
      

? 基本數(shù)據(jù)類型操作

        字符串
      
        
          select
        
        
          'hello'
        
        , 
        
          '"hello"'
        
        , 
        
          '""hello""'
        
        , 
        
          'hel'
        
        
          'lo'
        
        , 
        
          '\'
        
        hello
        
          ';
        
      
            select "hello", "'hello
        
          '", "'
        
        
          'hello'
        
        
          '", "hel""lo", "\"hello";
        
      
        ?
      
        \n換行
      
            select 'This\nIs\nFour\nLines
        
          ';
        
      
        ?
      
        \轉(zhuǎn)義
      
            select 'hello \ world!
        
          ';
        
      
            select 'hello \world!
        
          ';
        
      
            select 'hello \\ world!
        
          ';
        
      
            select 'hello \
        
          ' world!'
        
        ;
      

? 設(shè)置數(shù)據(jù)庫mode模式

        
          SET
        
         sql_mode=
        
          'ANSI_QUOTES'
        
        ;
      
        
          create
        
        
          table
        
         t(a 
        
          int
        
        );
      
        
          create
        
        
          table
        
         "tt"(a 
        
          int
        
        );
      
        
          create
        
        
          table
        
         "t""t"(a 
        
          int
        
        );
      
        craate talbe tab("a""b" 
        
          int
        
        );
      

? 用戶變量

        
          set
        
         @num1 = 0, @num2 = 2, @
        
          result
        
         = 0; 
      
        
          select
        
         @
        
          result
        
         := (@num1 := 5) + @num2 := 3, @num1, @num2, @
        
          result
        
        ; 
      

? 存儲(chǔ)過程

        創(chuàng)建存儲(chǔ)過程:
      
        delimiter 
        
          //
        
      
        
          create
        
        
          procedure
        
        
          get
        
        (
        
          out
        
        
          result
        
        
          int
        
        )
      
        
          begin
        
      
        
          select
        
        
          max
        
        (age) 
        
          into
        
        
          result
        
        
          from
        
         temp;
      
        
          end
        
        
          //
        
      
        調(diào)用存儲(chǔ)過程:
      
        
          call
        
        
          get
        
        (@temp);
      
        查詢結(jié)果:
      
        
          select
        
         @temp;
      
        ?
      
        刪除存儲(chǔ)過程:
      
        
          drop
        
        
          procedure
        
        
          get
        
        ;
      
        ?
      
        查看存儲(chǔ)過程創(chuàng)建語句:
      
        show 
        
          create
        
        
          procedure
        
        
          get
        
        ;
      
        ?
      
        
          select
        
          into
        
         可以完成單行記錄的賦值:
      
        
          create
        
        
          procedure
        
         getRecord(sid 
        
          int
        
        )
      
        
          begin
        
      
        
          declare
        
         v_name 
        
          varchar
        
        (20) 
        
          default
        
        
          'jason'
        
        ;
      
        
          declare
        
         v_age 
        
          int
        
        ;
      
        
          declare
        
         v_sex 
        
          bit
        
        ;
      
        
          select
        
         name, age, sex 
        
          into
        
         v_name, v_age, v_sex 
        
          from
        
         temp 
        
          where
        
         id = sid;
      
        
          select
        
         v_name, v_age, v_sex;
      
        
          end
        
        ;
      
        
          call
        
         getRecord(1);
      

? 函數(shù)

        函數(shù)類似于存儲(chǔ)過程,只是調(diào)用方式不同
      
        例如:
        
          select
        
        
          max
        
        (age) 
        
          from
        
         temp;
      
        ?
      
        創(chuàng)建函數(shù):
      
        
          create
        
        
          function
        
         addAge(age 
        
          int
        
        ) 
        
          returns
        
        
          int
        
      
        
          return
        
         age + 5;
      
        ?
      
        使用函數(shù):
      
        
          select
        
         addAge(age) 
        
          from
        
         temp;
      
        ?
      
        刪除函數(shù):
      
        
          drop
        
        
          function
        
        
          if
        
        
          exists
        
         addAge;
      
        
          drop
        
        
          function
        
         addAge;
      
        ?
      
        顯示創(chuàng)建語法:
      
        show 
        
          create
        
        
          function
        
         addAge; 
      

? 游標(biāo)

        聲明游標(biāo):
        
          declare
        
         cur_Name 
        
          cursor
        
        
          for
        
        
          select
        
         name 
        
          from
        
         temp;
      
        打開游標(biāo):
        
          open
        
         cur_Name;
      
        Fetch游標(biāo):
        
          fetch
        
         cur_Name 
        
          into
        
         @temp;
      
        關(guān)閉游標(biāo):
        
          close
        
         cur_Name;
      
        ?
      
        示例:
      
        
          CREATE
        
        
          PROCEDURE
        
         cur_show()
      
        
          BEGIN
        
      
        
          DECLARE
        
         done 
        
          INT
        
        
          DEFAULT
        
         0;
      
        
          DECLARE
        
         v_id, v_age 
        
          INT
        
        ;
      
        
          DECLARE
        
         v_name 
        
          varchar
        
        (20);
      
        
          DECLARE
        
         cur_temp 
        
          CURSOR
        
        
          FOR
        
        
          SELECT
        
         id, name, age 
        
          FROM
        
         temp;
      
        
          DECLARE
        
        
          CONTINUE
        
         HANDLER 
        
          FOR
        
        
          SQLSTATE
        
        
          '02000'
        
        
          SET
        
         done = 1;
      
      
        
          OPEN
        
         cur_temp;
      
      
          REPEAT
      
        
          FETCH
        
         cur_temp 
        
          INTO
        
         v_id, v_name, v_age;
      
        
          IF
        
        
          NOT
        
         done 
        
          THEN
        
      
        
          IF
        
         isnull(v_name) 
        
          THEN
        
      
        
          update
        
         temp 
        
          set
        
         name = concat(
        
          'test-json'
        
        , v_id) 
        
          where
        
         id = v_id;
      
               ELSEIF isnull(v_age) 
        
          THEN
        
      
        
          update
        
         temp 
        
          set
        
         age = 22 
        
          where
        
         id = v_id;
      
        
          END
        
        
          IF
        
        ;
      
        
          END
        
        
          IF
        
        ;
      
          UNTIL done 
        
          END
        
         REPEAT;
      
      
        
          CLOSE
        
         cur_temp;
      
        
          END
        
      

? 觸發(fā)器

        觸發(fā)器分為insert、
        
          update
        
        、delete三種觸發(fā)器事件類型
      
        還有after、before觸發(fā)時(shí)間
      
        創(chuàng)建觸發(fā)器:
      
        
          create
        
        
          trigger
        
         trg_temp_ins
      
        
          before
        
         insert
      
        
          on
        
         temp 
        
          for
        
        
          each
        
        
          row
        
      
        
          begin
        
      
        insert 
        
          into
        
         temp_log 
        
          values
        
        (
        
          NEW
        
        .id, 
        
          NEW
        
        .name);
      
        
          end
        
        
          //
        
      
        ?
      
        刪除觸發(fā)器:
      
        
          drop
        
        
          trigger
        
         trg_temp_ins
      

MySQL學(xué)習(xí)筆記二


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲国产欧美国产综合一区 | 日韩欧美印度一级毛片 | 日韩亚洲欧洲在线rrrr片 | 99尹人香蕉国产免费天天拍 | 成人免费视频一区二区三区 | 天天视频黄 | 色五月天天 | 深夜福利在线看 | 亚洲最大免费视频网 | 免费刺激性视频大片区 | 国外欧美一区另类中文字幕 | 国产综合欧美日韩视频一区 | 五月天在线免费视频 | 99久久精品久久久久久清纯 | 国语毛片 | 国内精品久久久久久影院网站小说 | 亚洲夂夂婷婷色拍ww47 | 精品国产91在线网 | 在线视频福利 | 亚洲精品不卡午夜精品 | 成人特级毛片69免费观看 | 日日日日日操 | 免费h片在线观看 | 欧美高清69hd | 久久久久免费精品国产小说 | 日韩一级欧美一级毛片在线 | 国产成人精品免费视频大 | 久久精品女人天堂 | 国产尤物 | 成人国产精品毛片 | 日日射影院 | 四虎影视1515hh四虎免费 | 日韩精品在线视频观看 | 国产成+人欧美+综合在线观看 | 天天射天天爱天天干 | 国产精品天天影视久久综合网 | 99久久国产综合精品麻豆 | 亚洲免费在线观看 | 奇米777me | 日本精品二区 | 国产羞羞视频在线播放 |