数据库字段类型设计

数据库字段类型设计,第1张

一、整型:

1、tinyint:tinyint 是-128到128 。当属性设置为unsigned的时候。最大值就是255了。现在知道为什么需要设置为unsigned属性了。原来是为了最大限度的使用给予的存储空间。如果不设置。那么假如你的值都是正数的。那么-128这一百多个数字就相当于是浪费了。默认tinyint会自动设置为tinyint(3)

2、int,占四个字节,取值范围是-2^31到2^31-1(大约正负二十亿)int 类型phpmyadmin默认会设置int(10)

3、bigint,占八个字节,取值范围是-2^63到2^63-1

二、时间类型

1、Date:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”;

2、TimeStamp:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”;

3、DateTime:也是存储既有日期又有时间的数据。存储和显示的格式跟TimeStamp一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”; (一般用这个)

1、尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED

2、大小(VARCHAR的长度只分配真正需要的空间)

3、使用枚举或整数代替字符串类型

4、类型(尽量使用TIMESTAMP而非DATETIME,在精度要求高的应用中,建议使用定点数来存储数值,以保证结果的准确性。能用decimal就不要用float)

5、单表不要有太多字段,建议在20以内

6、值(是否允许为空、是否有默认值,尽量避免使用NULL字段,很难查询优化且占用额外索引空间)

7、用整型来存IP

8、合理的字段名(符合3NF,避免不必要的数据冗余,参考 3NF)

9、创建并使用正确的索引

10、将字段设置为not null 还出于另外一种考虑:mysql表的列中包含null的话,那么该列不会包含在所有中。也就是使用索引是无效的。所有,考虑今后会使用索引的字段,就要设置字段属性是not null。

11、如果你要保存NULL,手动去设置它,而不是把它设为默认值。

12、考虑到这个字段今后会作为查询关键字使用like的形式进行搜索。那么要将该字段定义成索引。这样使用like查询就会更快。

数据库字段的常见类型一般包括:

char varchar text nchar nvarchar datetime samlldatetime int bit decimal numeric float 当然还有一些不常用到的字段类型ntext bignit smallint tinyint real

(1) char、varchar、text和nchar、nvarchar、ntext

char、varchar:长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据(所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充)。

text:存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

nchar、nvarchar、ntext:这三种数据类型和前面的相比,从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

(2) datetime和smalldatetime

datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。

smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。

(3) bigint、int、smallint、tinyint和bit

bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。

int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据,整型的每一种都有无符号(unsigned)和有符号(signed)两种类型。

例如:user_id int unsigned…

当中的unsigned表示,数据项user_id恒为正整数还可以为整数0,0不属于正整数。

smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。

tinyint:从0到255的整数数据。

bit:1或0的整数数据。

(4) decimal和numeric

这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。

(5) float和real

float:从-1.79^308到1.79^308之间的浮点数字数据。

real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real的同义词为float(24)。

我举个小例子给你简单解释一下。

例:

CREATE TABLE TABLE_1

(

ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,

// ID列为无符号整型,该列值不可以为空,并不可以重复,而且自增。

NAME VARCHAR(5) NOT NULL

)

AUTO_INCREMENT = 100(ID列从100开始自增)

PRIMAPY是主键的意思,表示定义的该列值在表中是唯一的意思,不可以有重复。

UNSIGNED是无符号的意思,代表该字段没有正负。

AUTO_INCREMENT可以理解为自动递增的意思,每增加一条记录,值会自动加1。(例如在上面的例子中,ID列每增加一条记录,便会从100自增) 。

我想通过上面的例子,你应该可以理解一些了,不明白再问我。谢谢。


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

原文地址: https://outofmemory.cn/sjk/6768652.html

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

发表评论

登录后才能评论

评论列表(0条)

保存