一.数据类型和运算符
数据库表是由多列字段构成,每一个字段都是表的一个属性,每一列都指定了不用的数据类型。指定了数据类型之后,也就决定了向字段内插入的数据的内容。例如,插入的是数字的时候,既可以将它们存储为整数类型,也可以存储为字符串类型。不同的数据类型也决定了 mysql 在存储他们的时候使用的方式,以及在使用他们的时候选择什么运算符号进行运算。
二.数据类型
mysql支持多种数据类型,主要有:数值类型、日期\时间类型、字符串类型。
(1)数值数据类型:包括 整数类型的 (TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT),浮点小数类型的 (FLOAT、DOUBLE),定点小数类型的(DECIMAL)。
(2)时间\日期类型:包括YEAR、TIME、DATE、DATETIME和TIMESTAMP。
(3)字符串类型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。字符串类又分为文本字符串和二进制字符串。
1.整数类型
整数类型主要是用来存储数字的。不同类型的数值数据类型,提供不同的取值范围,可以存储的值得范围越大,其所需要的存储空间越大。每个数据类型后面的括号内的数字表示可以显示的数字的宽度,显示宽度只用于显示,不能限制取值范围和占用空间。
整型:
浮点型:FLOAT为单精度浮点型,DOUBLE为双精度浮点型。浮点型可以用(m,n)表示,m表示精度(可以一共保存几位),n表示精度(保留小数点后几位)
定点类型
2.日期与时间类型
(1).YEAR
YEAR类型是一个单字节类型,表示年,在存储时只需要一个字节,定义YEAR类型的几种格式:
(1)以4位字符串或者4位数字格式表示 YEAR。输入的格式为 YYYY 或者 ‘YYYY’。例如:输入‘2010’或2010,插入的数据均为2010.
(2)以2位字符串表示YEAR。输入的格式为‘YY’。范围是 ‘00’~‘99’,00~69表示2000~2069,70~99表示1970~1999。例如:输入‘0’ 和‘00’的效果是一样的,都输出的是2000。
(3)以2位数字格式表示YEAR。输入的格式为YY。范围是1~99,1~69表示2001~2069,70~99表示1970~1999。输入0则输出的是0000,而不是2000。非法YEAR值会被转换为0000。
(2).TIME
TIME类型用在只需要时间信息的值,存储的时候需要3个字节。格式为“HH-MM-SS”,HH表示小时,MM表示分钟,SS表示秒。TIME类型不仅可以用于表示一天的时间,还可以表示过去的几件或者两个事件之间的时间的间隔。定义DATE类型的几种格式:
(1)“D HH:MM:SS”格式的字符串。D表示日,天,可以取0~34之间的值。在插入数据时,D被转化成小时保存。即D*24+HH。
(2)“HHMMSS”格式的、没有间隔符的字符串或者HHMMSS格式的数值。比如‘101112’表示‘10:11:12’,但是‘109710’就是不合法的,将会被存储为00:00:00
注意:如果没有间隔符并且时、分、秒没有全部填入的时候(如,1112),那么mysql解释时,就会假定最右面的是秒。然后依次读取。
(3).DATE
DATE类型用在仅需要日期值,不需要时间部分的值。存储的时候需要3个字节,格式为“YYYY-MM-DD”,YYYY表示年,MM表示月,DD表示日。定义DATE类型的几种格式:
(1)以‘YYYYMMDD’或者‘YYYY-MM-DD’格式的字符串表示日期。
(2)以‘YY-MM-DD’或者‘YYMMDD’格式的字符串类型表示日期。
(3)以YYMMDD或者YY-MM-DD格式的数字类型表示日期。
(4)利用 CURRENT_DATE 或者 NOW(),插入当前的系统的时间。
(4).DATETIME
DATETIME类型用在需要同时包含日期和时间的信息的值,存储的时候需要8个字节,格式为‘YYYY-MM-DD HH:MM:SS’。定义DATETIME类型的几种格式:
(1)以 ‘YYYY-MM-DD HH:MM:SS’ 或者 ‘YYYYMMDDHHMMSS’ 字符串格式表示的值。
(2)以 ‘YY-MM-DD HH:MM:SS’ 或者 ‘YYMMDDHHMMSS’ 字符串格式表示的值。
(3)以 YYYYMMDDHHMMSS 或者 YYMMDDHHMMSS 数字格式表示的值。
(5).TIMESTAMP
TIMESTAMP类型和DATETIME类型显示格式相同。两者的不同是:存储的字节数不同(TIMESTAMP需要4个字节,DATETIME需要8个字节),存储的范围不同。还有一个最大的区别在于,DATETIME在存储日期时间的数据时,按照实际输入的格式存储,即输入什么就存储什么,与时区无关。TIMESTAMP类型与时区有关,存储是以UTC格式保存,存储时对当前时区进行转换,检索时再转换回当时的时区,不同的时区显示的时间是不同的。
3.字符串类型
字符串类型是用来存储字符串数据的,除了可以存储字符串数据之外,还可以存储其他的数据,比如说图片和声音的二进制数据。MySQL提供了两类字符型数据:文本字符串和二进制字符串。
文本字符串类型:
二进制字符串类型
三.常见的运算符
1.算术运算符:+、-、*、/、DIV、%(取余)
注意:除法运算,当除数为0的时候,输出的结果为NULL。取余运算的时候,除数为0的时候,最后的结果也是NULL。
2.比较运算符:>、<、=、>=、<=、!=、IN、BETWEEN AND、IS NULL等
注意:=运算符,当等号一边或者两边都为NULL的时候,输出的结果为NULL。<=>安全等于运算符,当有一个值为NULL时,返回的值为0;当两边的值都为NULL的时候,返回的结果是1。IN 运算符,当数值为NULL时,返回为NULL;当语法中含有NULL并且前面的数值不能匹配的时候,返回NULL。LEAST运算符,返回最小的值,当里面含有NULL的时候,返回NULL。GREATEST和LEAST一样。
3.逻辑运算符:运算符的结果均为1或者0。逻辑与(&&、AND),逻辑或(||,OR),逻辑非(!,NOT),逻辑异或(XOR)
注意:注意运算符的优先级别。AND运算符,当AND两边有一个为NULL并且另一个为非零数的时候,返回为NULL。0 AND NULL,返回的是0。OR运算符,当OR两边为 0 OR NULL时,返回的是NULL。
4.位运算符:按照二进制位进行的运算,包括位与&,位或|,位非~,位异或^,左移<<,右移>>
四.运算符的优先级
优先级 运算符
(最高) !
-(负号),~(按位取反)
^(按位异或)
*,/(DIV),%(MOD)
+,-
>>,<<
&
|
=(比较运算),<=>,<,<=,>,>=,!=,<>,IN,IS NULL,LIKE,REGEXP
BETWEEN AND,CASE,WHEN,THEN,ELSE
NOT
&&,AND
XOR
||,OR
(最低) =(赋值运算),:=