MySQL之数据类型(列类型)

SQL中将数据类型分成了三大类: 数值类型, 字符串类型和时间日期类型

MySQL之数据类型(列类型)


数值型

数值型数据: 都是数值;系统将数值型分为整数型和小数型.

整数型又分为以下五种:

tinyint: 迷你整型,使用一个字节存储,有符号时范围在-128~127,无符号情况为0~255

smallint: 小整型,使用2个字节存储,有符号时范围在-32768~32767,无符号情况为0~65535

mediumint: 中整型, 使用3个字节存储,有符号时范围在-8388608~8388607,无符号情况为0~16777215

int: 标准整型, 使用4个字节存储,有符号时范围在-2147483648~2147483647,无符号情况为0~4294967295

bigint: 大整型,使用8个字节存储,一般用不到

数据的显示宽度一般搭配0填充(zerofill)使用,如:23,显示宽度为5,0填充,则为00023;

小数型: 带有小数点或者范围超出整型的数值类型. 将小数型细分成两种: 浮点型和定点型;浮点型: 小数点浮动, 精度有限,而且会丢失精度;定点型: 小数点固定, 精度固定, 不会丢失精度

浮点型数据是一种精度型数据: 因为超出指定范围之后, 会丢失精度(自动四舍五入)

浮点型: 理论分为两种精度:Float: 单精度, 占用4个字节存储数据, 精度范围大概为7位左右;Double: 双精度,占用8个字节存储数据, 精度方位大概为15位左右

创建浮点数表: 浮点的使用方式: 直接float表示没有小数部分; float(M,D): M代表总长度,D代表小数部分长度, 整数部分长度为M-D

时间日期型

MySQL之数据类型(列类型)


字符串类型

mysql中将字符串类型分成了6类: char,varchar,text , blob, enum和set

定长字符串: char, 磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度.

Char(L): L代表length, 可以存储的长度, 单位为字符, 最大长度值可以为255.

变长字符串: varchar, 在分配空间的时候, 按照最大的空间分配: 但是实际上最终用了多少,是根据具体的数据来确定.

Varchar(L): L表示字符长度 理论长度是65536个字符, 但是会多处1到2个字节来确定存储的实际长度: 但是实际上如果长度超过255,mysql默认使用文本字符串text

如何选择定长或者是变长字符串呢?

定长的磁盘空间比较浪费, 但是效率高: 如果数据基本上确定长度都一样, 就是使用定长, 如身份证, 电话号码, 手机号码等

变长的磁盘空间比较节省, 但是效率低: 如果数据不能确定长度(不同数据有变化), 如姓名, 地址等

如果数据量非常大, 通常说超过255个字符就会使用文本字符串

文本字符串根据存储的数据的格式进行分类: text和blob

Text: 存储文字(二进制数据实际上都是存储路径);Blob: 存储二进制数据(通常不用)

枚举: enum, 事先将所有可能出现的结果都设计好, 实际上存储的数据必须是规定好的数据中的一个.

枚举的使用方式

定义: enum(可能出现的元素列表); //如enum(‘男’,’女’,’保密’);

使用: 存储数据,只能存储上面定义好的数据

集合跟枚举很类似: 实际存储的是数值,而不是字符串(集合是多选)

集合使用方式:定义: Set(元素列表);使用: 可以使用元素列表中的元素(多个), 使用逗号分隔

MySQL之数据类型(列类型)

MySQL之数据类型(列类型)

列属性

列属性: 真正约束字段的是数据类型, 但是数据类型的约束很单一. 需要有一些额外的约束, 来更加保证数据的合法性.

列属性有很多: NULL/NOT NULL, default, Primary key, unique key, auto_increment,comment

空属性: NULL(默认的)和NOT NULL(不为空)

实际上在真实开发的时候, 尽可能的要保证所有的数据都不应该为空: 空数据没有意义; 空数据没有办法参与运算.

列描述: comment, 没有实际含义: 是专门用来描述字段,会根据表创建语句保存: 用来给程序猿(数据库管理员)来进行了解的.

默认值: 某一种数据会经常性的出现某个具体的值, 可以在一开始就指定好: 在需要真实数据的时候,用户可以选择性的使用默认值.默认值的生效: 在数据进行插入的时候,不给改字段赋值。想要使用默认值,可以不一定去指定列表,故意不使用字段列表: 可以使用default关键字代替值

主键: primary key,主要的键. 一张表只能有一个字段可以使用对应的键, 用来唯一的约束该字段里面的数据, 不能重复: 这种称之为主键。一张表只能且最多一个主键。

MySQL之数据类型(列类型)

自动增长一般配合主键使用

最后聊一聊关于一对一,一对多(多对一),多对多关系如何建表

将实体与实体的关系, 反应到最终数据库表的设计上来: 将关系分成三种: 一对一, 一对多(多对一)和多对多.所有的关系都是指的表与表之间的关系.

一对一就像人与身份证的关系,一个人只能有一个身份证号,而一个身份证号只能对应一个人。(A 表中的一行最多只能匹配于 B 表中的一行,反之亦然)。一对一关系经常出现在表分割的情况。

一对多就如老板和员工的关系,一个老板会有许多员工,反正这个公司所有员工对应一个老板

多对多就如老师和学生关系,学生会有许多老师,教语文,化学,英语等,而老师也不可能只教一个学生(一对一家教除外)。

下面看具体案例:

一对一

员工表: 姓名,性别,年龄,身高,体重,婚姻状况, 籍贯, 家庭住址,紧急联系人,自我介绍

这种情况可以把表分割,常用信息放在一张表如:姓名、性别、年龄等,而不常用信息放在另一张表如:家庭住址、紧急联系人、自我介绍

一对多

这种关系最常见

MySQL之数据类型(列类型)

MySQL之数据类型(列类型)

多对多

一般情况是要多建一张表,专门维护另外两张表之间的关系,即需要建三张表。

MySQL之数据类型(列类型)

MySQL之数据类型(列类型)

MySQL之数据类型(列类型)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值