Mysql基础--知识树

一、变量和基本数据类型

1、变量

  • 用户自定义变量

    • 局部变量
      • 声明: 用户自定义变量的声明方法形如:@var_name,其中变量名称由字母、数字、“.”、“_”和“$”组成。当然,在以字符串或者标识符引用时也可以包含其他字符(例如:@'my-var',@"my-var",或者@my-var

      • 变量的赋值方式:一种是直接用"="号,另一种是用":="号。
        1 )使用set命令对用户变量进行赋值时,两种方式都可以使用.
        2 )当使用select语句对用户变量进行赋值时,只能使用:=方式,因为在select语句中,=号被看作是比较操作符。

      • 定义:在sql语句块中有效的变量,例如在函数和存储过程的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;
      
    • 会话变量
      • 定义:会话变量即为服务器为每个客户端连接维护的变量。在客户端连接时,使用相应全局变量的当前值对客户端的回话变量进行初始化。设置会话变量不需要特殊权限,但客户端只能更改自己的会话变量。其作用域与生命周期均限于当前客户端连接。(注:用户自定义的会话变量是存在进程内存中的)
      • 声明: 用户自定义会话变量的声明方法形如:@var_name,其中变量名称由字母、数字、“.”、“_”和“$”组成。当然,在以字符串或者标识符引用时也可以包含其他字符(例如:@'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%"
      

系统变量

  • 会话变量
  • 全局变量
    • 变量的赋值:
      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、基本数据类型

  • 整数
    • int
    • long
  • 浮点数
    • float
    • double
  • 字符串
    • varchar
  • 文本类型
    • text
  • 二进制流类型
    • varbinary
    • blog
  • 时间类型
    • time
    • date

二、流程控制语句

  • if语句
    1、形式:

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

    2、example:

     drop procedure if exists test_if;
     delimiter // --(注:重新定义分界符为//,默认的为;)
     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 // --(注:重新定义分界符为//,默认的为;)
     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循环
    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循环

    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循环语句
    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;
    

三、运算符

  • 算数运算符
    +、-、*、/、DIV(x1,x2)除法运算、%、MOD(x1,x2)求余运算。
  • 比较运算符
    =、<>或!=、>、>=、<、<=、IS NULL、IS NOT NULL、BETWEEN AND、 IN、 LIKE、REGEXP(注:正则表达式;格式:x1 regexp 正则表达式,判断x1是否与正则表达式匹配。)。
  • 逻辑运算符
    &&或and 、!或not 、||或or 、xor(注:异或。)。
  • 位运算符
    & 、| 、~ (注:按位取反)、^(注:按位异或) 、<< 、>>。
  • 运算符的优先级
    优先级从高到底:
    0、()
    1、!
    2、~
    3、^
    4、*、/、DIV(x1,x2)除法运算、%、MOD(x1,x2)求余运算
    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变量赋值语句。)

三、表达式

  • 赋值表达式
    • "=":
      set  a = 3;
      declare a int default 0;
      
    • ":=" :select变量赋值语句;
      select a := 3*4;
      

四、关键字

  • DCL

    • create database database _name
    • drop database database _name if exists database_name
    • show databases (注:输出数据库所有表--包括系统表和用户表。)
    • show variables like 'have%' (注:查询mysql支持的所有引擎。)
    • create table table_name(
      属性名 数据类型 [完整性约束条件],
      属性名 数据类型 [完整性约束条件],
      属性名 数据类型 [完整性约束条件]
      );
    • delete table table_name
    • describe table_name (注:查看表的基本定义。)
    • show create table table_name (注:查看表的详细定义。)
    • alter table old_table_name rename new_table_name(注:修改表名。)
    • alter table table_name change old_column_name old_column_name 数据类型
    • alter table table_name drop 属性名 (注:删除字段)
    • alter table table_name engine = 存储引擎名
    • use ·database_name· (注:确定到具体某一个数据库)
  • DML

    • select : 用以输出结果,相当于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

  • 其他关键字

    • having
    • group by
    • order by
    • distinct
    • with {cube|rollup}
    • limit : 取出指定行的记录,并将记录结果返回。
    • on
    • join
    • delimiter
    • begin sqlStates end

五、函数、存储过程、触发器和定时器(既创建事件用以定期执行任务)

  1. 存储过程
    • 定义:存储过程是一组sql语句的集合,经编译创建并保存到数据库中,用户可以指定储存过程名字并给定参数(需要时传递)。
    • 创建存储过程
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]

实例:
delimiter //  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
BEGIN
DELETE FROM MATCHES
WHERE playerno = p_playerno;
END//
  • 存储过程体
    • 定义:存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等;过程体格式:以begin开始,以end结束(可嵌套)。
      (注:每个嵌套块及其中的每条语句,必须以分号结束,表示过程体结束的begin-end块(又叫做复合语句compound statement),则不需要分号。)
    • 例如:
    BEGIN
       BEGIN
      BEGIN
        declare a  = 2;
                    declare b = 5 ;
                    select a= a+ b;
     END
  END
  END
  • 存储过程的参数:
    存储过程可以有0个或多个参数,用于存储过程的定义。
    3种参数类型:
    IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)。
    OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)。
    INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)。
  1. 函数
    • 定义:函数是一组sql语句的集合,经编译创建并保存到数据库中,用户可以指定函数名字并给定参数(需要时传递),与存储过程不同的函数参数只能用in,不能用out后inout,且函数有返回值,只能是一个值。
    • 创建存储过程
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. 触发器
  • 定义:是由insert、update、delete事件触发某种特定操作,这种特定操作是sql语句块。
  • 语法格式:
create  trigger  触发器名   before | after 触发事件  on table_name  for 
 each  row
  1. 定时器
  • 查看event是否开启

show variables like '%sche%';
创建事件 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) -- 每天凌晨执行
on completion preserve
do call fw_shop_day(); -- 需要执行的存储过程

-关闭事件任务

alter event e_fw_shop_day ON
COMPLETION PRESERVE DISABLE;

-开户事件任务

alter event e_fw_shop_day ON
COMPLETION PRESERVE ENABLE;

六、异常、游标、索引

七、常用函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容