当前位置:   article > 正文

MySQL基础(二)-----数据类型和数据库的基本操作_数据库如何定义 float和double

数据库如何定义 float和double

目录

 一、数据类型

1、整数类型

2、浮点数类型&定点数类型

浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);

定点类型只有一种,就是 DECIMAL。

3、日期和时间类型

 3.1 YEAR类型

 3.2 DATE、TIME、DATETIME

3.3TIMESTAMP

4、字符串类型

 4.1char类型,char(M)

4.2 varchar类型,varchar(M)

4.3  TEXT 类型

4.4  ENUM 类型

4.5  SET 类型

 5、二进制类型

 二、数据库的基本操作


数据类型(data_type)是指系统中所允许的数据的类型。数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。

MySQL 的数据类型有大概可以分为整数类型、浮点数类型和定点数类型、日期和时间类型、字符串类型、二进制类型等。

 数据库的操作包括创建、删除、修改数据库,这些操作都是管理数据库的基础。

 一、数据类型

 由于计算机是一台机器,也没有手指头,所以无法用十进制来进行计数,取而代之的是低电压和高电压,因此可以与符号0和1对应起来。然后把这些符号都称作为一个二进制位,也就是计算机的计数方式。

这个地方还会分为无符号数(仅代表非负数)和有符号数(代表正数和负数都行),详情大家可以自己去搜索了解一下,这个地方作者推荐一下《MySQL是怎么样运行的》。

1、整数类型

MySQL 主要提供的整数类型有 TINYINTSMALLINTMEDIUMINTINTBIGINT,其属性字段可以添加 AUTO_INCREMENT 自增约束条件。

  •  在数据类型后面加上unsigned单词后,则表明该类型用于表示无符号数。
  • 在数据类型后面加上signed单词,或者什么都不加,则表明该类型用于表示有符号数。

2、浮点数类型&定点数类型

MySQL 中使用浮点数和定点数来表示小数。

浮点类型有两种,分别是单精度浮点数FLOAT)和双精度浮点数DOUBLE);

定点类型只有一种,就是 DECIMAL

 浮点类型和定点类型都可以用(M, D)来表示,其中 M 称为精度,表示总共的位数;D 称为标度,表示小数的位数。

浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。

FLOAT 类型的取值范围如下:

  • 有符号的取值范围:-3.402823466E+38~-1.175494351E-38。

  • 无符号的取值范围:0 和 -1.175494351E-38~-3.402823466E+38。

DOUBLE 类型的取值范围如下:

  • 有符号的取值范围:-1.7976931348623157E+308~-2.2250738585072014E-308。

  • 无符号的取值范围:0 和 -2.2250738585072014E-308~-1.7976931348623157E+308。

提示:

  • 不论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理。

  • FLOAT 和 DOUBLE 在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决定),DECIMAL 如果不指定精度,默认为(10,0)。

  • 浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;缺点是会引起精度问题。

  • 在 MySQL 中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好

  • 另外两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。

单精度浮点数的取值范围为:

 从上图可知,在D相同的情况下,M越大,该类型的取值范围越大;在M相同的情况下,D越大,该类型的取值范围越小。M、D的最大取值取决于硬件支持的极限,并且M必须大于或者等于D。(M、D都是可选的,省略时,会按照硬件支持的最大值来取值)

3、日期和时间类型

MySQL 中有多处表示日期的数据类型:YEARTIMEDATEDTAETIMETIMESTAMP。当只记录年信息的时候,可以只使用 YEAR 类型。

日期和时间类型以及各自表示的取值范围:

在MySQL5.6.4版本以后,TIME、DATETIME、TIMESTAMP这几种类型添加了对毫秒、微秒的支持。

MySQL5.6.4以后,日期和时间类型需要的存储空间:

 3.1 YEAR类型

