MySQL-3.运算符和数据类型

本文地址:https://www.jianshu.com/p/449d7b974a35

一、运算符

MySQL中主要有四种运算符,分别是:

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符

算术运算符

算术运算符 + - * / %
作用 取余

比较运算符

比较运算符 作用 示例
= 等于 Id=5
> 大于 Id>5
< 小于 Id<5
>= 大于等于 Id>=5
<= 小于等于 Id<=5
!=<> 不等于 Id!=5
IS NULL NULL Id IS NULL
IS NOT NULL 不为NULL Id IS NOT NULL
BETWEEN AND 在...范围之间 Id BETWEEN 10 AND 15
IN 在...列表中 Id IN (3,4,5)
NOT IN 不在...列表中 Id NOT IN (3,4,5)
LIKE 模式匹配 Name LIKE 'brow_'
NOT LIKE 模式匹配 Name NOT LIKE 'brow_'
REGEXP 正则表达式匹配 Name REGEXP '^bro'

逻辑运算符

逻辑运算符 &&AND !NOT ||OR XOR
作用 异或

位运算符

位运算符 & | ~ ^ << >>
作用 按位与 按位或 按位取反 按位异或 按位左移 按位右移

二、数据类型

在建表之前,我们首先要弄清楚MySQL的数据类型,在MySQL中,任何数据都有自己的数据类型。

每一张数据表中都有一个或多个字段,而每个字段都有一个特定的数据类型。 MySQL主要提供了大致三大类数据类型:数值类型,字符类型和日期类型。MySQL中的每种数据都可以通过以下特征来确定类型:

  • 用来表示的数据值
  • 占用的空间以及值是固定长度还是可变长度
  • 数据类型的值是否可以被索引
  • MySQL如何比较特定数据类型的值

字符类型

CHAR和VARCHAR

CHARVARCHAR类型是字符类型中使用的主力,两者的差别主要体现在存储和检索的方式,存储的最大长度以及是否在右方补齐空格。在声明字段时,都可以使用CHAR(M)VARCHAR(M)来指定存储的最大字符长度。

CHAR能够存储的字符长度范围为0-255,且存储的长度在指定之后为固定值,占用存储空间也会固定。如下方列表所示,在存储的值没有达到指定值时,会在字符串右方补齐空格,而在检索的时候,右方补齐的空格会被删掉。

VARCHAR能存储的字符长度范围为0-65535,VARCHARCHAR最大的区别就是VARCHAR存储的字符长度是可变的,存储的空间大小也相对应是可变的。原理是当字符长度在0-255范围时,VARCHAR会使用一个字节来记录字符的长度,当长度超过255时,VARCHAR会使用两个字节来记录字符的长度。

存储的值 CHAR(4) 占用存储空间 VARCHAR(4) 占用存储空间
'' ' ' 4 bytes '' 1 byte
'ab' 'ab ' 4 bytes 'ab' 3 bytes
'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes

在具体的使用场景中,如果字段的长度是固定的话,那么使用CHAR占用的空间更少,而如果字段的长度是不固定的话,那么VARCHAR会更省空间。

BLOB和TEXT

BLOB表示的是二进制字符串(byte strings),TEXT表示的则是非二进制字符串,也就是普通的字符串。BLOBTEXT都分别有四个类型,类型间的区别只是长度的区别。

L表示插入的字符串实际占用的字节大小。

数据类型 占用存储空间
TINYBLOBTINYTEXT 当L < 2的8次方,需要L + 1字节
BLOBTEXT 当L < 2的16次方,需要L + 2字节
MEDIUMBLOBMEDIUMTEXT 当L < 2的24次方,需要L + 3字节
LONGBLOBLONGTEXT 当L < 2的32次方,需要L + 4字节

大多数情况下,TEXTVARCHAR基本可以等同,它们的区别主要有两个方面:

  • BLOBTEXT不能设置默认值。
  • BLOBTEXT的索引,必须指定索引长度。

ENUM

枚举类型,声明枚举类型的字段可以指定一个由字符串组成的列表,则之后插入的值只能在指定的字符串中选择。


数值类型

在MySQL中,你可以找到所有SQL标准数字类型,包括精确数字数据类型和近似数字数据类型,包括整数,定点和浮点数。 此外,MySQL还具有用于存储位值的BIT数据类型。数字类型可以是有符号或无符号,但BIT类型除外。

整形

MySQL中不同类型的整形,能储存的最大数字范围不同,占用存储空间的大小也不同。同样的,如果需要表示负值,跟不表示负值,能表示的数值范围也不同。

类型 存储大小(字节) 有符号最小值 无符号最小值 无符号最大值 无符号最大值
TINYINT 1 -128 0 127 255
SMALLINT 2 -32768 0 32767 65535
MEDIUMINT 3 -8388608 0 8388607 16777215
INT 4 -2147483648 0 2147483647 4294967295
BIGINT 8 -2的63次方 0 2的63次方-1 2的64次方-1

浮点型

浮点型数值类型主要两种,FlOATDOUBLE类型,分别表示单精度和双精度数值。由于计算机无法精确表示无限小数,所以这也被成为近似数值类型。

FLOAT类型可以表示精度在0-23范围内的单精度数值,存储时占四个字节大小。

DOUBLE类型可以表示精度在24-53范围内的双精度数值,存储时占八个字节大小。

浮点型数据可以使用一种非标准的语法来指定数据的精度,例如FLOAT(M,D)DOUBLE(M,D)。在这里M值指的是整个数字的最大位数,N值指的是小数部分的最大位数,如FLOAT(7,4)能表示的最大数值是999.9999。同时,MySQL采用四舍五入,如果把999.00009插入到FLOAT(7,4)中,那么最终保存的结果是999.0001。

定点型

由于有一些应用场景需要精确的数字,所以就有了DECIMAL类型,主要用来表示精确小数。

DECIMAL同样能使用跟浮点数一样的语法来指定数据的精度,如DECIMAL(M,D)。需要注意的是DECIMAL最大能表示的位数为65,但是DECIMAL默认的限制位数为DECIMAL(10,0),所以如果要表示更大的位数,需要自行指定。


日期类型

数据类型 描述
DATE() 日期。格式:YYYY-MM-DD注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
DATETIME() 日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS注释:*支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP() 时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的秒数来存储。格式:YYYY-MM-DD HH:MM:SS注释:*支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME() 时间。格式:HH:MM:SS注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
YEAR() 2 位或 4 位格式的年。注释: 4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。

你可能感兴趣的:(MySQL-3.运算符和数据类型)