02-mysql基础-数据类型

02-Mysql数据类型

数据完整性

  • 一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中
  • 在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束。

数据类型

  • 使用数据类型的原则:够用就行,尽量使用取值范围小的,而不用大的。这样可以更多的节省存储空间
  • 常用的数据类型如下:
    • 整数:int,bit
    • 小数:decimal
    • 字符串:varchar,char
    • 日期时间: date, time, datetime
    • 枚举类型(enum)
  • 特别说明的类型如下:
    • ecimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位
    • char表示固定长度的字符串,如char(3),如果填充’ab’时会补一个空格为’ab ‘
    • varchar表示可变长度的字符串,如varchar(3),填充’ab’时就会存储’ab’
    • 字符串text表示存储大文本,当字符大于4000时推荐使用
    • 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径

约束

  • 主键primary key:物理上存储的顺序

  • 非空not null:此字段不允许填写空值

  • 惟一unique:此字段的值不允许重复

  • 默认default:当不填写此值时会使用默认值,如果填写时以填写为准

  • 外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常

  • 说明:虽然外键约束可以保证数据的有效性,但是在进行数据的crud(增加、修改、删除、查询)时,都会降低数据库的性能,所以不推荐使用,那么数据的有效性怎么保证呢?答:可以在逻辑层进行控制

1、数据类型

  • 整型(int)
  • 浮点型(float和double)
  • 定点数(decimal)
  • 字符串(char、varchar、text)
  • 二进制数据(Blob)
  • 日期和时间类型

2、整数

Mysql整数类型 含义
tinyint(m) 1个字节 范围(-128-127)
smallint(m) 2个字节 范围(-32768-32767)
mediumint(m) 3个字节 范围(-8388608-8388607)
int(m) 4个字节 范围(-2147483648-2147483647)
bigint(m) 8个字节 范围(+-9.22*10的18次方)

m代表的是最大的显示宽度,整数类型中,int用的最多。

3、浮点型(float和double)

Mysql数据类型 含义
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d小数位

4、定点数

浮点型在数据库中存放的是近似值,而定点类型在数据库存放的是精确值。

decimal(m,d),参数m是定点类型数字的最大个数(精度),范围是0-65。d小数点右侧数字的个数,范围0-30,但不得超过m,对定点数的就算能精确到65位数字。

5、字符串

Mysql数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n) 固定长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符

- char和varchar:
- char(n)若存入字符数小于n,则以空格补于其后,查询之后再将空格去掉,所以char类型存储的字符串末尾不能有空格,varchar不限于此。
- char(n)固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符+1个字节(n<=255)或2个字节(n>255),所以varchar(4)存入3个字符将占用4个字节。
- char类型的字符串检索的速度要比varchar的快。
- varchar和text:
- varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节
- text类型不能有默认值
- varchar就可以直接创建索引,text创建索引指定前多少个字符,varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

6、二进制数据

  • BLOB和TEXT存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而BLOB是以二进制的方式存储,不区分大小写。
  • BLOB存储的数据只能整体读出
  • TEXT可以指定字符集,BLOB不用指定字符集。

7、日期和时间类型

MySql数据类型 含义
date 日期 ‘2017-6-1’
time 时间‘21:18:30’
datetime 日期时间‘2017-6-1 21:18:30’
timestamp 自动存储记录修改时间

注意:若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候字段刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

8、数据类型的属性

Mysql关键字 含义
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集

猜你喜欢

转载自blog.csdn.net/pythoncodez/article/details/73513033