MySQL学习笔记(三)、数据与字段类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Three_dog/article/details/82764349

数据与字段类型

1.什么是数据表

回顾数据库系统组成。
数据表是一个数据库里面用来存储数据的基本单元,是由表结构、表数据组成。

SQL语句不区分大小写,但是表就是一个文件名,windows不区分大小写,linux区分大小写,所以在命名时候,需要注意:
1、一定要有意义(英文或英文组合和多个单词的缩写)
2、 自己定义的名称最好都是小写
3、 Sql语句关键字最好都大写

表的作用:存放相同规则的数据

表是有由列和数据组成的。每行数据称作一个条目,每一列称作一个字段

2. 建表语句规范:

CREATE  TABLE  [IF NOT EXISTS] 表名称(
字段名1  列类型 [属性]  [索引],
字段名2  列类型 [属性]  [索引],
......
字段名n  列类型 [属性]  [索引]
) [表类型] [表字符集类型];

表名称和字段名 需要用户自定义名称;

SQL语句不区分大小写,但是表就是一个文件名,windows不区分大小写,linux区分大小写,所以在命名时候,需要注意:

  1. 一定要有意义(英文或英文组合和多个单词的缩写,避免使用拼音)
  2. 自己定义的名称最好都是小写
  3. Sql语句关键字最好都大写

3.类型和属性

建表过程中,每个字段需要提供类型,属性,约束等描述信息描述和规范这个字段。

类型

类型就用来描述字段所存储的什么类型的数据,在SQL中,主要有以下几种数据类型:

  • 数值型
    • 整型
    • 浮点型
  • 日期型
  • 字符型
    • 字符型
    • 枚举型
    • 集合型

3.1.1 整型

标注1:UNSIGNED 代表有无符号
ZEROFILL代表:
1、 插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0
2.、zerofill默认为int(10)
3.、当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128+127,无符号为0256。

标注2:(M)代表现实的位数

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

  • 一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255。

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

  • 一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

  • 一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。

INT[(M)] [UNSIGNED] [ZEROFILL]

  • 一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。

INTEGER[(M)] [UNSIGNED] [ZEROFILL]

  • 这是INT的一个同义词。

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

  • 一个大整数。有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615

总结1:
占空间大小:1,2,3,4,8字节分别对应:
*TINYINT 非常小
*SMALLINT 较小
*MEDIUINT 中等
*INT 标准
*BIGINT 大整形

3.1.2浮点型

FLOAT[(M,D)] [ZEROFILL]

  • 一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。
  • M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24 的一个参数表示一个单精密浮点数字。

DOUBLE[(M,D)] [ZEROFILL]

  • 一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。
  • M是显示宽度而D是小数位数。没有一个参数的DOUBLE或FLOAT(X)(25 < = X < = 53)代表一个双精密浮点数字。

DOUBLE PRECISION[(M,D)] [ZEROFILL]
REAL[(M,D)] [ZEROFILL]

  • 这些是DOUBLE同义词。

DECIMAL[(M[,D])] [ZEROFILL]

  • 定点数,一个未压缩(unpack)的浮点数字。不能无符号。

NUMERIC(M,D) [ZEROFILL]

  • 这是DECIMAL的一个同义词。

总结:float 4字节。 double 8 字节
M:整个数值的长度 D:小数的长度

例:FLOAT[(M,D)][ZEROFILL]
create table t4(float(4,2)); //-99.99 - 99.99

定点数(本质上是按照字符串来进行存储),没有四舍五入,对于精度要求高的,推荐使用
DECIMAL(M,D) M+2字节

浮点数和定点数区别:

浮点数相对于定点数优点是在长度一定的情况下,浮点数表示范围更宽,但其存在误差问题,对于货币等精度敏感的数据,应该使用定点数表示,编程过程中尤其注意浮点数误差问题。
另外,由于浮点数存在误差,所以在项目里面尽可能少的不要用浮点数做=进行比较判断。

mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
Query OK, 0 rows affected (0.29 sec)
mysql> insert into test values(131072.32,131072.32);
Query OK, 1 row affected (0.07 sec)
mysql> select * from test;
+-----------+-----------+
| c1        | c2        |
+-----------+-----------+
| 131072.31 | 131072.32 |
+-----------+-----------+
1 row in set (0.00 sec)

3.2日期型

  • DATE YYYY-MM-DD
  • TIME hh:mm:ss
  • DATETIME YYYY-MM-DD hh:mm:ss
  • TIMESTAMP YYYYMMDDhhmmss (时间戳)
  • YEAR YYYY YY

举例:

mysql> create table tab10(
one date,two time,three datetime,
four timestamp,five year
);
Mysql> insert into tab10(one)  values(20101201);  //2010-12-01   2010/12/01
Mysql> insert into tab10(one,two,three) values(20101201,13:12:11,11-02-09 11:11:11);

3.3.1字符型

是最基本的类型,可以表示任何一种类型的值,“mysql” ‘mysql’都是可以的;

  • CHAR(M) [BINARY]
    一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。M的范围是1 ~ 255个字符。

  • VARCHAR(M) [BINARY]
    一个变长字符串

  • TINYBLOB & TINYTEXT
    一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。。

  • BLOB & TEXT
    一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。。

  • MEDIUMBLOB & MEDIUMTEXT
    一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。

  • LONGBLOB & LONGTEXT
    一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。

char 和 varchar
  • 两者区别:
    • char定长,varchar可变长度。声明时指定长度,超出长度后会报错。
    • 如果存入的字符不足生命的长度,char的大小还是生命的长度;而varchar会自动伸缩为实际存入字符串的长度以节省空间
  • 应用场景:
    • char固定长度,效率高,比如性别…但是浪费空间
    • varchar不固定长度,速度慢,效率低,但节省空间,比如文章标题…
blob

blob代表字节流,用来保存二进制数据,照片、电影、压缩包。一般我们并不在数据库中直接存放多媒体数据,而是将资源存在服务器,数据库中只保存存储的路径即可。

3.3.2枚举和集合

  • ENUM(‘value1’,‘value2’,…)
    枚举。一个仅有一个值的字符串对象,这个值式选自与值列表’value1’、‘value2’, …,或NULL。一个ENUM最多能有65535不同的值。

    • 注意:枚举元素列表里面成员,必须放在’’里面。
    • 举例:
    mysql> create table tab9(one enum(‘a’,’b’,’c’,’d’),two set(‘a’,’b’,’c’,’d’));
    mysql> insert into tab9 values(‘a’,’b’); //OK
    mysql> insert into tab9 values(‘c’,’c,d’); //OK
    
  • SET(‘value1’,‘value2’,…)
    一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表’value1’, ‘value2’, …选出。一个SET最多能有64个成员。

枚举和集合的区别:

枚举一次只能使用一个枚举元素值,而集合可以一次使用多个值,中间使用”,”隔开即可。

猜你喜欢

转载自blog.csdn.net/Three_dog/article/details/82764349