MySQL中的数据类型
MySQL中的数据类型
数据类型:指的是数据表中的字段中支持存放的数据类型
1.数值类型
有多种数据类型可以存放数值
- 1.tinyint
内存空间大小:1byte(一个字节是八位)
范围:- 有符号:-128~127
- 无符号:0~255
说明:特小型整数(年龄)
- 2.smallint
内存空间大小:2byte
范围:- 有符号:-32768~32767
- 无符号:0~65535
说明:小型整数
- 3.mediumint
内存空间大小:3byte
范围:- 有符号:-2^31~2^31-1
- 无符号:0~2^32-1
说明:中型整数
- 4.int/integer(默认使用)
内存空间大小:4byte
范围:- 有符号:
- 无符号:
说明:整数
- 5.bigint
内存空间大小:8byte
范围:- 有符号:
- 无符号:
说明:大型整数
- 6.float
内存空间大小:4byte
范围:
说明:单精度 - 7.double(默认使用)
内存空间大小:8byte
范围:
说明:双精度(存在问题,比如一个数是36.2,那么就会被显示为36.200000000) - 8.decimal
内存空间大小:(根据参数而定)第一个参数+2
范围:(根据参数而定)
说明:- decimal的使用有两个参数,这个必须声明;如,decimal(10,2),代表的就是这个数据算上小数位一共有10位,其中小数位有2个:99999999.23
2.字符串类型
存储字符序列的类型
- char
- 字符序列的长度范围:0~255个字节(字符)注意:一个汉字占两个字符
- 说明:定长字符串,最多存储255个字符如,char(3)\char(255);数据长度最长为规定的长度,当数据长度不够规定好的长度时,会自动用/uoooo码补齐,以空格的形式呈现
- varchar
- 字符序列的长度范围:0~65536个字节(字符)
- 说明:可变长度字符串,最大长度是65536。如,varchar(50),那这事最大长度就是50个字符,最多存25个汉字
- tinyblob
- 字符序列的长度范围:0~255个字节
- 说明:存储二进制字符串
- blob(音频图片视屏在计算机中都会转化为二进制进行存储)
- 字符序列的长度范围:0~65535
- 说明:存储二进制字符串
- mediumblob
- 字符序列的长度范围:0~1677215个字节
- 说明:存储二进制字符串
- longblob
- 字符序列的长度范围:0~4294967295个字节
- 说明:存储二进制字符串
- tinytext
- 字符序列的长度范围:0~255个字节
- 说明:文本数据(字符串)
- text
- 字符序列的长度范围:0~65535个字节
- 说明:文本数据(字符串)
- mediumtext
- 字符序列的长度范围:0~1677215个字节
- 说明:文本数据(字符串)
- longtext(当varchar存不下时,用这个)
- 字符序列的长度范围:0~4294967295个字节
- 说明:文本数据(字符串)
3.日期类型
在mysql数据库中,我们可以使用字符串来存储时间,但是,如果需要基于时间字段进行查询,比如,要查找某个时间段之内的数据,就不便于查询了
- date
- 格式:2021-09-05
- 说明:日期,只存储年月日
- time
- 格式:11:11:11
- 说明:时间,只存储时分秒
- year
- 格式:2021
- 说明:只存储年份
- datetime
- 格式:2021-09-05 11:11:11
- 说明:日期+时间(时间与日期用空格隔开)
- timestamp(与datetime一致,只是格式不同)
- 格式:20210905 111111
- 说明:日期+时间(没有分隔符,叫做时间戳)
利用日期类型存储数据时,我们就可以很好的查询某一日期之前或之后的数据,或者某两个日期之间的数据
字段约束
约束介绍
每个字段都指定数据类型,每个字段后都增加了对字段的限制,比如, not null、unique等,我们将这个称之为字段约束;这是在创建表的时候,对这个表的某一字段列中数据的限制性的要求(对表中列的数据进行限制)
创建限制的原因:
- 1.保证数据的有效性(有过的不能再有)
- 2.保证数据的完整性(某些字段必须有)
- 3.保证数据的正确性
常见字段约束:
- 1.非空约束:not null;限制此列的值不能为空,必须填写
- 2.唯一约束:unique;在数据表中的多条数据,此字段的值不能重复
- 3.主键约束:primary key;非空+唯一,能够表示数据表中唯一的一条数据(唯一约束,可以不写,但是主键必须要写)
- 4.外键约束:foreign key;建立不同表之间的关系
(以上约束违反之后,数据无法成功添加)
主键约束
非空+唯一,能够表示数据表中唯一的一条数据;与唯一约束的区别就是,主键不能为空;
一个表中最多只能有一个主键,但是,主键可以是一个字段,也可以是多个字段的组合,这叫做联合组件
创建主键:
- 1.创建表时定义主键:直接在字段后面写上primary key如,book_id char(10) primary key,
- 2.创建表声明字段后,单独起一行(最后一行)来声明主键:primary key(字段名)如,primary key(book_id)
修改主键约束
利用alter关键字,alter table books drop primary key;这样原来被设定为逐渐的字段就不再是主键了
添加主键约束:(创建是没有定义主键,创建完成后在设定主键)
这依然是修改表元素,所以还用alter,alter table books modify book_id char(10) primary key;
主键的自动增长
当一个表中没有字段适合来作为为主键,那我们可以另外声明一个字段(这个字段可能和这个表的数据没有任何联系),来作为这个表的主键
- 自动增长的作用:
是为了避免数据过多而无法正确添加主键;设置主键自动生长后,只需要填写其他字段,填写完毕后主键会自动填写
自动增长的定义(auto_increment)
create table type(
type_id primary key auto_increment,
type_name varchar(20) not null,//不适合做主键,于是定义上面的一条自定义字段,并设置为自动生长
type_remark varchar(200) not null//不适合做主键
);
注意:自动增长是从1开始的,每添加一条记录,自动的增长的列会自动加1在,但是如果我们把某条记录删除然后再添加新的记录,这个自动增长的数据不会回调,也就是接着刚刚删除了的数据继续往上加;也就是,原本三条记录,删了一条,然后再加一条,这是新的记录的id是4,而不是3,只保证唯一性,不保证连续性
联合主键
联合主键:将数据表中的两个或以上的字段组合在一起设置为表的主键

创建方式:创建表声明字段后,单独起一行(最后一行)来声明主键:primary key(字段名1,字段名2)如,primary key(stu_id,course_id)
注意:
- 1.不可以在多个字段后声明primark key,否则会被识别为定义了多个主键
- 2.实际项目中联合主键使用频率不高
所以,当表中没有明确字段作为主键时,首选添加主键的方式进行创建

浙公网安备 33010602011771号