三、数据类和运算符

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

  • 对于整数类型,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中需要输入特殊符号如单引号、双引号、或者反斜线时注意使用转义字符

原文地址:https://www.cnblogs.com/jdy1022/p/14023483.html