YEAR 类型是一个单字节类型,用于表示年,在存储时只需要 1 个字节。可以使用各种格式指定 YEAR,如下所示:

  • 以 4 位字符串或者 4 位数字格式表示的 YEAR,范围为 '1901'~'2155'。输入格式为 'YYYY' 或者 YYYY,例如,输入 '2010' 或 2010,插入数据库的值均为 2010。

  • 以 2 位字符串格式表示的 YEAR,范围为 '00' 到 '99'。'00'~'69' 和 '70'~'99' 范围的值分别被转换为 2000~2069 和 1970~1999 范围的 YEAR 值。'0' 与 '00' 的作用相同。插入超过取值范围的值将被转换为 2000。

  • 以 2 位数字表示的 YEAR,范围为 1~99。1~99 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 YEAR 值。注意,在这里 0 值将被转换为 0000,而不是 2000。

提示: 两位整数范围与两位字符串范围稍有不同。例如,插入 3000 年,读者可能会使用数字格式的 0 表示 YEAR,实际上,插入数据库的值为 0000,而不是所希望的 3000。只有使用字符串格式的 '0' 或 '00',才可以被正确解释为 3000,非法 YEAR值将被转换为 0000。

 3.2 DATE、TIME、DATETIME

为了方便展示,下面使用YYYY、MM、DD、hh、mm、ss、uuuuuu分别表示年、月、日、时、分、秒、小数秒。

DATE表示日期,则它的格式就是YYYY-MM-DD;

TIME表示时间,它的格式是hh:mm:ss[.uuuuuu]或者hhh:mm:ss[.uuuuuu]。TIME不仅可以表示一天中的某个时间,也可以表示某一段时间(某两个时间之间的时间间隔,这就导致TIME可能表示的小时数比较大,并且可能为负值);

DATETIME表示日期和时间,格式为YYYY-MM-DD hh:mm:ss[.uuuuuu]。与TIME类型不同的是,DATETIME中存储的时间必须是一天内的某个时间(也就是小时数必须小于24)。

3.3TIMESTAMP

咱们都是用的北京东八区进行计时的

我们把从0号时区的1970-01-01 00:00:00 开始(也就是东八区的1970-01-0108:00:00)到现在所经历的秒数称为时间戳,而TIMESTAMP类型就是用来存储时间戳的。用TIMESTAMP存储时间的好处就是,它展示的值可以随着时区的变化而变化。比方说,我们当前在东八区,在把当前的日期和时间'2021-04-30 22:02:56' 存储到类型为TIMESTAMP的列后,如果将当前系统的时区信息调整为东九区,那么看到的时间将会变成2021-04-30 23:02:56'。 如果使用DATETIME类型的列来存储'2021-04-30 22:02:56'的话,则不同时区看到的时间都是'2021-04-30 22:02:56'。

TIMESTAMP 的显示格式与 DATETIME 相同,显示宽度固定在 19 个字符,日期格式为 YYYY-MM-DD HH:MM:SS,在存储时需要 4 个字节。但是 TIMESTAMP 列的取值范围小于 DATETIME 的取值范围,为 '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC。在插入数据时,要保证在合法的取值范围内。

提示: 协调世界时(英:Coordinated Universal Time,法:Temps Universel Coordonné)又称为世界统一时间、世界标准时间、国际协调时间。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称 UTC。

TIMESTAMP 与 DATETIME 除了存储字节和支持的范围不同外,还有一个最大的区别是:

  • DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;

  • 而 TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。

提示: 如果为一个 DATETIME 或 TIMESTAMP 对象分配一个 DATE 值,结果值的时间部分被设置为 '00:00:00',因此 DATE 值未包含时间信息。如果为一个 DATE 对象分配一个 DATETIME 或 TIMESTAMP 值,结果值的时间部分被删除,因此DATE 值未包含时间信息。

4、字符串类型

字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。

MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。

 VARCHAR 和 TEXT 类型是变长类型,其存储需求取决于列值的实际长度(在前面的表格中用 L 表示),而不是取决于类型的最大可能尺寸。

例如,一个 VARCHAR(10) 列能保存一个最大长度为 10 个字符的字符串,实际的存储需要字符串的长度 L 加上一个字节以记录字符串的长度。对于字符 “abcd”,L 是 4,而存储要求 5 个字节

 4.1char类型,char(M)

