mysql的数据类型,列类型,字段类型
MySQL的数据类型有三种:
数值型,字符串,还有日期
数值:
整型:int
只能表示整数或0。那么最大的整数会很大!
默认是有符号!可通过 整型的 unsigned选项,intunsigned 设置整型无符号
create table type_int(
num int unsigned
);
insert into type_int values(0);
insert into type_int values(211);
insert into type_int values(-1);
显示宽度,不决定整型的范围。而决定在显示出该数之后,如果宽度不够,则采用前导零不齐!此时需要额外的属性 zerofill 来设置!
可见无符号,默认的显示宽度是 10,因此全都使用0来补齐。
可以设置整型的显示宽度!在 int(M)即可!
create table type_int(
num int(25) unsigned zerofill
);
insert into type_int values(0);
insert into type_int values(10);
insert into type_int values(1111110);
最高的是255个宽度;
如果超出了额定宽度就直接显示了;
另外:mysql中没有布尔型 但是存在布尔型关键字,表示 tinyint(1);
浮点型 float double:
单精度,float,4个字节
双精度,double,8个字节
在定义浮点数,典型的需要指明其有效位数,和 小数位数
float(M,D)
double(M,D)
M:所有的有效位数
D:其中的小数位数
以上两个值,决定一个浮点数的有效范围
如果超出了范围就会按照最大值来显示,并不会报错;
注意,浮点数,近似值,不是精确值!如果一个数,很大,接近最大值,可能出错!
一旦出现精确数据(小数)需要保存可以使用,下面的定点数;
定点数,decimal:
小数点是固定的!
decmal,与定义浮点数一致,也有 有效位数与小数位数的概念:
decimal(M,D)
不是数的形式存储,类似于字符串的形式!
create table type_cermal(
num decimal(30,2)
);
insert into type_cermal values(222222.24);
insert into type_cermal values(222222.254); -- 如果小数点超出范围之后,就支取前两位
关于小数:
字符串类型:
char:
最基本(定长)的字符串类型!
用于保存,长度固定的内容!
速度快,但是保存变长数据,会浪费空间!
varchar:
可变长度的字符串!
用于保存长度可变的数据!
保存变长数据时,节省空间,处理起来麻烦些!
char(L),varchar(L)
L,表示每个数据的最大长度!单位是 字符数(不是字节数)
create table type_char(
str char(10)
);
insert into type_char values(13546346);insert into type_char values(135463245646);
超过了指定的字符串就会只显示前制定的个数,后面就不会显示;
L 表示最大长度!
L的值不是多大都可以!
有最大值:
1,mysql一条记录最大不能超过65535个字节!(字段的长度加起来,不能超过这个值)
2,长度单位是字符数,与编码是相关的!
采用单字节编码测试下:
Latin1
为什么是 65532呢,少了三个字节:
3,由于varchar是变长,需要记录下真实的数据到底有多长!每个varchar类型的数据,还需要额外的1个或2个字节保存真实数据的长度!(取决于真实数据的长度)
4,整条记录,还需要一个字节来保存那些字段为null
·
.text:
文本,不限长度的字符串!
该字段,不需要指定长度,而且也不会算入到记录的总长度内!
枚举 enum 单选:
create table type_enmu(
num enum('male', 'remale', 'serect')
);
在处理时,类似字符串型进行操作!
意义在于:
1, 限定值的可能性!(只能是选项里面的值)
原因是枚举型 是利用 整数进行管理的,能够2个字节进行管理!
每个值,都是一个整数标识,从第一个选项开始为1,逐一递增!
管理时整数的形式,速度比字符串快!
这个下标是从1开始的 而不是从0,如果输入的是不是这个范围内的值得话,就会和下面一样虽然不报错但是都是0,前面的值也为空;
2 个字节,0-65535,因此可以有 65535个选项可以使用!
集合,set,复选:
类似于 enum枚举,在定义时,也需要指定其已有值!
与字符串相比,优势是:
1, 也是采用 整数进行管理的!采用位运算,从第一位开始为1,逐一x2!
create table type_set(
hobby set('male','remale','select','other')
);
insert into type_set values('male');
insert into type_set values('male','reamale');
insert into type_set values('male','remale','other');
insert into type_set values(1);
insert into type_set values('1,2'); -- 显示没有数据
1, 每个集合类型8个字节,64位,因此可以表示64个元素!
注意:站在 mysql的角度,尽量多用枚举和集合!
但是站在php操作mysql的角度,尽量少用!(兼容性差);
日期时间:
datetime:
'1000-01-01 00:00:00'到'9999-12-3123:59:59'
在处理时是使用字符串的形式进行管理!
timestamp:
时间戳,管理常用的典型时间,从1970-1-1开始。空间少,而且是以整型的形式管理,但是一个字符串的形式展示的!
如果低于这个时间就会显示一长串的0
data:
日期,如果只记录日期,不记录时间采用 date!
year:
在保存年份的时候。
采用一个字节保存!因此只能表示 1901——2155年!
time:
时间,时间时刻!
还可以表示时间跨度!时间段的概念!
总结:
one:除了time,表示都是时间点的概念!time还表示时间跨度!
two:年份的表示
可以采用2位年份:
0-69 表示 20 XX
而 70-99 表示 19XX
1, 除了-还有:可以作为日期和时间分隔符之外,很多其他字符都可以!
放在php程序中:
小范围的日期:使用整型
大范围的日期:字符串!
列属性,字段约束:
mysql的NULL不是数据,也不是类型!只是标识属性!
用于说明某个字段,是否可以为null(是否可以什么都不存)
NULL采用关键NULL表示!(不是字符串)
是:NULL,而不是:‘NULL’
属性:
null 表示可以为空
not null,表示不能为空
如果,在添加数据时 ,没有指定值,也可能会是NULL!
default属性,默认值约束;
create table preperty_default_1 (
id int,
name varchar(10) default 'itcast'
);insert into preperty_default_1 (id) values (1);insert into preperty_default_1 values (2, null);
如果一个字段没有指定默认值,那么默认为NULL
此时:如果在定义该字段时,不允许为NULL,则插入时,必须保证该字段有值才可以!
(另外一个选择是增加默认值)
典型在很多表上增加一个 update_time 将其默认值设置成 current_timestamp。就可以记录下当前记录的最后操作时间!
主键约束/唯一约束 primary unique:
站在约束的角度,限制的,该字段,值要唯一!
但是主键 与 唯一 不是一个概念:
都是索引的一种!
主键:
可以唯一标识记录的字段,称之为主键!
唯一:
保证在某个字段上的数据是唯一的,可以设置成唯一约束!
但是,一个表,只能有一个主键!
典型的,在创建表时,主动增加一个非实体的自然属性,充当主键,采用整型,运算速度快!
其他的唯一字段,建立唯一约束!
建立:
两种方案:
一旦创建了主键:
默认就是不能为空:
唯一,使用 unique key 来创建!
create table preperty_unique_1 (
id int primary key,
sn char(5) unique key,
name varchar(10)
);
一个表可以有多个唯一,但是只能有一个主键!
注意:主键或者是唯一,都可以由 多个字段组成!
因此,主键 与 字段的概念:字段来充当主键,不是字段就是主键!(称之为复合主键)
尽量采用 id 一个来作为主键!
如何管理主键/唯一?
删除主键:
添加主键
删除唯一:
添加唯一
mysql的数据类型,列类型,字段类型相关推荐
- mysql修改数据类型_MySQL修改字段类型
mysql> alter table 表名 modify column 字段名 类型.数据库中address表 city字段是varchar(30),修改类型可以用(谨慎修改类型,可能会导致原有 ...
- Oracle/MSSQL/Mysql 常用数据库的字段类型及大小
Oracle/MSSQL/Mysql 常用数据库的字段类型及大小 ORACLE的数据类型 常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字 ...
- 【mysql】mysql 中 text,longtext,mediumtext 字段类型的意思, 以及区别
mysql 中 text,longtext,mediumtext 字段类型的意思, 以及区别 mysql 中 text,longtext,mediumtext 字段类型区别为:字节限制不同.I/O 不 ...
- mysql中生成列与JSON类型的索引
MySQL中支持生成列,生成列的值是根据列定义中包含的表达式计算的. 一个简单的例子来认识生成列! CREATE TABLE triangle( sidea DOUBLE, sideb DOUBLE, ...
- Mysql修改字段名、修改字段类型、删除字段
目录 1.修改字段类型.字段名.字段注释.类型长度.字段默认值 2.修改表名 3.修改表的注释 4.在指定位置插入新字段 5.删除字段 1. 修改字段类型.字段名.字段注释.类型长度.字段默认值 my ...
- 修改mysql 视图字段类型_记一次mysql视图创建时自定义字段类型不同环境不同的原因...
由于老项目使用的是hibernate,当项目启动时会去检查数据库字段类型等,发现一张视图中某个自定义字段在开发环境中类型为text,但是到了生产环境类型却为mediumtext,导致代码在生产上会有问 ...
- php mysql 时间字段_php – MySQL中各种日期/时间字段类型的优...
> TIMESTAMP存储在MySQL专有方法中(尽管它基本上只是一个由年,月,日,小时,分钟和秒组成的字符串),此外,只要插入或更改记录,TIMESTAMP类型的字段就会自动更新.显式字段值给 ...
- Mysql的int和bigint字段类型,映射到Java的Integer和Long类型时,勾选UNSIGNED无符号会导致越界转换。
使用Mysql查询数据时,自动映射数据类型. 有时候Mysql的int字段,会正确映射到Java的Integer类型,有时候又会映射到Java的Long类型上,最后终于找到原因. 原来是Mysql的i ...
- mysql 关于日期时间的字段类型
mysql日期和时间类型 mysql有5种表示时间值的日期和时间类型,分别为.DATE,TIME,YEAR,DATETIME,TIMESTAMP. TIMESTAMP类型有专有的自动更新特性, TIM ...
- Mysql 之 修改字段名和字段类型
内容描述:修改表中的字段名,并修改字段的数据类型. 相关知识 为了完成本关任务,你需要掌握:1.如何修改字段名:2.如何修改字段的数据类型. 修改字段名 有时,在我们建好一张表后会突然发现,哎呀!字段 ...
最新文章
- 通俗易懂:8大步骤图解注意力机制
- 谷歌实现2种新的强化学习算法,“比肩”DQN,泛化性能更佳!|ICLR 2021
- request获取数据3种方法
- django异常日志_5分钟教你学会Django系统错误监控
- AG3 hang after click membership search
- 安卓清理垃圾清理代码_用方面清理代码
- Golang——切片使用大全(创建、初始化、遍历、截取、修改、添加、切片的copy、切片作为函数参数、切片求和、切片求最大值)
- 多取值离散型特征工程_特征工程(完)
- 论文阅读:Deep Image Matting
- Alarm:IT界朋友请珍惜你的身体[转贴]
- hibernate hql
- 《Web编程技术》学习笔记(一)
- 怎么从转移特性曲线上看dibl_国民技术面试20200910
- 怎么查EI论文的检索号
- T600显卡和GTX1650 哪个好
- css三实现ui,纯CSS实现常见的UI效果
- 微型计算机基础知识,第1章微型计算机基础知识
- 热修复——Bugly让热修复变得如此简单
- Echarts3单仪表盘和多仪表盘
- Scrapy爬取斗破苍穹漫画