Mysql基礎(chǔ)--知識樹

一、變量和基本數(shù)據(jù)類型

1、變量

  • 用戶自定義變量

    • 局部變量
      • 聲明: 用戶自定義變量的聲明方法形如:@var_name,其中變量名稱由字母、數(shù)字、“.”、“_”和“$”組成。當(dāng)然,在以字符串或者標(biāo)識符引用時(shí)也可以包含其他字符(例如:@'my-var',@"my-var",或者@my-var

      • 變量的賦值方式:一種是直接用"="號,另一種是用":="號。
        1 )使用set命令對用戶變量進(jìn)行賦值時(shí),兩種方式都可以使用.
        2 )當(dāng)使用select語句對用戶變量進(jìn)行賦值時(shí),只能使用:=方式,因?yàn)樵趕elect語句中,=號被看作是比較操作符。

      • 定義:在sql語句塊中有效的變量,例如在函數(shù)和存儲過程的begin和end中的語句塊。

        use `DataBase_name`;
        set FOREIGN_KEY_CHECKS = 0;(注:取消外鍵約束)
      
       drop procedure if exists countLines;(注:如果存在存儲過程 
       countLines,就刪除它。)
       create procedure countLines(in a int,in b int)
       begin
       declare c int default 0;
       set c = a + b;
       select c as c;
       end;
      
    • 會(huì)話變量
      • 定義:會(huì)話變量即為服務(wù)器為每個(gè)客戶端連接維護(hù)的變量。在客戶端連接時(shí),使用相應(yīng)全局變量的當(dāng)前值對客戶端的回話變量進(jìn)行初始化。設(shè)置會(huì)話變量不需要特殊權(quán)限,但客戶端只能更改自己的會(huì)話變量。其作用域與生命周期均限于當(dāng)前客戶端連接。(注:用戶自定義的會(huì)話變量是存在進(jìn)程內(nèi)存中的)
      • 聲明: 用戶自定義會(huì)話變量的聲明方法形如:@var_name,其中變量名稱由字母、數(shù)字、“.”、“_”和“$”組成。當(dāng)然,在以字符串或者標(biāo)識符引用時(shí)也可以包含其他字符(例如:@'my-var',@"my-var",或者
      • 變量的賦值:
      set session var_name = value;
      set @@session.var_name = value;
      set var_name = value;
      
      • 變量的查詢
        select @@var_name;
        select @@session.var_name;
        show session variables like "%var%"
      

系統(tǒng)變量

  • 會(huì)話變量
  • 全局變量
    • 變量的賦值:
      set session var_name = value;
      set @@session.var_name = value;
      set var_name = value;
      
    • 變量的查詢
     select @@var_name;
     select @@session.var_name;
     show session variables like "%var%"
    

2、基本數(shù)據(jù)類型

  • 整數(shù)
    • int
    • long
  • 浮點(diǎn)數(shù)
    • float
    • double
  • 字符串
    • varchar
  • 文本類型
    • text
  • 二進(jìn)制流類型
    • varbinary
    • blog
  • 時(shí)間類型
    • time
    • date

二、流程控制語句

  • if語句
    1、形式:

      if condition then
      ...
      [else condition then]
      ...
       [else]
      ...
     end if
    

    2、example:

     drop procedure if exists test_if;
     delimiter // --(注:重新定義分界符為//,默認(rèn)的為;)
     create procedure test_if(in x int)
     begin
     if x=1 then
     select 'OK';
     elseif x=0 then
     select 'No';
     else 
     select 'good';
     end if;
     end //
     delimiter ;
     call test_if(0);
    
  • case語句
    1、形式:

      case value
      when value then ...
      [when value then...]
      [else...]
      end case
    

    2、example:

     drop procedure if exists test_case;
     delimiter // --(注:重新定義分界符為//,默認(rèn)的為;)
     create procedure test_case(in x int)
     begin  
     case x
     when 1 then select 'OK';
     when 0 then select 'No';
     else select 'good';
     end case;
     end //
     delimiter ;
     call test_case(0);
    
  • while循環(huán)
    1、形式:

     while condition do
     ...
     end while
    

    2、example:

    drop procedure if exists test_while;
    delimiter //
    create procedure test_while(out sum int)
    begin
    declare i int default 1;
    declare s int default 0;
    while i<=10 do
    set s = s+i;
    set i = i+1;
    end while;
    set sum = s;
    end;
    //
    delimiter ;
    call test_while(@s);
    select @s;
    
  • loop循環(huán)

    1、形式:

     loop
     ...
     end loop
    

    2、example:

     drop procedure if exists test_loop;
     delimiter //
     create procedure test_loop(out sum int)
     begin
     declare i int default 1;
     declare s int default 0;
     loop_label:loop
     set s = s+i;
     set i = i+1;
     if i>10 then leave loop_label;
     end if;
     end loop;
     set sum = s;
     end;
     //
     delimiter ;
     call test_loop(@s);
     select @s;
    
  • repeat循環(huán)語句
    1、形式:

     repeat
     ...
     until condition
     end repeat
    

    2、example:

        drop procedure if exists test_repeat;
        delimiter //
        create procedure test_repeat(out sum int)
        begin
        declare i int default 1;
        declare s int default 0;
        repeat
        set s = s+i;
        set i = i+1;
        until i>10 -- 此處不能有分號
        end repeat;
        set sum = s;
        end;
        //
        delimiter ;
       call test_repeat(@s);
       select @s;
    

三、運(yùn)算符

  • 算數(shù)運(yùn)算符
    +、-、*、/、DIV(x1,x2)除法運(yùn)算、%、MOD(x1,x2)求余運(yùn)算。
  • 比較運(yùn)算符
    =、<>或!=、>、>=、<、<=、IS NULL、IS NOT NULL、BETWEEN AND、 IN、 LIKE、REGEXP(注:正則表達(dá)式;格式:x1 regexp 正則表達(dá)式,判斷x1是否與正則表達(dá)式匹配。)。
  • 邏輯運(yùn)算符
    &&或and 、!或not 、||或or 、xor(注:異或。)。
  • 位運(yùn)算符
    & 、| 、~ (注:按位取反)、^(注:按位異或) 、<< 、>>。
  • 運(yùn)算符的優(yōu)先級
    優(yōu)先級從高到底:
    0、()
    1、!
    2、~
    3、^
    4、*、/、DIV(x1,x2)除法運(yùn)算、%、MOD(x1,x2)求余運(yùn)算
    5、+、-
    6、<< 、>>
    7、&
    8、|
    9、=、<>或!=、>、>=、<、<=、in、is null、like、regexp
    10、BETWEEN and 、case 、when 、then 、else
    11、not
    12、&&或and
    13、||或or 、xor(注:異或。)
    14、:=(注:select變量賦值語句。)

三、表達(dá)式

  • 賦值表達(dá)式
    • "=":
      set  a = 3;
      declare a int default 0;
      
    • ":=" :select變量賦值語句;
      select a := 3*4;
      

四、關(guān)鍵字

  • DCL

    • create database database _name
    • drop database database _name if exists database_name
    • show databases (注:輸出數(shù)據(jù)庫所有表--包括系統(tǒng)表和用戶表。)
    • show variables like 'have%' (注:查詢mysql支持的所有引擎。)
    • create table table_name(
      屬性名 數(shù)據(jù)類型 [完整性約束條件],
      屬性名 數(shù)據(jù)類型 [完整性約束條件],
      屬性名 數(shù)據(jù)類型 [完整性約束條件]
      );
    • delete table table_name
    • describe table_name (注:查看表的基本定義。)
    • show create table table_name (注:查看表的詳細(xì)定義。)
    • alter table old_table_name rename new_table_name(注:修改表名。)
    • alter table table_name change old_column_name old_column_name 數(shù)據(jù)類型
    • alter table table_name drop 屬性名 (注:刪除字段)
    • alter table table_name engine = 存儲引擎名
    • use ·database_name· (注:確定到具體某一個(gè)數(shù)據(jù)庫)
  • DML

    • select : 用以輸出結(jié)果,相當(dāng)于java中的println()。
    • from
    • where
    • delete
    • insert into table_name(column1,column2) values(value1,value2)
    • update table_name set .... where
    • delete from table_name [where]
  • DCL

  • 其他關(guān)鍵字

    • having
    • group by
    • order by
    • distinct
    • with {cube|rollup}
    • limit : 取出指定行的記錄,并將記錄結(jié)果返回。
    • on
    • join
    • delimiter
    • begin sqlStates end

五、函數(shù)、存儲過程、觸發(fā)器和定時(shí)器(既創(chuàng)建事件用以定期執(zhí)行任務(wù))

  1. 存儲過程
    • 定義:存儲過程是一組sql語句的集合,經(jīng)編譯創(chuàng)建并保存到數(shù)據(jù)庫中,用戶可以指定儲存過程名字并給定參數(shù)(需要時(shí)傳遞)。
    • 創(chuàng)建存儲過程
CREATE
   [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
   [characteristic ...] routine_body

proc_parameter:
   [ IN | OUT | INOUT ] param_name type

characteristic:
   COMMENT 'string'
 | LANGUAGE SQL
 | [NOT] DETERMINISTIC
 | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
 | SQL SECURITY { DEFINER | INVOKER }

routine_body:
  Valid SQL routine statement

[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

實(shí)例:
delimiter //  #將語句的結(jié)束符號從分號;臨時(shí)改為兩個(gè)$$(可以是自定義)
CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
BEGIN
DELETE FROM MATCHES
WHERE playerno = p_playerno;
END//
  • 存儲過程體
    • 定義:存儲過程體包含了在過程調(diào)用時(shí)必須執(zhí)行的語句,例如:dml、ddl語句,if-then-else和while-do語句、聲明變量的declare語句等;過程體格式:以begin開始,以end結(jié)束(可嵌套)。
      (注:每個(gè)嵌套塊及其中的每條語句,必須以分號結(jié)束,表示過程體結(jié)束的begin-end塊(又叫做復(fù)合語句compound statement),則不需要分號。)
    • 例如:
    BEGIN
       BEGIN
      BEGIN
        declare a  = 2;
                    declare b = 5 ;
                    select a= a+ b;
     END
  END
  END
  • 存儲過程的參數(shù):
    存儲過程可以有0個(gè)或多個(gè)參數(shù),用于存儲過程的定義。
    3種參數(shù)類型:
    IN輸入?yún)?shù):表示調(diào)用者向過程傳入值(傳入值可以是字面量或變量)。
    OUT輸出參數(shù):表示過程向調(diào)用者傳出值(可以返回多個(gè)值)(傳出值只能是變量)。
    INOUT輸入輸出參數(shù):既表示調(diào)用者向過程傳入值,又表示過程向調(diào)用者傳出值(值只能是變量)。
  1. 函數(shù)
    • 定義:函數(shù)是一組sql語句的集合,經(jīng)編譯創(chuàng)建并保存到數(shù)據(jù)庫中,用戶可以指定函數(shù)名字并給定參數(shù)(需要時(shí)傳遞),與存儲過程不同的函數(shù)參數(shù)只能用in,不能用out后inout,且函數(shù)有返回值,只能是一個(gè)值。
    • 創(chuàng)建存儲過程
CREATE
   [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
  RETURNS type
   [characteristic ...] routine_body

proc_parameter:
   [ IN ] param_name type

characteristic:
   COMMENT 'string'
 | LANGUAGE SQL
 | [NOT] DETERMINISTIC
 | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
 | SQL SECURITY { DEFINER | INVOKER }

routine_body:
  Valid SQL routine statement

[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]
  1. 觸發(fā)器
  • 定義:是由insert、update、delete事件觸發(fā)某種特定操作,這種特定操作是sql語句塊。
  • 語法格式:
create  trigger  觸發(fā)器名   before | after 觸發(fā)事件  on table_name  for 
 each  row
  1. 定時(shí)器
  • 查看event是否開啟

show variables like '%sche%';
創(chuàng)建事件 e_fw_shop_day

create event if not exists e_fw_shop_day -- 事件名稱
on schedule every 1 DAY STARTS date_add(date(curdate() + 1),interval 0 hour) -- 每天凌晨執(zhí)行
on completion preserve
do call fw_shop_day(); -- 需要執(zhí)行的存儲過程

-關(guān)閉事件任務(wù)

alter event e_fw_shop_day ON
COMPLETION PRESERVE DISABLE;

-開戶事件任務(wù)

alter event e_fw_shop_day ON
COMPLETION PRESERVE ENABLE;

六、異常、游標(biāo)、索引

七、常用函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容