赞
踩
目录
浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);
数据类型(data_type)是指系统中所允许的数据的类型。数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。
MySQL 的数据类型有大概可以分为整数类型、浮点数类型和定点数类型、日期和时间类型、字符串类型、二进制类型等。
数据库的操作包括创建、删除、修改数据库,这些操作都是管理数据库的基础。
由于计算机是一台机器,也没有手指头,所以无法用十进制来进行计数,取而代之的是低电压和高电压,因此可以与符号0和1对应起来。然后把这些符号都称作为一个二进制位,也就是计算机的计数方式。
这个地方还会分为无符号数(仅代表非负数)和有符号数(代表正数和负数都行),详情大家可以自己去搜索了解一下,这个地方作者推荐一下《MySQL是怎么样运行的》。
MySQL 主要提供的整数类型有 TINYINT
、SMALLINT
、MEDIUMINT
、INT
、BIGINT
,其属性字段可以添加 AUTO_INCREMENT
自增约束条件。
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都是可选的,省略时,会按照硬件支持的最大值来取值)
MySQL 中有多处表示日期的数据类型:YEAR
、TIME
、DATE
、DTAETIME
、TIMESTAMP
。当只记录年信息的时候,可以只使用 YEAR
类型。
日期和时间类型以及各自表示的取值范围:
在MySQL5.6.4版本以后,TIME、DATETIME、TIMESTAMP这几种类型添加了对毫秒、微秒的支持。
MySQL5.6.4以后,日期和时间类型需要的存储空间:
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。
为了方便展示,下面使用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)。
咱们都是用的北京东八区进行计时的
我们把从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 值未包含时间信息。
字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。
MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。
VARCHAR
和TEXT
类型是变长类型,其存储需求取决于列值的实际长度(在前面的表格中用L
表示),而不是取决于类型的最大可能尺寸。例如,一个
VARCHAR(10)
列能保存一个最大长度为 10 个字符的字符串,实际的存储需要字符串的长度L
加上一个字节以记录字符串的长度。对于字符 “abcd”,L
是 4,而存储要求 5 个字节
M代表该类型最多可以存储的字符数量(注意是字符数量,不是字节数量)
CHAR(M)在不同的字符集下需要的存储空间也是不一一样的。 假设某个字符集编码一个字符
最多需要W字节,那么类型CHAR (M)占用的存储空间大小就是MXW字节。来看下面几种情况。
如果实际存储的字符串在特定字符集编码下占用的字节数不足M*W,那么剩余的那些存储空间用空格字符(也就是' ')补齐。
M代表该类型最多可以存储的字符数量(注意是字符数量,不是字节数量)
VARCHAR(M)
是长度可变的字符串,M
表示最大列的长度,M
的范围是 0~65535
。VARCHAR
的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1。
一个VARCER 0所对应的存储空间其实是由下面这两部分组成。
假设真正的字符串在采用特定字符集编码后占用的字节数为L。
假设VARCHAR (M)类型采用的字符集编码一个字符最多需要w字节, 那么:
实例:下面将不同的字符串保存到 CHAR(4)
和 VARCHAR(4)
列,说明 CHAR
和 VARCHAR
之间的差别,如下表所示。
对比结果可以看到,CHAR(4)
定义了固定长度为 4 的列,无论存入的数据长度为多少,所占用的空间均为 4 个字节。VARCHAR(4)
定义的列所占的字节数为实际长度加 1。
TEXT 列保存非二进制字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。
TEXT 类型分为 4 种:TINYTEXT
、TEXT
、MEDIUMTEXT
和 LONGTEXT
。不同的 TEXT 类型的存储空间和数据长度不同。
TINYTEXT
表示长度为 255字符的 TEXT 列。
TEXT
表示长度为 65535字符的 TEXT 列。
MEDIUMTEXT
表示长度为 16777215字符的 TEXT 列。
LONGTEXT
表示长度为 4294967295 或 4GB 字符的 TEXT 列。
ENUM
是一个字符串对象,值为表创建时列规定中枚举的一列值。其语法格式如下:
<字段名> ENUM( '值1', '值1', …, '值n' )
字段名指将要定义的字段,值 n
指枚举列表中第 n
个值。
ENUM
类型的字段在取值时,能在指定的枚举列表中获取,而且一次只能取一个。如果创建的成员中有空格,尾部的空格将自动被删除。
ENUM
值在内部用整数表示,每个枚举值均有一个索引值;列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号,枚举最多可以有 65535 个元素。
例如,定义 ENUM 类型的列('first','second','third'),该列可以取的值和每个值的索引如下表所示。
ENUM 值依照列索引顺序排列,并且空字符串排在非空字符串前,NULL 值排在其他所有枚举值前。
提示: ENUM 列总有一个默认值。如果将 ENUM 列声明为 NULL
,NULL
值则为该列的一个有效值,并且默认值为 NULL
。如果 ENUM 列被声明为 NOT NULL
,其默认值为允许的值列表的第 1 个元素。
SET 是一个字符串的对象,可以有零或多个值,SET 列最多可以有 64 个成员,值为表创建时规定的一列值。指定包括多个 SET 成员的 SET 列值时,各成员之间用逗号,隔开,语法格式如下:
SET( '值1', '值2', …, '值n' )
与 ENUM 类型相同,SET 值在内部用整数表示,列表中每个值都有一个索引编号。当创建表时,SET 成员值的尾部空格将自动删除。
但与 ENUM 类型不同的是,ENUM 类型的字段只能从定义的列值中选择一个值插入,而 SET 类型的列可从定义的列值中选择多个字符的联合。
提示: 如果插入 SET 字段中的列值有重复,则 MySQL 自动删除重复的值;插入 SET 字段的值的顺序并不重要,MySQL 会在存入数据库时,按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL 将忽视这些值,给出警告。
MySQL 中的二进制字符串有 BIT
、BINARY
、VARBINARY
、TINYBLOB
、BLOB
、MEDIUMBLOB
和 LONGBLOB
下表中列出了 MySQL 中的二进制数据类型,括号中的 M
表示可以为其指定长度。
其中bit中的M取值范围为1~64,而且M可以省略,它的默认值为1,也就是说BIT(1)和bit是一个意思。
一个字节拥有8比特(位):如果我们想存储的比特数不足整数个字节,那么MySQL会偷偷地填充满,比方说:
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、创建数据库
- create database test;
- /**这里的test就是数据库名**/
注意:如果数据库已经存在,但是我们并不知道的情况下,我们可以加上这一句:
- create database if not exists test;
- /**if not exists 表示如果数据库不存在则,创建数据库,这个命令不管数据库是否存在都会执行,但是如果数据库存在会报一个警告,警告内容就是error中报的错误:该数据库已经存在**/
可以使用show warnings语句查看warning是啥。
3、切换默认数据库
- use test;
- mysql -h localhost -u root -p123456 test;
- /**二者都可以,第二个是启动时就连接你想要的数据库**/
4、删除数据库
- drop database test;
- /**test就是数据库名**/
如果要判断你删除的数据库是否存在,那么要加上if exists
- drop database if exists test;
- /**if exists 就是判断该数据库是否存在,如果存在,则删除,不存在就是一个warning警告**/
MySQL基础(二)-----数据类型和数据库的基本操作。就分享到这个地方,后续会更新MySQL基础(三)-----表的基本操作和列的属性。
今天的分享就到此结束了,如果觉得对您有帮助,麻烦给个三连!
以上内容为本人的经验总结和平时操作的笔记。若有错误和重复请联系作者删除!!感谢支持!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。