MySQL的数据类型
数值列类型
mysql提供了五种整型: tinyint、smallint、mediumint、int和bigint。int为integer的缩写。这些类型在可表示的取值范围上是不同的。
整数列可定义为unsigned从而禁用负值;这使列的取值范围为0以上。各种类型的存储量需求也是不同的。取值范围较大的类型所需的存储量较大。
mysql 提供三种浮点类型: float、double和decimal。
create table t1() 在当前数据库中表名称不允许重复,如果重复则报错
create table if not exists t1 如果t1表不存在才执行创建操作,如果已存在则不执行任何操作
无符号的写法:
- create table t13(id tinyint unsigned);
定点的浮点数
- create table t14(id numeric(8,2)); 表示总位宽为8位,小数为2位,其中的正负号和小数点不进行计算
小数处理采用的是四舍五入
完整性约束
- primary key 用于声明主键,非空唯一。一个表只能定义一个主键,但是主键允许使用多个列构成(复合主键) create table
t17(id int primary key); create table t18(
id int, name varchar(20),
primary key(id,name)); 表示id和name的组合不允许为空【任何一个都不允许为null】,不允许重复,不是其中某个列不允许为空,不允许重复
4种用户定义约束
-
null允许为空,默认/not null不允许为空 id int not null表示id列不允许为空,如果插入null值则报错
default设置默认值,如果试图插入null,则加入null,默认值无效;如果不针对当前列进行操作,则默认值生效 create
table t1(id int default 1,name varchar(20)); Insert into t1
values(null,‘yan’); 此时id插入null值。如果insert into t1(name)
values(‘yan’)则默认值生效check检查型约束,可以定义,语法create table t1(id int check(id>5));
要求插入的数据必须满足条件id>5,但是在mysql中无效unique唯一性约束,表示列中的数据不允许重复,否则报错,拒绝操作 create table t1(id int unique);
允许为null,null表示不确定的值
数值列属性
- AUTO_INCREMENT以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。MySQL支持多种数据表,每种数据表的自增属性都有差异
create table t16(id int primary key auto_increment);
只有不插入数据或者插入null值时才会自动生成自增的值
字符串列类型
在mysql中使用单引号表示字符串类型,事实上不区分单双引号,但是一般建议使用单引号,允许使用\转义字符
create table t1(id char(2)); 表示id为字符串类型,允许最大存储2个字符,不区分中英文
char(2)表示存储的字符个数为2,如果实际长度大于2则报错;如果实际存放的字符数不足,则自动末尾补充空格。
varchar(2)表示存储的字符个数最大为2,存放字符数不足时按照实际长度存放
- 如果存放字符串末尾是空格时,会自动裁剪到满足长度限制为止,注意不能裁剪开头的和中间的空格
- 等值判定时空格不参与
char与varchar的区别
1、char是定长数据,如果char(10)但里面只保存了1个字符,则它的实际长度仍然是10。Mysql对查询的结果进行了处理 ,所以使用length无法判断它所占用的长度;varchar(10)时,如果里面只保存了1个字符,则它的长度为1,所以varchar被称了可变长字符
2、char的取值范围为0-255;varchar的取值范围为0-65535。如果需要存储的字符串的长度跟所有值的平均长度相差不大,适合用char,如MD5。 对于经常改变的值,char优于varchar,原因是固定长度的行不容易产生碎片。
3、对于很短的列,char优于varchar,原因是varchar需要额外一个或两个字节存储字符串的长度
4、char和varchar后面如果有空格,char会自动去掉空格后存储,varchar虽然不会去掉空格,但在进行字符串比较时,会去掉空格进行比较
大对象类型
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求
TINYTEXT可变长度最多 255 个字符;TEXT可变长度最多 65535 个字符;MEDIUMTEXT可变长度最多 16M个字符;LONGTEXT可变长度,最多4G个字符
set和枚举
enum枚举类型实际上是当作字符串进行处理,设置当前列中所允许的取值,取值只能是枚举值中的任意一个值
create table t1(id enum(‘a’,’b’,’c’));
set集合类型实际上是当作字符串进行处理,设置当前列中所允许的取值,取值可以是集合中的任意多个值
create table t1(id set(‘a’,’b’,’c’));
日期和时间列类型
date类型只能存放日期,datetime可以存放日期和时间
datetime一般供用户使用,而timestamp可以存放1970-2038年的日期和时间,一般供系统使用
默认值的设置问题
需求:需要当不添加数据时,自动填充服务器的系统当前时
位类型bit
bit 表示1个二进制的位 bit(8) 表示8个二进制的位,其中n的取值范围为1-64
注意boolean类型
总结
定义数据类型就是定义列,数据类型决定数据的特性
数据类型主要分为字符串类型,浮点书类型和定点数类型,日期类型以及二进制类型
数据类型在不同的存储引擎上表现不同
根据所采用的数据类型,需求和数据特性选择数据类型