mysql基础数据类型

mysql常用数据类型概览

![1036857-20170801181433755-146301178](D:\笔记\mysql\复习\1036857-20170801181433755-146301178.png)1. 数字: 整型:tinyinit int bigint 小数: float :在位数比较短的情况下不精准 double :在位数比较长的情况下不精准 0.000001230123123123 存成:0.000001230000 decimal:(如果用小数,则用推荐使用decimal) 精准 内部原理是以字符串形式去存 2. 字符串: char(10):简单粗暴,浪费空间,存取速度快 root存成root000000 varchar:精准,节省空间,存取速度慢 sql优化:创建表时,定长的类型往前放,变长的往后放 比如性别 比如地址或描述信息 >255个字符,超了就把文件路径存放到数据库中。 比如图片,视频等找一个文件服务器,数据库中只存路径或url。3. 时间类型: 最常用:datetime 4. 枚举类型与集合类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAIxWM9Z-1585063057990)(D:\笔记\mysql\复习\1036857-20170801181433755-146301178.png)]

1、整数类型

  • 整数类型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
  • 作用:存储年龄,等级,id,各种号码等
整型类型测试 默认是有符号的mysql> create table t1(money tinyint); #注意,创建表时最后一个字段后面不能有逗号,错误写法mysql> create table t1(money tinyint,);mysql> insert into t1 values(11);Query OK, 1 row affected (0.28 sec)mysql> select * from t1;mysql> insert into t1 values(-10);Query OK, 1 row affected (0.11 sec)mysql> select * from t1;mysql> insert into t1 values(-200);Query OK, 1 row affected, 1 warning (0.10 sec)mysql> select * from t1;设置了数据类型,会有一个约束效果,只能表示自己范围内的数创建 无符号数值类型 的写法:mysql> create table t2(id tinyint unsigned);
  • 浮点类型:float double
  • 作用:存储薪资、身高、温度、体重、体质参数等
测试mysql> create table t3(id float(60,30)); # 60代表小数位+整数位总数Query OK, 0 rows affected (1.70 sec) # 30表示小数位最高30位mysql> create table t4(id double(60,30));Query OK, 0 rows affected (0.88 sec)mysql> create table t5(id decimal(60,30)); # decimal能够存储精确值的原因在于其内部按照字符串存储。Query OK, 0 rows affected (0.96 sec)mysql> insert into t3 values(1.1111111111111111111111);Query OK, 1 row affected (0.13 sec)mysql> insert into t4 values(1.1111111111111111111111);Query OK, 1 row affected (0.22 sec)mysql> insert into t5 values(1.1111111111111111111111);Query OK, 1 row affected (0.09 sec)mysql> select * from t3;mysql> select * from t4;mysql> select * from t5;
  • 类型:DATE,TIME,DATETIME ,IMESTAMP,YEAR
  • 作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等
mysql> create table t6(d1 year ,d2 date,d3 datetime);Query OK, 0 rows affected (1.75 sec)mysql> insert into t6 values(now(),now(),now());Query OK, 1 row affected, 1 warning (0.12 sec)mysql> select * from t6;
char和varchar性能对比:    以char(5)和varchar(5)来比较,加入我要存三个人名:sb,ssb1,ssbb2    char:      优点:简单粗暴,不管你是多长的数据,我就按照规定的长度来存,5个5个的存,三个人名就会类似这种存储:sb ssb1 ssbb2,中间是空格补全,取数据的时候5个5个的取,简单粗暴速度快      缺点:貌似浪费空间,并且我们将来存储的数据的长度可能会参差不齐    varchar:      varchar类型不定长存储数据,更为精简和节省空间      例如存上面三个人名的时候类似于是这样的:sbssb1ssbb2,连着的,如果这样存,请问这三个人名你还怎么取出来,你知道取多长能取出第一个吗?        varchar在存数据的时候,会在每个数据前面加上一个头,这个头是1-2个bytes的数据,这个数据指的是后面跟着的这个数据的长度,1bytes能表示2**8=256,两个bytes表示2**16=65536,能表示0-65535的数字,所以varchar在存储的时候是这样的:1bytes+sb+1bytes+ssb1+1bytes+ssbb2,所以存的时候会比较麻烦,导致效率比char慢,取的时候也慢,先拿长度,再取数据。      优点:节省了一些硬盘空间,一个acsii码的字符用一个bytes长度就能表示,但是也并不一定比char省,看一下官网给出的一个表格对比数据,当你存的数据正好是你规定的字段长度的时候,varchar反而占用的空间比char要多。ValueCHAR(4)Storage RequiredVARCHAR(4)Storage Required''' '4 bytes''1 byte'ab''ab '4 bytes'ab'3 bytes'abcd''abcd'4 bytes'abcd'5 bytes'abcdefgh''abcd'4 bytes'abcd'5 bytes              缺点:存取速度都慢          对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列性能要好。因而,主要的性能因素是数据行使用的存储总量。由于CHAR平均占用的空间多于VARCHAR,因此使用VARCHAR来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。
enum:单选行为------枚举类型只允许从值集合中选取单个值,而不能一次取多个值1.创建表create table t8(id int, name char(18),gender enum('male','female'));2.写入数据insert into t8 values(1,'alex','不详'); ---------不详无法写入3.查询表中数据select * from t8;4.写入数据insert into t8 values(1,'alex','male');-------------male可以写入5.查询表中数据select * from t8;2.写入数据insert into t8 values(1,'alex','female');------------female可以写入3.查询表中数据select * from t8;

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. Android(安卓)- Manifest 文件 详解
  3. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  4. Selector、shape详解(一)
  5. android2.2资源文件详解4--menu文件夹下的菜单定义
  6. Android发送短信方法实例详解
  7. Android(安卓)读取资源文件实例详解
  8. 详解Android中的屏幕方向
  9. Android学习笔记(10)————Android的Listview详解1(ArrayAdapte

随机推荐

  1. 利用BLCR加速android的启动(android4.2)
  2. Android开发常用开源框架
  3. Android开发者指南(10) ―― Android API
  4. Android(安卓)WebRTC开发环境设置
  5. Android技术篇-了解Android的屏幕适配
  6. Android开发者的Air For Android简单入门
  7. Android单个进程内存分配
  8. 优秀的Android音频播放器
  9. Android版本与Android sdk int的对应关系
  10. (4.1.2.6)Android(安卓)判断app是否在前台