常见的数据类型

常见数据类型:
整型、浮点型、字符型、日期型、二进制型、bit类型

一、整型:

tinyint
smallint
mediumint
int / integer
(常用)
bigint

注意:

  • int(M)的默认值为int(11),zerofill默认为int(10)
  • int(3)和int(11)只有用zerofill才有区别,当没有加zerofill时两者是没有任何区别的
  • int(M)中的M表示的是显示宽度,与该数需要的储存空间大小和int字段能储存的数据上限没有关系
  • 比如 int(1),用zerofill,如果你填的超过了1位数,按原样储存
CREATE TABLE t(X INT(1) ZEROFILL,Y INT(11) ZEROFILL);
INSERT INTO t(X,Y) VALUES(1,1);
INSERT INTO t(X,Y) VALUES(12,12);
SELECT X,Y FROM t;

mysql整数类型会把空转为0么 mysql常用的整数类型_sql

当没有加zerofill时

CREATE TABLE c(X INT,Y INT(11));
INSERT INTO c(X,Y) VALUES(1,1);
INSERT INTO c(X,Y) VALUES(12,12);
SELECT X,Y FROM c;

mysql整数类型会把空转为0么 mysql常用的整数类型_sql_02


zerofill默认为int(10)

CREATE TABLE e(X INT ZEROFILL);
INSERT INTO e(X) VALUES(1);
INSERT INTO e(X) VALUES(12);
SELECT X FROM e;

mysql整数类型会把空转为0么 mysql常用的整数类型_字段_03

二、浮点型:

double(m,n):双精度

float(m,n):单精度

decimal(m,n):精度最高,在表示钱方面使用该类型,因为不会出现精度缺失问题

m和n可选 浮点型中(m,n)指,最多m位,其中小数点后必须有n位

比如:double(5,2)表示最多5位,其中小数点后必须有2位,即最大值为999.99

float 和 double 区别:

最本质区别:
float 在计算机中用4个字节来储存
double 在计算机中用8个字节来储存
1. 占用内存不同:
float 使用4个字节(32位)存储空间来存储一个浮点数,包括符号位1位,指数位8位,尾数位23位。
double 使用 8个字节(64位)存储空间来存储一个浮点数,包括符号位1位,指数位11位,尾数位52位。
2. 所存的数值范围不同
float 数值范围为-3.4E38~3.4E38
double 数值范围为-2.23E308 ~ 1.79E308
E表示10的多少次方,如3.4E38指的是3.4乘以10的38次方
3. 十进制下的位数不同
单精度浮点数最多有7位十进制有效数字,如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。
双精度浮点数可以表示十进制的15或16位有效数字,超出的部分也会自动四舍五入。

mysql整数类型会把空转为0么 mysql常用的整数类型_字段_04

三、字符型:

char(n)n可选,固定长度字符串类型:char长度可选范围是0-255 字符
固定长度是指,比如char(10),可以存入10个字符,但只存入了2个字符,其它会被自动用空格填满
查询时,返回的数据尾部没有空格
比如 char(即 char(1) ),如果所存入的字符数大于1,将只显示第一个字符

CREATE TABLE f(X CHAR);
INSERT INTO f(X) VALUES('哈哈哈哈哈哈哈');
SELECT X FROM f;

mysql整数类型会把空转为0么 mysql常用的整数类型_sql_05

varchar(n):·n不可选·,可变长度字符串类型
可变长度是指,比如varchar(10),可以存入10个字符,但是只存了2个字符,不会自动填满
5.0.3 以下的版本中的最大长度限制为 255 字符
5.0.3 及以上的版本中最大长度限制为 65535 字节,起始位和结束位占去了3个字节
比如 varchar(1) ,如果所存入的字符数大于1,将只显示第一个字符

text:常用于存储较长文本
不可以有默认值,其最大长度是 2 的 16 次方 -1

字符型(n)中的n指字符数

mysql整数类型会把空转为0么 mysql常用的整数类型_数据库_06


mysql整数类型会把空转为0么 mysql常用的整数类型_sql_07

UTF8:1 汉字=3 字节
GBK:1 汉字=2 字节

四、日期型

date:格式为 yyyy-MM-dd,只显示 年月日

time:格式为 hh:mm:ss,只显示 小时分钟秒

timestamp:时间戳类型,显示 日期+时间,格式为yyyyMMdd hhmmss

datetime:显示日期+时间,格式为yyyy-MM-dd hh:mm:ss

