MySQL数据类型、字符集、引擎和索引

数据类型

在MySQL中将数据类型分为以下几种:

  • 数值类型(整型、浮点型)
  • 字符串类型
  • 日期时间类型
  • 复合类型
  • 空间类型(非科学性工作基本不用,不做了解)

数值类型

1.整型
MySQL数据类型所占字节值范围(有符号)
tinyint1字节-128~127
smallint2字节-32768~32767
mediumint3字节-8388608~8388607
int4字节-2147483648~2147483647
bigint8字节+-9.22*10的18次方

注意:

  • 默认存在符号位,使用unsigned 属性表示无符号。
  • 显示宽度,如果某个数不够定义字段时设置的位数,则前面以0补填,使用zerofill 属性修改。
    例:int(6) 插入一个数’1234’,补填后为’001234’
  • 业务中需要存储多大的值就选用对应的类型。
  • 1表示bool值真,0表示bool值假。MySQL没有布尔类型,通过整型0和1表示。常用tinyint(1)表示布尔型。
2.浮点型
MySQL数据类型所占字节值范围
float(m,d)4字节单精度浮点型,m总个数,d小数位
double(m,d)8字节双精度浮点型,m总个数,d小数位
decimal(m,d)定点数decimal是存储为字符串的浮点数

注意:

  • 浮点数范围由所指定的m和d决定。
  • m既表示总位数(不包括小数点和正负号),也表示显示宽度(所有显示符号均包括)。

字符串类型

MySQL数据类型所占字节值范围(有符号)
CHAR0-255字节定长字符串
VARCHAR0-255字节变长字符串
TINYBLOB0-255字节不超过255个字符的二进制字符串
TINYTEXT0-255字节短文本字符串
BLOB0-65535字节二进制形式的长文本数据
TEXT0-65535字节长文本数据
MEDIUMBLOB0-16777215字节二进制形式的中等长度文本数据
MEDIUMTEXT0-16777215字节中等长度文本数据
LONGBLOB0-4294967295字节二进制形式的极大文本数据
LONGTEXT0-4294967295字节极大文本数据
VARBINARY(M)允许长度0-M个字节的定长字符串值的长度+1个字节
BINARY(M)M允许长度0-M个字节的定长字符串

注意:

  • CHAR类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。大小范围0-255.比指定长度长的值将被截断,短的会用空格填补。
  • VARCHAR类型可以根据实际内容动态改变存储值的长度,所以在不确定字段需要多少字符时使用VARCHAR可以大大节约磁盘空间、提高存储效率。

日期时间类型

MySQL数据类型所占字节值范围
date3字节日期,格式:2010-09-09
time3字节时间,格式:08:30:30
datetime8字节日期时间,格式:2010-09-09 08:30:30
timestamp4字节时间戳,自动存储记录修改的时间
year1字节年份,格式: 2010

注意:

  • 一般用整型保存时间戳,因为PHP可以很方便的将时间戳进行格式化。
  • 也有人为了方便在数据库中查看,使用日期时间datetime类型存储时间。

复合类型

MySQL数据类型说明示例
set集合类型set(val1,val2,…val64)
enum枚举类型enum(val1,val2,…val65535)
ENUM类型
  • ENUM类型只允许在集合中取得一个值,有点类似于单选项。比如人类的性别。
  • ENUM类型可以从集合取得一个值或者使用null值,除此之外的输入将会使MySQL在这个字段中插入一个空字符串。
  • ENUM类型最多可以包含65535个元素,其中一个元素被MySQL保留用来存储错误信息,这个错误信息用索引0或空字符串表示。
  • MySQL认为ENUM类型集合中的元素为合法输入,其他任何输入都将失败。这说明可以通过搜索空字符串或对应索引为0的行来找到错误的记录。
SET类型
  • SET类型可以从集合中取得任意数量的值。
  • 输入非集合中的值,也会在字段插入空字符串。
  • 最多包含64个元素。

字符集

为了更好的识别中文、日文、英文等,对于常用的符号进行了编码,这个编码就是字符集。字符集确定了文字的存储方式。

字符集说明字节长度
ASCII美国标准信息交换代码单字节
GBK汉字内码扩展规范双字节
unicode万国码4字节
UTF-8Unicode的可变长度字符编码1-6个字节

注意:

  • 实际工作中常用的字符集utf-8和GBK。

表引擎

MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能。

引擎名称说明
MyISAM常用,读取效率很高
InnoDB常用,支持写入和事务处理等
Archive不常用,归档引擎,压缩比高达1:10,用于数据归档
NDB不常用,集群服务器中使用

MyISAM

不支持事务,表锁(表级锁,加锁会锁住整个表),支持全文索引,操作速度快。常用于读取多的业务。

  • MyISAM由myd和myi组成。.myd用来存放数据文件,.myi用来存放索引文件。
  • 对于MyISAM存储引擎表,mysql数据库只缓存其索引文件,数据文件的缓存由操作系统本身完成。

InnoDB

  1. 支持事务,主要面向在线事务处理(OLTP)方面的应用。
  2. 行锁设计,支持外键,默认情况读取操作不加锁。

注:

  • 行锁:写入、更新操作时将这一行加锁,不让其他人操作。
  • 表锁:写入、更新时将整个表加锁,不让其他人操作。
  • 事务:同时操作多个数据,其中一个数据操作失败可回滚到操作之前,常用于银行、电商、金融系统中。

索引

类似于书的目录,帮助快速定位到有用的信息。索引越多写入、修改的速度越慢。因为写入修改数据时,也要修改对应的索引。

MySQL的索引类型

索引类型说明语法语法说明
普通索引基本的索引alter table 表 add index(某字段)为表的某字段增加索引
唯一索引某一行使用唯一索引,这一列的每行数据都要求是唯一的alter table 表 add unique(某字段)为表的某字段增加唯一索引
主键索引特殊的唯一索引,不允许有空值。alter table 表 add primary key(字段)增加主键索引
全文索引对于需要全局搜索的数据alter table 表 add fulltext(字段)增加全文索引

创建表时声明索引

PRIMARY KEY(字段)
INDEX [索引名] (字段)
FULLTEXT [索引名] (字段)
UNIQUE [索引名] (字段)
索引名可选。

示例如下:

CREATE TABLE user_sg (
    id INT NOT NULL,
    username VARCHAR(20) NOT NULL,
    password VARCHAR(20) NOT NULL,
    content VARCHAR(30) NOT NULL,
    PRIMARY KEY(id),
    INDEX pw (password),
    UNIQUE(username),
    FULLTEXT(content)
) ENGINE=InnoDB;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值