mysql学习之——基本数据类型
来源:互联网 发布:linux查看内存占用情况 编辑:程序博客网 时间:2024/05/12 07:45
mysql基本数据类型
1 数值
整数类型有5种
TINYINT 1字节
SMALLINT 2字节
MEDIUMINT 3字节
INT 4字节
BIGINT 8字节
声明数据类型时候可以制定数据的现实宽度M(1-255),就是数据类型括号里面的值如:BIGINT(3),M为3只是限制显示,并不能限制数据的大小
浮点数
FLOAT 4字节
DOUBLE 8字节
DECIMAL M+2字节
浮点数由M(显示宽度)D(小数位数)共同控制取值范围
ps:如何选择数据类型,根据具体的数据大小来选择合适的类型,如果超出数据的取值范围,mysql会自动截短数据,对于浮点数小数位会被D(小数位)四舍五入,DECIMAL类型是以字符串存储的,不会被四舍五入,适合对精度要求较高的场合
数值类型的属性
ZEROFILE,如果数值小于定义的宽度,将在数值前面填充0
UNSIGNED,数据为无符号
AUTO_INCREMENT 属性可生成独一无二的数字序列,只对整数类的数据有效
create table test(id int not null primary key auto_increment, value varchar(16) not null) auto_increment = 100;
必须是主键的key才能设置为auto_increment
NULL和NOT NULL 数据列是否为空
DEFAUL可为属性列制定默认值
2 字符串
字符串的长度M是表示最多可以容纳M字节字符组成的字符串,对于单字节字符来说就是容纳M个字符,对于多字节会少于M个字符
char
varchar
varcha的长度L+1,是因为varchar是自动变长的,多出来的一位存储长度,当一个数据表里有一项是varchar,mysql会将其他项的char自动转化成varchar,但是4字节以下的char不会转
blob和text
blob是二进制字符串,text是非二进制字符串,两者都可以存储大量的信息
enum和set虽然是字符串,但是mysql是以数值形式存储
比较特殊的字符串,他们的取值范围是预先定义好的列表中的值
enum只能是列表中的一个值,从1开始
set可以取多值,最多64个成员,空字符也是合法的SET值
3 时间数据类型
date time datatime timestamp
timestamp 定义为default current_timestamp 在插入一条记录时不制定时间,将自动赋为当前时间
定义为on update current_timestamp, 那么修改一条记录时,将自动被修改为当前时间'
current_timestamp 还可以用current_timestamp(),now(),localtime(),localtimestamp,localtimestamp(),null,来代替
create table test(ts timestamp default current_timestamp);
year 为1字节,2位或者4位数字格式的年,1901-2155,70-69(1970-2069)
4 如何选择数据类型
要存放的数据类型
数据值的取值范围
数值比字符串操作快
小类型的处理速度比大类型快
不同数据表中固定和可变长度的处理效率不同
可变长度类型在经过删除和修改操作后容易产生碎片,降低系统性能,需要定期运行optimize_table命令进行优化
固定长度类型由于有固定的长度,容易确定每条记录的起始点,可加快数据表的修复速度
在myisam表中使用固定长度有助改善数据库性能
在innodb表中,固定长度和可变长度数据类型都以相同方式存储
可以建索引来加快数据库的查询速度
可明确指定not null属性,使mysql在检索过程中不判断NULL,加快速度
5 使用auto_increment时应注意:
只有整数列才可指定为auto_increment属性
最好指定为unsigned,可以多一倍序号
必须为not null
必须有唯一索引,以避免重复
当进行全表删除时,auto_increment会从1重新开始
truncate table table_name
用delete from table_name 则不会
这是因为全部操作时,mysql会先删除索引,然后再删除数据,重建数据表,如果要保留原序号信息,可以delete frome table_name where 1;
如果需要强制mysql不重复使用序列值,那么需要另外建一个auto_increment序列的数据表,并永远不删除该表的记录
insert into id set id = NULL;
insert into main set main_id = LAST_INSERT_ID();
可以用alter命令给一个数据表增加一个具有auto_increment属性的数据列
alter table test add new_id int(8) not null unsigned auto_increment,add primary key(new_id);
- mysql学习之——基本数据类型
- Java学习——数据类型之基本数据类型
- mysql协议学习(一)——基本数据类型
- python学习—-基本数据类型
- python学习—-基本数据类型
- 《代码大全》学习笔记之— 基本数据类型(1)
- 《代码大全》学习笔记之— 基本数据类型(2)
- MySQL学习之数据类型
- MySQL学习6:MySQL基本数据类型
- 汇编语言学习之基本数据类型
- python3学习之基本数据类型
- java基础学习—基本数据类型
- OC基础学习——基本数据类型和复杂数据类型
- MySQL学习之数据类型选择
- mysql 学习之三 数据类型
- MYSQL学习笔记之----数据类型
- MySql之数据类型学习总结
- Kotlin学习之基本数据类型的学习
- PostgreSQL描述
- failed to copy 'libsimplejni.so' to '/system/lib/libsimplejni.so': Read-only file system
- android学习手记第二章--Fragment 16 Mar,2011
- 分析师对日本地震影响预估一览
- android 各种开关命令
- mysql学习之——基本数据类型
- 使用eclipse开发webService很简单
- FD_ISSET(s, *set)
- 日本东京飞往中国航班紧张 大多数已无法预订
- hafuman 编码
- 收藏。。。
- Hibernate的uuid主键生成方式
- [转帖]mini2440 LED
- 利用ncftpget/ncftpput, 结合nohup实现后台连续的上传与下载