MySQL 数据(字段)类型

在创建表的时候,要明确定义字段对应的数据类型。MySQL 主要的数据类型分为数值类型、字符串(文本)类型、时间日期类型和其他类型几类。

数值类型

数值类型说明:

补充说明

在 int(integer) 系列中,只能存储整型值,且可以在后面用括号指定显示的尺寸(M),如果不指定则会默认分配。如果实际值的显示宽度大于设定值,将会显示实际值而不会截断以适应显示尺寸。如 smallint(3) 中的 3 即为显示尺寸,即显示三位的数值(不包括 - 号)

int 类型可以指定 UNSIGNED 属性,即无符号(非负),所以存储范围有两种

在 float、double 及 decimal 类型中,不能指定 UNSIGNED 属性,其显示尺寸包含了小数点精度(D),即 float(3,1) 保存范围为 -99.9 至 99.9

decimal 必须指定显示尺寸(M)和小数点精度(D),float 和 double 都是可选的

在可能涵盖取值范围的基础上,尽可能选择较小的类型以提高效率和节约存储空间,如年龄,就选择 tinyint(3) 。该原则对于字符类型同样适用

字符串(文本)类型

字符串(文本)类型说明:

补充说明

char 和 varcha 需要指定长度,不同的是,char 存储时总是按照指定的长度储存,而 varchar 则根据实际字符串长度再加上一个字节分配空间。

时间日期类型

时间日期类型说明:

提示

在 PHP 中,一般情况下对于时间都是按照 UNIX 时间戳以 int 类型存储于表中,再根据实际需要用 PHP 的时间函数进行处理,但不完全都是这样。

MySQL 表字段属性

主键

表的主键(primary key,主关键字)是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录。一个表不能有多个主关键字,并且主关键字的列不能包含空值和重复值。主关键字是可选的,并且可在 CREATE TABLE 或 ALTER TABLE 语句中定义。

语法:

PRIMARY KEY (column_name)

在这个表中,uid 这个字段就是该表的主键。

建立主键应该遵循的一般原则

主键应当是对用户没有意义的

永远也不要更新主键,如果主键需要更新,则说明主键应对用户无意义的原则被违反了

主键不应包含动态变化的数据,如时间戳、创建时间等

主键应当由系统自动生成

外键

在两个表的关系中,当一张表(如表A )的主关键字被包含在另一张表(如表B)中时,A 表中的主关键字便成为 B 表的外键(外关键字)。B 表称为主表,A 表称为从表。

外键主要用于保持数据一致性,完整性,避免冗余数据,使两张或多张表形成关联。

在这个文章评论表 comment 样例中,uid 便是外键,它是 user 表的主键。在该表中记录了用户对文章的评论,关于用户信息,只需对应 user 表的主键 uid 即可。在数据一致性方面,比如当 comment 表没有 uid 为 3 的评论后,才可以删除 user 表中 uid = 3 的记录。

自动递增

在 MySQL 数据库中,提供了字段的自动递增(AUTO_INCREMENT)属性,即将该字段设置为 int 类的数据类型,每向数据表添加一条记录,该字段的值会自动加1 。设置了自动递增后,该列不用再设置默认值和唯一性约束。

例子:

?

非空

因为逻辑上的一些要求,有时候需要把字段属性设置为非空(NOT NULL),如记录用户名、密码等非空值的字段。

设置为非空的列,虽然不是必须,但最好设定一个默认值,以防止意外的错误和减少增加数据时的 SQL 语句复杂度。当向数据表增加数据记录时,如果设置为非空的字段不写入数据,系统将会以默认值写入。

例子:

?

提示

在上面的例子中 CHANGE 后面 username username ,前者表示更改的字段名,后者表示新字段名。在本例中,只更改了字段属性为 NULL ,不涉及到字段名称的更改,因此二者一致。

与非空相反,可以将字段属性设置为空,如果字段属性没有设置为非空(NOT NULL)属性,那么系统默认就是可以为空(NULL)值的。

将NULL 改为 NOT NULL:

?

唯一性约束

有时候某些字段数据不允许重复,如用户名,这时候就需要增加唯一性约束(UNIQUE)。

语法:

?

主键(PRIMARY KEY)会强制性的拥有自动定义的唯一性约束,不用额外定义 UNIQUE 。

索引

数据库索引(index)是为了增加查询速度而对字段附加的一种标识。我们对表的某些可能需要经常查询的字段建立适当的索引,那么在查询该字段数据时,便会显著的加快查询速度。

语法:

KEY key_name (column_name)

KEY 后面的字符为索引名称,括号内为建立索引的字段名。

改进后的建表 SQL

?

补充说明

在建表语句正文后面还附加了建表的其它几个属性:

ENGINE:表示存储引擎类型,分为 MyISAM 和 InnoDB 两种类型。MyISAM 不支持事务处理等高级处理,强调表的性能,执行也比 InnoDB 快。而 InnoDB 提供事务支持已经外部键等高级数据库功能,性能上比 MyISAM 差。默认为 MyISAM 类型

CHARSET:表示数据表表字符集,一般为 gbk 或 utf8 以及 big5 等,为了兼容性考虑,我们设置为 utf8 字符集

