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

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,797评论 5 116
  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 3,156评论 0 33
  • 良好的逻辑设计和物理设计是高性能的基石, 应该根据系统将要执行的查询语句来设计schema, 这往往需要权衡各种因...
    好好学习Sun阅读 432评论 0 2
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,035评论 0 19
  • 1: 清早被布谷鸟叫醒。布谷 ,布谷的节奏从屋顶清晰地穿进耳朵 ,惊动了梦,人就醒了。睁眼,窗户缝隙微光透进,四维...
    巧语妮音阅读 677评论 8 5