数据类型与变量

1.数据类型

  • 整型
    • 如果不设置无符号还是有符号,默认为有符号,如果想设置无符号,需要添加关键字unsigned
    • 如果插入的数值超出整型范围,out of range 并且自动插入临界值
    • 如果不设置类型长度,会默认设置长度
    • 长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用
      整数类型 字节
      tinyint 1
      smallint 3
      smallint 3
      int、interger 4
      Bigint 8
  • 小数
    • M代表整数部位+小数部位的长度
    • D代表小数部位长度
    • M和D都可省略,如果是定点型的话,M默认为10,D默认为0;如果是float和double,则会根据插入的数值精度来决定
    • 定点型精度较高,如果要求精度或进行货币运算优先使用decimal
      浮点型类型 字节
      float 4
      double 8
      定点数类型 字节
      DEC(M,D)/DECIMAL(M,D) M+2
      Bigint 8
  • 字符型
    • 较短的文本:char、varchar;
    • binary和varbinary用于保存较短的二进制;
    • enum用于保存枚举;set用于保存集合
      类型 写法 M的意思 特点 耗费空间 效率
      char char(M) 最大字符数,可以省略,默认为1 固定长度的字符 比较耗费
      varchar varchar(M) 最大字符数,不可以省略 可变长度的字符 比较节省
  • 日期时间
日期和时间类型 字节
date(只保存日期) 4
datetime(只能反映出插入时的当地时区,保存日期+时间,范围1000~9999) 8
timestamp(支持的时间范围较小,和实际时区有关,更能反映实际日期,受版本影响,保存日期+时间,范围1970-2038) 4
time(只保存时间) 3
year(只保存年) 1

2. 变量

  • 系统变量:变量由系统提供,不是用户自定义,属于服务器层面
      • 全局变量:服务器每次启动时将为所有的全局变量赋初始值,针对于所有的会话(连接)有效,但不能跨重启
      • 会话变量:仅仅针对于当前会话(连接)有效
      • 使用语法:如果是全局级别需要加global,会话级别可加可不加session .
    -- 查看所有的系统变量 
    show global/【session】 variables;
    -- 查看满足条件的部分系统变量 
    show global/【session】 variables like "%char%"; 
    -- 查看指定的某个系统变量的值 
    select @@global.系统变量名; 
    -- 给某个系统变量赋值 
    set global/【session】系统变量名= 值; 
    set global/【session】.系统变量名= 值;
  • 用户变量:针对于当前会话(连接)有效,等同于会话变量的作用域。可以放在begin end中也可外放,不用限定类型
    -- 声明并初始化  
        set @用户变量名=值; 
        set @用户变量名:=值;  
        select @用户变量名:=值;  
    -- 赋值(更新用户变量的值)
    -- 通过select或set  
        set @用户变量名=值; 
        set @用户变量名:=值;
        select @用户变量名:=值 ; 
    -- 通过select into  
        select 字段 into 变量名 
        from 表;  
    -- 查看  
        select @用户变量名;
  • 局部变量:仅仅在定义他的begin end中有效,应用在begin end中的第一句
    -- 声明  
        declare 变量名 类型;  
        declare 变量名 类型 default 值;
    --  赋值 
    -- 通过select或set  
        set 局部变量名=值;  
        set 局部变量名:=值;  
        select @局部变量名:=-- 通过select into  
        select 字段 into 局部变量名 
        from 表;  
    --  使用
        select 局部变量名;

3.流程控制

  • 分支控制
    • if 函数实现简单的双分支:执行顺序: 如果表达式1成立,则if 返回表达式2的值,否则返回表达式3的值。if 多分支结构,只能应用在begin end中
      if (表达式1,表达式2,表达式3);
      
      //if结构,只能应用在begin end中  
      if 条件1 then 语句1;
      elseif 条件2 then 语句2;
      ...  
      【else 语句n】  
      end if
    • case 结构实现等值判断或区间判断
      • 可以作为表达式嵌套在其他语句中使用,可以放在任何地方;可以作为独立的语句使用,只能放在begin end 中
      • 如果when 中的值满足或条件成立,则执行对应then 后面的语句,并结束case;如果都不满足,则执行else语句;else可省略,如果else省略并且所有when条件不满足,则返回null
        case 变量、表达式、字段 //实现等值判断 
        when 要判断的值1 then 返回值1; 
        when 要判断的值2 then 返回值2 ;
        ...
         else 返回值n;
        end
         -- 或者 
        case //实现区间判断 
        when 条件1 then 要显示的值1或语句1;
         when 条件2 then 要显示的值2或语句2;
         ... 
        else 要显示的值n或语句n;
        end
  • 循环控制:程序在满足一定条件的基础上,重复执行一段代码,只能放在begin end中(存储过程)
    • while:先判断后执行
      【标签:】while 循环条件  do
         循环体;
      end while 【标签】;
    • loop:模拟死循环
      --可以模拟简单的死循环
      【标签:】loop
         循环体;
      end loop 【标签】; 
    • repeat:先执行后判断
      【标签:】repeat 
         循环体;
      until 结束循环的条件
      end repeat 【标签】;
posted @ 2021-04-15 15:46  forever_fate  阅读(73)  评论(0)    收藏  举报