zoukankan      html  css  js  c++  java
  • 三、数据类和运算符

    数据类型描述使用以下约定:

    • 对于整数类型,M表示最大显示宽度。对于浮点和定点类型, M是可以存储的总位数(精度)。对于字符串类型, M是最大长度
    • D适用于浮点和定点类型,并指示小数点后的位数(小数位数)。可能的最大值是30,但不应大于 M-2。
    • fsp适用于 TIME, DATETIME和 TIMESTAMP类型和表示小数精度秒; 也就是说,小数点后的位数是秒的小数部分。fsp如果给出值,则该值必须在0到6的范围内。值0表示没有小数部分。如果省略,则默认精度为0。(这与标准SQL默认值6不同,以便与以前的MySQL版本兼容。)
    • 方括号([和])表示类型定义的可选部分。

    一、数据类型介绍

    1.1、数值数据类型

    (1)、整数类型(精确值) 

      数值型数据主要用来存数字。整数类型的属性字段可以添加AUTO_INCREMENT自增约束条件

    类型名称储存空间(位元组)取值范围
    TINYINT 1个字节。 0-255(2^8-1)
    SMALLINT 2个字节 0-65535
    MEDIUMINT 3个字节 0-16777215
    INT(INTEGER) 4个字节。 0-4294967295
    BIGINT(大整数) 8个字节。 0-18446744073709551615(2^64-1)

                                                                  18446744073709551616

      INT(11)中11表示的是该数据类型指定的显示宽度,数值的位数小于指定的宽度时,会由空格填充,如果插入大于显示宽度,只要该值不超过该类型整数的取值范围,数值依然可以插入而且能够显示出来。

    (2)、定点数类型(精确值)

      DECIMALNUMERIC 类型的存储精确的数值数据。保留精确度很重要时,例如使用货币数据。

    DECIMAL(M,N)。

      浮点类型和定点类型都可以用(M,N)来表示,其中M称为精度,表示总共的位数;N称为标度,是表示最小数的位数。

    salary DECIMAL5,2

      5是精度, 2是小数位数。精度表示值存储的有效位数,小数位数表示小数点后可以存储的位数。标准SQL要求DECIMAL(5,2)能够存储具有五位数字和两位小数的任何值,因此可以存储在salary 列中的值的范围是从-999.99到 999.99。

    (3)、浮点数类型

      • 浮点数分为两种:
        • 单精度浮点类型(FLOAT(M,N))
        • 单精度浮点类型(FLOAT(M,N))

      在MySQL中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币,科学数据等)使用DECIMAL的类型比较好。另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点型时要注意。

    1.2、日期与时间类型

    • YEAR
      YEAR存储时只需要一个字节
      • 以4位字符串或者4位数字格式表示YEAR 范围为 1901~2155。  
      • 以2位字符串表示 "00"~"69" 代表2000~2069 "70"~"99"代表1970~1999
    CREATE TABLE year_test(yt YEAR);
    INSERT INTO year_test VALUES(1925);
    INSERT INTO year_test VALUES(33);
    INSERT INTO year_test VALUES(88);
    SELECT * FROM year_test;
    • TIME
      TIME类型用于只需要时间信息的值,在存储时需要3个字节。格式HH:MM:SS的字符TIME类型的取值范围为-838:59:59~838:59:59,TIME类型不仅可以用于表示一天的时间,还可是两个事件之间的时间间隔。TIME可以是“HHMMSS”格式的、间隔的字符串,或者,HHMMSS格式的数据,假定是有意义的时间。
      TIME分配简写值时注意啊,例如数值1122如果没有冒号,MySQL解释值时,假定最右边的两位是秒,解释为过去的时间1122 解释为 0:11:22。如果有冒号则解释为当天的时间则解释为11:22:00
    -- 建表
    CREATE TABLE timetest(t time);
    
    -- 插入数据
    insert into timetest VALUES('10:05:05'),('23:23'),('2 10:10'),('3 02'),('10');
    
    -- 查询
    SELECT * FROM timetest
    • DATE
      DATE类型用在仅需要日期值时,没有时间部分,在存储时需要3个字节。在给DATE类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,但要符合DATE的日期格式。
    --格式:
    --字符串类型 “”、“”、“”、“”
    -- 数字类型YY-MM-DD 或者YYMMDD
    
    CREATE TABLE datetest(datatest DATE);
    
    INSERT INTO datetest VALUES('2019-08-12'),('20190812'),('190812'),(CURRENT_DATE),(NOW());
    
    SELECT * FROM datetest
    • DATETIME 

      DATETIME类型用在需要同时包含日期和时间信息的值,存储时需要8个字节,格式YYYY-MM-DD HH:MM:SS,在给DATETIME类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入

      MySQL允许“不严格”语法。任何标点符号都可以用作日期部分或者时间部分之间的间隔符。

    • TIMESTAMP
      TIMESTAMP的显示格式与DATETIME相同,但是TIMESTAMP列的取值范围小于DATETIME的取值范围 DATETIME存储日期数据时,按实际输入的格式存储,与时区无关而TIMESTAMP值的存储时以UTC格式保存的存储时对当前时区进行转换,检索时再转回当前时区。就是说,查询时,根据当前时区的不同,显示的时间值不同

    1.3、文本字符串类型

      字符串类型除了存储字符串数据外,还可以存储比如图片、声音的二进制数据。MySQL中支持两类字符串数据:文本字符串、二进制字符串。 MySQl中文本字符串有:CHAR、VARCHAR、TEXT、ENUM、SET。VARCHAR和TEXT类型是变长类型,对于其存储需求取决于列值的实际长度,而不是取决于类型的最大可能尺寸。

    • CHAR和VARCHAR
      • CHAR(M)固定长度字符串,在定义时指定字符串列长。当保存时在右侧填充空格以达到指定的长度。M(0-255)表示类长度。当检索CHAR值时,尾部的空格被删除。 
      • VARCAHR(M)长度可变的字符串,M(0-65535)表示最大列长度。M的返回时0~65535。VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而其实际上占用的空间为字符串的实际长度+1.VARCHAR在值保存和检索时尾部的空格仍保留。
      • 例如VARCHAR(50)定义一个最大长度为50的字符串,如果插入的字符串只有10个字符,则实际存储的的字符串为10个字符和一个字符串结束字符,VARCHAR在值的保存和检索时尾部的空格仍保留。

    CREATE TABLE char_test(charColumn CHAR(4));
    
    INSERT INTO char_test VALUES('abcde');

    char /varchar类型列插入的数值如果超过定义是指定的长度,插入不进去

    • TEXT类型
      保存如文章内容,评论等。当保存或查询时,不删除尾部空格。

    • ENUM类型
      是一个字符串对象,其值在创建时再列规定中枚举一个值。
    -- 语法:字段名 ENUM ('值1','值2','值3'......)
    create table enum_test(e enum('1','2','3'));

      ENUM类型的字段在取值时,只能在制定的枚举列表中取(insert的值的枚举的索引),而且一次只能去一个,如果创建的成员中有空格时,其尾部的空格将自动被删除,ENUM值在内部用整数表示,每一个枚举值均有一个索引,列表值所允许的成员值从1开始编号。ENUM值一种列索引顺序排列,并且空字符串排在非空字符串前,NULL值排在其他所有枚举值前

    • SET类型
      SET是一个字符串对象,可以有零个或多个值,最多可以有64个成员。
    -- 语法:字段名 SET('值1','值2','值3'.....'值n')
     create table set_test(st set('1','2','3'));
     ENUMSET
    相同 内部用整数表示,列表中每一个值有一个索引编号。当创建表时,SET成员值的尾部空格将会自动删除
    不同 ENUM类型字段只能从定的列中选择一个值插入 SET类型的列可以从定义的列值中选择多个字符,如果插入SET字段中的列值重复,
    则MySQL自动删除重复的值,插入SET字段值的顺序并并不重要,
    MySQL会在存入数据时,按照定义的顺序显示。

    1.4、二进制字符串类型

    • BIT类型
      BIT类型是位字段类型。M表示每个值的位数,范围为1~64如果M省略,默认为1.如果为BIT(M)列分配的值的长度小于M位,在值的左边用0填充。
    • BINARY和VARBINARY类型
    -- 列名称  BINNARY(M)或者 VARBINARY(M)
    BINNARY 长度固定,不足长度右边用补齐
    VARBINARY长度可变
    • BLOB
      是一个二进制大对象,用来存储可变量的数据。

    二、如何选择数据类型

    2.1、CHAR 和VARCHAR之间的选择

    • 区别
      CHAR是固定长度字符,VARCHAR是可变长度字符。 检索时CHAR会自动删除插入数据的尾部空格,VARCHAR不会删除尾部空格 CAHR是固定长度,索引它的处理速度比VARCHAR的速度快,但是缺点就是浪费空间,对存储不大,速度有要求的则用CHAR反之用VARCHAR

    • 存储引擎对CHAR和VARCAHR的影响
      对于MyISAM存储引擎:最好使用固定长度的数据列代替可变长度的数据列。这样可以是整个表静态化,从而使数据检索更快,用空间换时间。

    2.2、ENUM 和SET

      ENUM 是存储在多选一类型 SET是多选多类型 ENUM和SET的值是一字符串形式出现的,但在内部,MySQL以数值的形式存储。

    2.3、BLOB和TEXT

      都是存储大容量信息的。BLOB主要存储图片、音频文件。TEXT只能存储纯文本

    三、比较运算符

    1. 等于运算符 等号用来判断数字、字符串、和表达式是否相等。相等返回1 不等返回0;比较字符串 不区分大小 写,不能用空值NULL的判断。

    2. 完全等于<=> 比等于加个判空处理,两边都为空则返回1,否则0。

    3. 不等于 != 后者<> 用来判断数字、字符串、和表达式是否不相等,相等返回0 不等返回1

    4. IS NUllIS NOT NULL 检验值是否为空

    5. BETWEEN..AND...

    6. LEAST语法 LEAST(值1,值2,......,值n);返回最小值。

    7. GREATEST(值1,值2,.....);返回最大值。

    8. IN 、NOT IN

    9. LIKE

    10. REGEXP用来匹配字符串 expr REGEXP 匹配条件 通配符

      • ^ 匹配以该字符后面字符开头的字符串、

      • $ 匹配以该字符后面的字符结尾的字符串。

      • .匹配任意单个字符

      • [...] 匹配在方括号内的任意字符。[abc] 匹配a,b,c[a-z]匹配任一字母,[0-9]匹 配任意数字

      • 匹配零个多多个在他前面的字符。例如X,匹配人一多个X.[0-9]*,匹配任意多个数字。

    在MySQL中需要输入特殊符号如单引号、双引号、或者反斜线时注意使用转义字符

  • 相关阅读:
    C#窗体和控件都可以收到键盘键盘消息
    C#中结构和类成员指针的内存分配
    C# 中的委托和事件
    C# 函数 传入 C++动态库中 做回调函数
    CommunityServer的登录页面
    Oracle数据库Clob字段的更新操作
    .net程序员面试题,基本上是基础概念题
    取得一段汉语的每个字的首字母
    查找CommunityServer论坛新帖提交页面的包含文件
    ASP.NET 2.0 的内部变化
  • 原文地址:https://www.cnblogs.com/jdy1022/p/14023483.html
Copyright © 2011-2022 走看看