M代表该类型最多可以存储的字符数量(注意是字符数量,不是字节数量)
CHAR(M)在不同的字符集下需要的存储空间也是不一一样的。 假设某个字符集编码一个字符
最多需要W字节,那么类型CHAR (M)占用的存储空间大小就是MXW字节。来看下面几种情况。

  • 对于采用ASCII字符集的CHAR(5)类型来说,ASCII 字符集编码一个字符最多需要1字节,也就是M=5、W=1,所以这种情况下该类型占用的存储空间大小就是5X1 = 5字节。
  • 对于采用GBK字符集的CHAR(5)类型来说,GBK 字符集编码一个字符最多需要2字节,也就是M=5、W=2,所以这种情况下该类型占用的存储空间大小就是5X2 = 10字节。
  • 对于采用UTF-8字符集的CHAR(5)类型来说,UTF-8 字符集编码一个字符最多需要3字节也就是M-5、W=3,所以这种情况下该类型占用的存储空间大小就是5X3= 15字节。

如果实际存储的字符串在特定字符集编码下占用的字节数不足M*W,那么剩余的那些存储空间用空格字符(也就是' ')补齐。

4.2 varchar类型,varchar(M)

M代表该类型最多可以存储的字符数量(注意是字符数量,不是字节数量)

VARCHAR(M) 是长度可变的字符串,M 表示最大列的长度,M 的范围是 0~65535VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1。

一个VARCER 0所对应的存储空间其实是由下面这两部分组成。

  • 真正的字符串内容。

        假设真正的字符串在采用特定字符集编码后占用的字节数为L。

  • 占用的字节数。

        假设VARCHAR (M)类型采用的字符集编码一个字符最多需要w字节, 那么:

  • 当MXW < 256时,只需要1字节来表示占用的字节数,此时整个VARCHAR(M)类型需要的存储空间就是L+1字节。
  • 当MXW>=256时,需要2字节来表示占用的字节数。此时整个VARCHR(M)类型需要的存储空间就是L+2字节。

实例:下面将不同的字符串保存到 CHAR(4) 和 VARCHAR(4) 列,说明 CHAR 和 VARCHAR 之间的差别,如下表所示。

 对比结果可以看到,CHAR(4) 定义了固定长度为 4 的列,无论存入的数据长度为多少,所占用的空间均为 4 个字节。VARCHAR(4) 定义的列所占的字节数为实际长度加 1。

4.3  TEXT 类型

TEXT 列保存非二进制字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。

TEXT 类型分为 4 种:TINYTEXTTEXTMEDIUMTEXT 和 LONGTEXT。不同的 TEXT 类型的存储空间和数据长度不同。

  • TINYTEXT 表示长度为 255字符的 TEXT 列。

  • TEXT 表示长度为 65535字符的 TEXT 列。

  • MEDIUMTEXT 表示长度为 16777215字符的 TEXT 列。

  • LONGTEXT 表示长度为 4294967295 或 4GB 字符的 TEXT 列。

4.4  ENUM 类型

ENUM 是一个字符串对象,值为表创建时列规定中枚举的一列值。其语法格式如下:

<字段名> ENUM( '值1', '值1', …, '值n' )

字段名指将要定义的字段,值 n 指枚举列表中第 n 个值。

ENUM 类型的字段在取值时,能在指定的枚举列表中获取,而且一次只能取一个。如果创建的成员中有空格,尾部的空格将自动被删除。

ENUM 值在内部用整数表示,每个枚举值均有一个索引值;列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号,枚举最多可以有 65535 个元素。

例如,定义 ENUM 类型的列('first','second','third'),该列可以取的值和每个值的索引如下表所示。

ENUM 值依照列索引顺序排列,并且空字符串排在非空字符串前,NULL 值排在其他所有枚举值前。

提示: ENUM 列总有一个默认值。如果将 ENUM 列声明为 NULLNULL 值则为该列的一个有效值,并且默认值为 NULL。如果 ENUM 列被声明为 NOT NULL,其默认值为允许的值列表的第 1 个元素。

4.5  SET 类型

SET 是一个字符串的对象,可以有零或多个值,SET 列最多可以有 64 个成员,值为表创建时规定的一列值。指定包括多个 SET 成员的 SET 列值时,各成员之间用逗号,隔开,语法格式如下:

