MySQL类型和属性
目录
数据类型
数值型
int和numeric
数值列的扩展属性
在使用AUTO_INCREMENT时,应注意以下几点:
null是什么意思
字符串类型
char和varchar
大对象类型Lob
两者之间的区别:
日期时间类型
特殊的时间是时间戳类型
系统函数now()可以获取系统的当前时间
类型说明
集合和枚举类型
位类型
总结
数据类型
要先创建一个数据库,而不是直接创建数据表呢?
- 因为从系统架构的层次上看,MySQL数据库系统从大到小依次是【数据库服务器、数据库、数据表、数据表的行与列】
数值型
- 5种整型 tinyint、smallint、mediumint、int和bigint,主要区别就是取值范围不同,还可以在类 型前添加一个限制词unsigned,不允许添加负数
- 3种浮点型:不能精确存放float和double,可以精确存放decimal和numeric
类型名称 | 说明 |
tinyint
|
1B,取值范围-128到127 |
smallint
|
2B ,取值范围为 -32768 到 32767
|
mediumint
|
3B ,取值范围为 -8388608 到 8388607
|
int 或者 Integer
|
4B ,取值范围为 2e9
|
bigint
|
8B ,取值范围为 9e18
|
float
|
4B ,单精度浮点型,取值范围 3.4e38
|
double
|
8B ,双精度浮点型,取值范围 1.7e308 ,总位数不超过 15 位
|
decimal和 numeric
|
采用定点存放浮点数,具体字节数取决于定义时设置的参数 |
create table t3(id int unsigned);
mysql> insert into t3 value(-10); -- 不允许存储负数
ERROR 1264 (22003): Out of range value for column 'id' at row 1
mysql> insert into t3 value(255); -- 存储数据的上线扩大一倍
mysql> insert into t5 values(-99.999); -- 位宽统计中符号位不算mysql> insert into t5 values(100); -- 整数超出范围报错
ERROR 1264 (22003): Out of range value for column 'id' at row 1
mysql> insert into t5 values(9.1235); -- 小数位数多余则自动四舍五入
int和numeric
- int类型不能保存小数位,存储小数时会自动进行四舍五入
- numeric 可以保存小数位,如果小数位数为 0 ,可以模拟得到 int 类型的存储效果。采用的实际存储方式为字符串。查询效率远低于int
数值列的扩展属性
- auto_increment一般用于主键,可以实现该列的自动生成连续整数值
mysql> insert into t8 values(null,'yan1');-- 插入数据时不指定插入的值或者设置插入值
为null则会自动添加一个自增值mysql> insert into t8 values(99,'yan1'); -- 如果插入数据时不指定对应的值,则自增长
max(id)+1;如果指定对应的值,则自增效果失效
在使用AUTO_INCREMENT时,应注意以下几点:
- 当auto_incement达到上限后,再次申请下一个id时,得到的值保持不变。主键值重复报错
- unsigned 禁用负值
- zerofill如果查询显示时,实际数据小于指定位宽,则自动添加 0 值
- default 用于设置默认值
mysql> insert into t10 values(11,'yan1');-- 指定对应的数据,则default无效mysql> insert into t10 values(null,'yan1'); -- 指定对应的数据,则default无效,即 使设置的值为nullmysql> insert into t10(name) values('yan1'); -- 只有不针对这个列进行数据插入时 default才能生效
null是什么意思
null的意思为未知的数据,它既不是空字符串,不是任何一个具体的值;不能把任何值与一个null值进行比较。因为null的意思是不确定的值。真正的null值比较必须使用特殊的运算符is null或者is not nullmysql> select null is not null; +------------------+ | null is not null | +------------------+ | 0 | +------------------+ 1 row in set (0.00 sec)
字符串类型
char(n) 定长字符串, n 值用于表示所允许的最大长度,取值范围 0-255- 长度限制不区分中英文,表示是允许最多存储多少个字符
- 使用length函数获取的是字节数,不是字符数。在utf-8编码种一个汉字占用3个字节
varchar(n)可变长度的字符串,n值取值范围为0-65535
- 实际存储多少个字符就占多少个位置,每个列所占用的长度根据具体内容变化
char和varchar
- char属于定长,varchar属于变长。选择最基本的依据就是定长使用char,变长使用varchar
- char允许的最大长度为255,varchar允许的最大长度为65535
- 如果存储的字符串长度变化不大,推荐优先考虑使用char,例如针对口令进行md5加密,固定长度的行不容易产生碎片;对于长度很短的列,char的性能优于varchar,是因为varchar需要引入额外一个或者两个字节存储字符串长度
- char在计算种会自动去除空格;varchar不会去掉空格,但是进行字符串比较时,会去除空格后进行比较;在插入数据时系统会自动去除字符串默认多余的空格
大对象类型Lob
- BLOB是一个二进制大对象,可以容纳可变长度的数据,其中分为tinyblob、blob、 mediumblob、longblob。一般用于存储二进制数据,例如声音、图像、视频等
- Text是一个文本大对象,可以容纳可变长度的数据,其中分为tinytext、text、mediumtext、 longtext,一般用于存储文本类型数据,例如小说、商品简介
两者之间的区别:
- blob是二进制类型,可以容纳可变长度的数据,区分大小写;text是一个不区分大小写的blob
类型名称 | 允许的最大长度 | 说明 |
tinytext
|
0-255
|
短文本字符串
|
text
|
0-65535
|
长文本字符串
|
mediumtext
|
16M
|
中等长度的长文本字符串
|
longtext
|
4G
|
极大文本数据
|
tinyblob
|
0-255
|
不超过 255 个长的二进制串
|
blob
|
0-65535
|
二进制类型的长文本字符串
|
mediumblob
|
16M
|
中等长度的二进制长文本字符串
|
longblob
|
4G
|
极大二进制数据
|
日期时间类型
create table dt1(id date);
insert into dt1 values('1989-2-3');
特殊的时间是时间戳类型
create table dt2(id timestamp default current_timestamp,name varchar(20));
mysql> insert into dt3(name) values('yan1');mysql> select * from dt3;
+---------------------+------+
| id | name |
+---------------------+------+
| 2022-04-17 15:07:33 | yan1 |
+---------------------+------+
系统函数now()可以获取系统的当前时间
select now();
类型说明
类型名称
|
说明
|
格式
|
date
|
日期类型,有效范围为 1000-9999 年,不包含时分秒
|
3B , yyyy-MM-dd
|
time
|
时间类型,有效范围为 -838 到 838 小时范围内,一般用 于表示时间值或者持续时间。不包含年月日
|
3B , HH:mm:ss
|
year
|
年份类型,有效范围 1901 到 2155 年
|
1B , yyyy
|
datetime
|
日期时间类型,其中包含日期和时间,可以精确到秒,有效范围为1000 到 9999 年。具体存储时和时区无关。
从 MySQL5.6.4 之后可以包含秒后的小数部分,精度最高为微妙(6 位 )
|
非小数部分5B+ 小数
部分 0-3B ,如果有小
数部分则会随着小数
位数变化, yyyy-MM
dd
|
timestamp
|
时间戳类型,可以精确到秒,有效分为是 1970 到 2038年,同时支持自动存储修改的时间,存储有时区数据,实际存储毫秒数。在MySQL 5.6.4 及之后版本,可以将时间戳类型数据最高精确微秒,timestamp(N)N 取值范围为0-6
|
非小数部分 4B+ 小数
部分 0-3B ,默认显示
格式 YYYY-MM-dd
HH:mm:ss
|
集合和枚举类型
- set集合类型,可以设置多个集合成员,允许从多个集合成员种选择多个数据进行插入
create table set1(id int,hobby set('抽烟','喝酒','烫头'));
insert into set1 values(1,'烫头,抽烟'); -- 没问题
insert into set1 values(1,'烫头,抽烟,扣脚'); -- 报错,因为其中一个值不在set定义种
insert into set1 values(1,'抽烟,抽烟');-- 实际上只插入一个值,也就是会自动去除重复值
- enum枚举类型,可以设置允许选用的多个值,列只能赋予某个枚举成员值
create table enum1(id int,sex enum('男','女','不确定'));
insert into enum1 values(1,'男');
insert into enum1 values(2,'男,女'); -- 报错
位类型
总结
- 定义数据类型就是定义列,数据类型决定数据的特性【域完整性】
- 数据类型主要分为字符串类型、定点数和浮点数类型、日期类型、大对象类型【慎用】
- 数据类型在不同的存储引擎上表现不同
- 数据所采用的数据类型是根据业务需求和对应的数据类型特征进行选择,不建议使用过于复杂的数据类型
MySQL类型和属性相关推荐
- MySQL 数据类型的属性 约束 三大范式
MySQL 数据类型的属性 约束 三大范式 数据表 是数据库的基本组成元素,以记录行和字段列组成的二维结构用于存储数据. 表头 字段名1 字段名2 数据单元 数据1 数据2 列如: 学号 姓名 专业 ...
- mysql 类型后面加括号_MySQL数据类型及后面小括号的意义
1,数值类型 1.1数值类型的种类 标准 SQL 中的数值类型,包括严格数值类型(INTEGER.SMALLINT.DECIMAL.NUMERIC),以及近似数值数据类型(FLOAT.REAL.DOU ...
- 必需的 Debezium MySQL 连接器配置属性
必需的 Debezium MySQL 连接器配置属性 官网地址: https://debezium.io/documentation/reference/1.5/connectors/mysql.ht ...
- java string 属性_String类型的属性和方法
前面的话 前面已经介绍过字符串String类型的基本知识,本文将介绍String类型的属性和方法 属性 字符串String类型的每个实例都有一个length属性,表示字符串中的字符个数.由于字符串是不 ...
- springMVC注解@initbinder日期类型的属性自动转换
在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支持这个格式的转换,所以必须要手动配置, 自定义数据类型的绑定才能实现这个功能. 一 ...
- 【Java 虚拟机原理】Class 字节码二进制文件分析 六 ( 属性类型 | Code 属性 | 属性名称索引 | 属性长度 | 操作数栈最大深度 | 局部变量存储空间 | 字节码长度 )
文章目录 前言 一.属性类型 二.Code 属性表数据结构 三.属性名称索引 四.属性长度 五.操作数栈最大深度 六.局部变量存储空间 七.字节码长度 八.存储字节码指令的一系列字节流 前言 上一篇博 ...
- linux系统的5种文件类型及其属性符号
linux系统的5种文件类型及其属性符号 Linux文件类型常见的有: (1)普通文件:符号是 - (2)目录文件:符号是 d (3)字符设备文件:符号是c (4)块设备文件:符号是b (5)符号链 ...
- 【java】java获取对象属性类型、属性名称、属性值
java获取对象属性类型.属性名称.属性值 获取属性 修饰符:[在Field[]循环中使用] String modifier = Modifier.toString(fields[i].getModi ...
- 将C ++类型的属性公开给QML
将C ++类型的属性公开给QML 将C ++类型的属性公开给QML 数据类型处理和所有权 Exposing Properties 使用通知信号的注意事项 对象类型的属性 对象列表类型的属性 分组属性 ...
最新文章
- [C#]ASP.NET MVC 3 在线学习资料
- [转]matlab GUI 新手入门——最基本的几个概念
- 启动tomcat遇到的问题整理
- 对flex-grow和flex-shrink的深入理解
- 使用Guava MapSplitters配置Hadoop
- php中$tpl= add_member_info ;什么意思,DEDECMS会员信息在个人模板info和index的调用问题...
- Java 设计模式 Day2 之面向抽象原则:接口(interface)的设计应用与抽象类的区别
- CNN经典模型:GoogLeNet(从Inception v1到v4的演进)
- 在 Docker Machine 中使用 Mirror 服务
- tpc-c 服务器性能,IBM创英特尔8处理器服务器TPC-C性能记录
- Nginx 静态文件服务器搭建及autoindex模块解析
- Excel 曝Power Query安全漏洞
- Enterprise Solution(2.2.20130525) 解决方案配置与源代码下载
- 自媒体、新媒体、融媒体的区别是什么?
- 1965:【14NOIP普及组】珠心算测验
- Onedrive 1T|5T 网盘获取
- Android源代码分析--Preference之自动通话录音
- 预防建筑倒塌高还能这样?
- 记录人生第一个网站,以及相对路径图片无法显示的问题
- 深度学习之卷积神经网络CNN 常用的几个模型
热门文章
- eclipse优化设置介绍---谷营中西
- 注册登录显示个人中心
- 女生学java_女生到底适不适合学Java-Fun言
- golang 实现js 数组 indexOf函数 根据元素找到数组下标
- android 自定义relativelayout,Android布局(RelativeLayout、TableLayout等)使用方法
- C++ STL【常用算法】详解
- 【华为OD机试 2023最新 】 最大报酬(C++ 100%)
- iOS:一用就上瘾的刮刮乐视图
- FLIR数据集json文件转yolo格式txt (PS.coco数据集json文件转yolo格式txt)
- 一文掌握jieba分词器的常见用法,附带案例