AUTO_INCREMENT:设置主键默认增长的开始数

mysql数据库约束无符号,MySQL所支持的数据类型与表字段约束类型的学习教程相关推荐

  1. 微信小程序订票选座PHP后台网站MySQL数据库和无前端小程序版本两个程序

    微信小程序订票选座PHP后台网站MySQL数据库和无前端小程 下载点此去 两个相同功能 差别在一个有前端微信小程序 一个没有 (1)登录功能:注册普通账号登录:也可以直接使用微信登录:登录后可以修改用 ...

  2. mysql 设置 0、1 用什么数据类型_MySQL数据库教程-数据表字段约束

    MySQL数据库教程-数据表字段约束 为保证数据库中存储数据的规范化,一般需要在定义字段时进行字段规范与约束的定义.保证在进行数据录入时,数据库能够通过这个规则.约束.规范检查所录入的数据,防止错误及 ...

  3. mysql有符号和无符号,MySQL中的“无符号”是什么意思以及何时使用它?

    MySQL中的"无符号"是一种数据类型.每当我们在任何列中写入无符号表示您不能插入负数时.假设对于很大的数字,您可以使用无符号类型. 无符号整数的最大范围是4294967295.N ...

  4. Mysql数据库(五)——mysql事务及引擎

    Mysql数据库(五)--mysql事务及引擎 一.事务 1.事务的概念 2.事务的ACID特点 ①.原子性(Atomicity) ②.一致性(Consistency) ③.隔离性(Isolation ...

  5. Mysql数据库(一)——mysql数据库初体验

    Mysql数据库(一)--mysql数据库初体验 一.数据库的概念 1.数据库的组成 ①.表 ②.数据库 2.数据库类型 ①.关系型数据库 ②.非关系型数据库(NoSQL (Not Only SQL) ...

  6. Mysql数据库(九)——mysql高阶语句(下)

    Mysql数据库(九)--mysql高阶语句(下) 一.函数 1.数学函数 2.聚合函数 3.字符串函数 4.日期时间函数 二.存储过程 1.简介 2.优点 3.语法 ①.例 ②.参数分类 ③.带参数 ...

  7. Mysql数据库(八)——mysql高阶语句(中)

    Mysql数据库(八)--mysql高阶语句(中) 一.正则表达式(同shell脚本的正则表达式) 1.以"."代替任意一个字符 2.匹配前面字符多次 3.匹配前面字符至少一次 4 ...

  8. Mysql数据库(七)——mysql高阶语句(上)

    Mysql数据库(七)--mysql高阶语句(上) 一.按关键字排序 1.单字段排序 2.多字段排序 二.或/且的运用 三.查询不重复记录 四.对结果进行分组 五.限制结果条目 六.设置别名 使用场景 ...

  9. Mysql数据库(四)——mysql索引相关知识

    Mysql数据库(四)--mysql索引相关知识 一.索引的概念 二.索引的优缺点 1.优点 2.缺点 三.创建索引的原则 四.索引的分类和创建方法 1.普通索引 ①.直接创建索引 ②.修改表方式创建 ...

最新文章

  1. 前端Js框架 UI框架汇总 特性 适用范围 选择
  2. 清理svn信息_推荐候选人有奖啦~11.26最新招聘信息看这里!
  3. python open encoding为无效的参数_TypeError:“encoding”是无效的关键字参数ex23.py
  4. SAP CRM IBASE保存出错,可能有哪些原因
  5. @Java | Thread synchronized - [ 线程同步锁 基本使用]
  6. 将 Sublime 打造成一个 Swift 编辑器
  7. Ubuntu 16.04配置CUDA 9.0+cudnn 7.0以及解决Nvidia显卡导致黑屏问题
  8. 一文读懂质量保证和质量控制
  9. Android 开发即时聊天工具 YQ 《更新》(源码下载)
  10. JDK8中Lambda 表达式语法糖脱糖[非原创]
  11. 浅谈JSP的发展历史
  12. 情人节程序员用HTML网页表白【制作属于我们的爱情相册网页】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  13. TreeMap集合怎样依照Value进行排序
  14. 【图像处理】图像分割之(一~四)GraphCut,GrabCut函数使用和源码解读(OpenCV)
  15. 关键字、主关键字、候选关键字
  16. 一、Python-劳务报酬计算器(新手练习)
  17. Git零基础教程①:如何加速开源社区github的打开(2022版)
  18. error MSB8020 问题解决
  19. 易验:APP一键登录,就这么简单
  20. matlab实现聚类分析

热门文章

  1. 常见的正则表达式验证(更新中)
  2. String定义字符串,实际操作
  3. HDU 1372 Knight Moves
  4. 超级usb万能启动盘
  5. python中xlwt的局限,Python xlwt 生成Excel和设置特定单元格不可编辑
  6. homepod怎么设置为中文_设置 HomePod
  7. 中文设置_虾皮shopee平台怎么变成中文呢?怎么设置成中文
  8. oracle_base,Oracle--基础知识--Oracle 数据库目录 ORACLE_BASE ORACLE_HOME
  9. oracle触发器 select into,Oracle触发器中selectinto报错no_data_found异常处理
  10. mysql 结构优化建议_MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)...