MySQL5.6.5之后的版本,在默认的秒精确度上,可以带小数,最多可以带6位,即可以精确到 microseconds (6 digits) precision

mysql整数类型会把空转为0么 mysql常用的整数类型_数据库_08

timestamp和datetime区别

1)时间范围不同
timestamp的时间范围比datetime小很多

2)储存方式不同
timestamp将客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,又将其转化为客户端当前时区进行返回
datetime不做任何改变,原样输入和输出

mysql整数类型会把空转为0么 mysql常用的整数类型_mysql整数类型会把空转为0么_09

timestamp在新旧版本上的区别
新版本

TIMESTAMP 在mysql 5.6.5之后,TIMESTAMP(fraction)中的fraction代表的是小数位数,最大为6

旧版本

TIMESTAMP(fraction)中fraction值显示尺寸的格式

在创建表时,可以指定任意尺寸,但如果定义列长为0或者比14大均会被强制定义为列长14

mysql整数类型会把空转为0么 mysql常用的整数类型_sql_10

时间戳和日期格式的相互转换
  1. 时间日期格式转换成时间戳格式:UNIX_TIMESTAMP()
SELECT UNIX_TIMESTAMP(NOW());     //1598620548
  1. 时间戳格式转换成时间日期格式:FROM_UNIXTIME()
SELECT FROM_UNIXTIME(1598620548);     //2020-8-28 21:15:48
五、二进制型

blob(常用)
tinyblob
mediumblob
longblob
作用:存储图片数据

六、bit类型
  • bit[(M)]:位字段类型,M表示每个值的位数,范围1~64,默认为1。
  • bit(1) 是一个二进制位,值只有 0 和 1 ,直接对应java语言中boolean类型的 false 和 true
  • bit(M)多用于储存状态,一个字段可以保存多至64个状态
  • 如果手动指定bit值,则可以使用b’value’格式,比如b’111’和 b’10000000’分别代表7和128
  • 查询bit类型 在表中定义bit类型
  • mysql整数类型会把空转为0么 mysql常用的整数类型_sql_11

  • 查询出来是b’value’格式
  • mysql整数类型会把空转为0么 mysql常用的整数类型_mysql整数类型会把空转为0么_12

  • sql SELECT ORD(whether_is_borrowed) FROM books;
  • mysql整数类型会把空转为0么 mysql常用的整数类型_字段_13

常见的约束

说明:

用于限制表中字段的数据的,从而进一步保证数据表的数据是一致的、准确的、可靠的!

六大常见约束:

1. NOT NULL 非空约束:用于限制该字段为必填项

2. DEFAULT 默认约束:用于限制该字段如果没有显示插入值,则直接显示默认值

3. PRIMARY KEY 主键约束:用于限制该字段值不能重复,设置为主键列的字段默认不能为空

  • 一个表只能有一个主键,当然也可以是组合主键
  • 组合主键:一个表中假如有3列都被设置为主键,则这3列为组合主键,即只有3列字段完全相同才算重复,才会报错

4. UNIQUE 唯一约束:用于限制该字段值不能重复

比较:

字段是否可以为空	一个表可以设定几个
主键约束			不可以			1个
唯一约束			可以			n个

5. CHECK 检查约束(mysql不支持):用于限制该字段值必须满足指定条件

语法:CHECK(字段名 BETWEEN 条件1 AND 条件2)

6. FOREIGN KEY 外键约束:用于限制两个表的关系,要求外键列的值必须来自于主表的关联列
要求:

  1. 主表的关联列和从表的关联列的类型必须一致,意思必须一样,名称无要求
  2. 主表的关联列要求必须是主键
  3. 外键约束语法:
constraint [名称_从表名_主表名] foreign key 从表关联列 references 主表关联列
  1. 如果添加外键约束,数据类型后面加’,’,并且另起一行
案例:添加约束
CREATE TABLE IF NOT EXISTS stuinfo(
	stuid INT PRIMARY KEY,#添加了主键约束
	stuname VARCHAR(20) UNIQUE NOT NULL,#添加了唯一约束+非空约束
	stugender CHAR DEFAULT '男',#添加了默认约束
	email VARCHAR(20) NOT NULL,#非空约束
	age INT CHECK(age BETWEEN 1 AND 100),#检查约束,不起作用,mysql中不支持
	majorid INT,
	CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorid) REFERENCES magor(id)#添加了外键约束
	#外键约束语法:constraint [名称_从表名_主表名] foreign key 从表关联列 references 主表关联列
	#如果添加外键约束,数据类型后面加',',并且另起一行
)