SET( '值1', '值2', …, '值n' )

与 ENUM 类型相同,SET 值在内部用整数表示,列表中每个值都有一个索引编号。当创建表时,SET 成员值的尾部空格将自动删除。

但与 ENUM 类型不同的是,ENUM 类型的字段只能从定义的列值中选择一个值插入,而 SET 类型的列可从定义的列值中选择多个字符的联合。

提示: 如果插入 SET 字段中的列值有重复,则 MySQL 自动删除重复的值;插入 SET 字段的值的顺序并不重要,MySQL 会在存入数据库时,按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL 将忽视这些值,给出警告。

 5、二进制类型

MySQL 中的二进制字符串有 BITBINARYVARBINARYTINYBLOBBLOBMEDIUMBLOB 和 LONGBLOB

下表中列出了 MySQL 中的二进制数据类型,括号中的 M 表示可以为其指定长度。

其中bit中的M取值范围为1~64,而且M可以省略,它的默认值为1,也就是说BIT(1)和bit是一个意思。

一个字节拥有8比特(位):如果我们想存储的比特数不足整数个字节,那么MySQL会偷偷地填充满,比方说:

  • BIT(1) 类型仅仅需要存储1比特的数据,但是MySQL会为其申请(1+7)/8 =1字节;
  • BIT (9)类型仅仅需要存储7比特的数据,但是MySQL会为其申请(9+7)/8 -2字节。

BINARY(M) 与VARBINARY(M)
BINARY (M)和VARBINARY (M)对应于前面提到的CHAR (M)和VARCHAR(M),都是前
者是固定长度的类型,后者是可变长度的类型,只不过BINARY (M)和VARBINARY (M)是用
来存放字节的,其中的M代表该类型最多能存放的字节数量,而CHAR (M)和VARCHAR (M)
是用来存储字符的,其中的M代表该类型最多能存放的字符数量。
BLOB类型
TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB用于存储可变长度的二进制数据,比如
图片、音频、压缩文件啥的。它们很像TINYTEXT、TEXT、 MEDIUMTEXT、LONGTEXT, 只
不过各种BLOB类型是用来存储字节的,而各种TEXT类型是用来存储字符的而已。

  • BLOB 列存储的是二进制字符串(字节字符串),TEXT 列存储的是非进制字符串(字符字符串)。

  • BLOB 列是字符集,并且排序和比较基于列值字节的数值;TEXT 列有一个字符集,并且根据字符集对值进行排序和比较。 

 二、数据库的基本操作

数据库的操作包括创建、删除、修改数据库,这些操作都是管理数据库的基础。

1、展示数据库

show databases;

2、创建数据库

  1. create database test;
  2. /**这里的test就是数据库名**/

 注意:如果数据库已经存在,但是我们并不知道的情况下,我们可以加上这一句:

  1. create database if not exists test;
  2. /**if not exists 表示如果数据库不存在则,创建数据库,这个命令不管数据库是否存在都会执行,但是如果数据库存在会报一个警告,警告内容就是error中报的错误:该数据库已经存在**/

 可以使用show warnings语句查看warning是啥。

3、切换默认数据库

  1. use test;
  2. mysql -h localhost -u root -p123456 test;
  3. /**二者都可以,第二个是启动时就连接你想要的数据库**/

4、删除数据库

  1. drop database test;
  2. /**test就是数据库名**/

如果要判断你删除的数据库是否存在,那么要加上if exists

  1. drop database if exists test;
  2. /**if exists 就是判断该数据库是否存在,如果存在,则删除,不存在就是一个warning警告**/

MySQL基础(二)-----数据类型和数据库的基本操作。就分享到这个地方,后续会更新MySQL基础(三)-----表的基本操作和列的属性。

今天的分享就到此结束了,如果觉得对您有帮助,麻烦给个三连!

以上内容为本人的经验总结和平时操作的笔记。若有错误和重复请联系作者删除!!感谢支持!!
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/644803
推荐阅读
相关标签
  

闽ICP备14008679号