mysql中常见的数据类型

mysql中常见的数据类型,第1张

一:MySQL数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的

MySQL支持多种数据类型,大致可以分为三类:数值 日期/时间和字符串

二、数值类型

 1.整数类型

2.浮点数

如果希望保证值比较准确,推荐使用定点数数据类型。MySql中的浮点类型有float,double和real。他们定义方式为:FLOAT(M,D) 、 REAL(M,D) 、 DOUBLE PRECISION(M,D)。

FLOAT和DOUBLE中的M和D的取值默认都为0,即除了最大最小值,不限制位数。允许的值理论上是-1.7976931348623157E+308~-2.2250738585072014E-308、0和2.2250738585072014E-308~1.7976931348623157E+308。M、D范围如下:

(MySql5.7实测,与IEEE标准计算的实际是不同的,下面介绍):M取值范围为0~255。FLOAT只保证6位有效数字的准确性,所以FLOAT(M,D)中,M<=6时,数字通常是准确的。如果M和D都有明确定义,其超出范围后的处理同decimal。

D取值范围为0~30,同时必须<=M。double只保证16位有效数字的准确性,所以DOUBLE(M,D)中,M<=16时,数字通常是准确的。如果M和D都有明确定义,其超出范围后的处理同decimal。

CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉,所以,我们在存储时字符串右边不能有空格,即使有,查询出来后也会被删除。在存储或检索过程中不进行大小写转换。

三、时间日期类型(5)

该“0”值如下:

请点击输入图片描述

四、各种类型占用的存储

1.数值类型

 

请点击输入图片描述

定点数的比较特殊,而且与具体版本也有关系,此处单独解释:

使用二进制格式将9个十进制(基于10)数压缩为4个字节来表示DECIMAL列值。每个值的整数和分数部分的存储分别确定。每个9位数的倍数需要4个字节,并且“剩余的”位需要4个字节的一部分。下表给出了超出位数的存储需求:

请点击输入图片描述

2.时间日期

请点击输入图片描述

从版本5.6.4开始,存储需求就有所改变,根据精度而定。不确定部分需要的存储如下:

请点击输入图片描述

比如,TIME(0), TIME(2), TIME(4), 和TIME(6) 分别使用3, 4, 5, 6 bytes。 

3.字符串

请点击输入图片描述

4.类型的选择

为了优化存储,在任何情况下均应使用最精确的类型。

例如,如果列的值的范围为从1到99999,若使用整数,则MEDIUMINT UNSIGNED是好的类型。在所有可以表示该列值的类型中,该类型使用的存储最少。

用精度为65位十进制数(基于10)对DECIMAL 列进行所有基本计算(+、-、*、/)。

使用双精度 *** 作对DECIMAL值进行计算。如果准确度不是太重要或如果速度为最高优先级,DOUBLE类型即足够了。为了达到高精度,可以转换到保存在BIGINT中的定点类型。这样可以用64位整数进行所有计算,根据需要将结果转换回浮点值。

5.使用其他数据库的SQL语句

为了使用为其它数据库编写的SQL执行代码,MySQL按照下表所示对列类型进行映射。通过这些映射,可以很容易地从其它数据库引擎将表定义导入到MySQL中:

请点击输入图片描述

当输入的号码不存在时,查询仍然是正常完成的,并不会出错,只是返回的是个空记录集,但空记录集不等于空对象,所以你简单地用 if ($num){ 来判断是否找到数据是不对的,应该判断返回的记录数量是否为零:

if($num&&mysqli_num_rows($num)>0){

此外,当输入的号码不存在时,mysqli_error($link))是没有错误信息提示的,因为我前面已经说了:这不是错误!

在mysql中要向数据库中保存数据我们最常用的一种方法就是直接使用Insert into语句来实现了,下面我来给大家详细介绍Insert into语句用法

INSERT用于向一个已有的表中插入新行。INSERT…VALUES语句根据明确指定的值插入行。让我们先来看一下insert语句标准的定义,放在[]内的都是可以省略的:

语法

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name [(col_name,...)]

VALUES ({expr | DEFAULT},...),(...),...

[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

实例

create table links (name varchar(255) not null default '', address varchar(255) not null default '')

最简单的插入方法

代码如下

复制代码

Mysql>insert into worker values(‘tom’,’tom@yahoo.com’),(‘paul’,’paul@yahoo.com’)

insert into links values('jerichen','gdsz')

批量保存数据

假如我们想一次性的往数据库里插入多条数据咋办?一定要写多条语句吗?肯定是不会的,因为MySQL设计的还是很人性的。其提供insert语句的

一种非标准格式,即,values(字段值1,字段值2,字段值3),(另一个字段1的值,另一个字段2的值,另一个字段3的值)

# 同时插入两条数据,看语法说明,那个into被我省略了

代码如下

复制代码

insert links (name,url) values('jerichen','gdsz'),('alone','gdgz')

使用INSERT…SELECT语句插入从其他表选择的行

当我们在上一节学习创建表时,知道可以使用select从其它表来直接创建表,甚至可以同时复制数据记录。如果你已经拥有了一个表,你同样可以从select语句的配合中获益。

从其它表中录入数据,例如:

代码如下

复制代码

mysql>insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2

你也可以略去目的表的列列表,如果你每一列都有数据录入。

代码如下

复制代码

mysql>insert into tbl_name1 select col3,col4 from tbl_name2

INSERT INTO ... SELECT语句满足下列条件:

查询不能包含一个ORDER BY子句。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8672287.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存