我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL:数据类型和表的约束

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL:数据类型和表的约束

1. 数据类型

学习语言的时候首先就是学习数据类型,数据类型起着为变量合理分配空间的作用。数据库同样需要合理使用空间,其次还可以约束SQL语句的正确性,所以同样需要数据类型。

1.0. 数据类型分类

分类数据类型解释
数值类型BIT (M)位类型。M指定位数,默认为1,范围1-64
BOOL使用1或0表示真或假
整型TINYINT [UNSIGNED]相当于C语言中的char类型
SMALLINT [UNDIGNED]相当于C语言中的short类型
INT [UNSIGNED]相当于C语言中的int类型
BIGINT [UNSIGNED]相当于C语言中的long long类型
小数类型FLOAT [ (M, D) ] [UNSIGNED]小数类型,M指定长度,D指定小数位数
DOUBLE [ (M, D) ] [UNSIGNED]对应C的double类型,M长度,D小数位数
DECIMAL (M, D) [UNSIGNED]M长度,D小数位数
文本、二进制类型CHAR (SIZE)定长字符串,最大长度255
VARCHAR (SIZE)变长字符串,最大长度65536
BLOB二进制数据
TEXT大文本,不支持全文索引,不支持默认值
时间日期DATE / DATETIME / TIMESTAMP(yyyy-mm-dd) / (yyyy-mm-dd hh:mm:ss)
String 类型ENUM字符串对象
SET字符串对象

1.1. 数值类型

请添加图片描述

C语言给变量赋值超过其本身承受的大小,会自行截断。但SQL中当我们插入了类型大小范围之外的越界数据,SQL会直接拒绝。数据类型的本质就是一种SQL对我们的约束

tinyint类型

请添加图片描述

  • 在MySQL中,整型可以指定有无符号两种,默认是有符号的。可在类型之后指明unsigned以示无符号。

尽量不使用unsigned,对于有符号类型存不下不如提升至更大容量的类型。

bit类型

bit[(M)] # 位字段类型。M表示每个值的位数,范围1-64。如果不带M默认为1。

请添加图片描述

MySQL5.7默认以ASCII字符显示,MySQL8.0默认以十六进制显示。

小数类型

float[(M, D)] [unsigned] # M指显示长度,D指小数位数,总大小4字节
  • 比如 float(4,2) 表示的范围是:-99.99~99.99,MySQL在保存时会进行四舍五入。

请添加图片描述

  • float(4,2) usigned 表示的范围是:0~99.99,并不会将正数范围扩大2倍。
decimal(m, d) [unsigned] # M指显示长度,D指小数位数

请添加图片描述

如果希望小数精度更高,推荐使用decimal。float表示最大精度为7位,decimal最大为30位。

如果D被省略默认为0,M默认为10。但最好不要省略,可能版本不一致会导致问题。

1.2. 字符串类型

char类型

char(L) # 定长字符串 L是可以存储的字符长度,最大长度为255字符

字符和字节不一样,一个字符一定占一个字节,比如Unicode字符。

varchar类型

varchar(L) # 变长字符串,L表示字符长度,最大为65536字节
  • varchar最大长度是65536字节不是字符,char最大长度是255字符不是字节。

  • varchar和char的(L)值的单位一样,都是字符长度。

  • char 不管存储的数据如何,实际占用始终都是L个字符的大小,varchar 的实际占用和数据大小相关。定长和变长体现在实际存储大小。

可以理解成char类型就是C语言中的字符数据char*,varchar就是C++中的string容器。

  • 如果数据长度一样就用定长char,如果变化就用变长varchar;
  • 定长浪费空间但效率高,变长节省空间但效率低。

日期和时间类型

常用的日期时间类型有三个:

类型含义格式解释
date日期yyyy-mm-dd占用三字节
datetime日期时间yyyy-mm-dd HH:ii:ss表示范围从1000到9999,占用八字节
timestamp时间戳yyyy-mm-dd HH:ii:ss只能表示从1970年开始的时间,占用四字节

请添加图片描述

  • datedatetime的区别就是格式上的区别
  • timestamp自动更新当前操作的时间,不需要手动设置。

设置日期时的输入格式比较宽松,最后都会转成标准格式。

1.3. enum和set类型

# 枚举,单选类型enum ('选项1', '选项2', '选项3', ...);
  • 插入是必须插入规定的选项值,不允许其他值。

请添加图片描述

  • 使用enum枚举类型,实际上在存储的时候使用 的是从1开始的数字字符。

请添加图片描述

规范使用,不推荐使用数字做插入筛选等操作。

# 集合,多选类型set  ('选项1', '选项2', '选项3', ...);
  • enum枚举只能单选,但set集合类型可以多选。同样,set类型只能插入规定好的值。

请添加图片描述

如图所示,set类型由于能够表示多个选项,数字和选项不能单纯按顺序对应。

请添加图片描述

set类型存储时采用的是位图结构。从低到高每个比特位表示一个选项,比特位为1表示具有该选项,反之则没有。

请添加图片描述

  • 单纯用where xx='xx'查询会严格筛选出只具有该选项的记录,若想要筛选出包含该选项的记录可以使用find_in_set

请添加图片描述

 

数据类型本质也就是一种约束,所谓约束可以理解为不满足条件就不允许操作。约束给予了表中的数据极大的确定性。

2. 表的约束

没有规矩不成方圆,MySQL为了让数据库表中的数据完整性一致性非常强,MySQL会给我们提供强约束。

2.1. 空属性

两个值:NULL和NOT NULL。MySQL中的NULL表示不存在、为空,和C语言中的NULL没有任何关系。

数据库字段默认一般都为空,但实际中需要尽量保证字段非空。设置了非空就不能不插入了。

设置not null方式如下:

请添加图片描述

2.2. 默认值

设置default可以避免该字段为空,不填自动设置为默认值。

请添加图片描述

如果一个字段即设置 not null 又设置 default,那么 not null 就失去作用了。

2.3. 列描述

列描述:comment 字段,没有实际意义,用来描述字段,相当于注释的作用。

请添加图片描述

2.4. zerofill

当我们创建一个int类型的字段时,MySQL会自动为我们添加一个(11)。如果我们没有设置zerofill属性,这个值是无意义的。

如果插入的数据低于指定的位数,就在前面补0,如果插入的数据超过了指定的位数,就正常显示,这就是zerofill的作用。只对显示结果调整,不影响存储结果。

请添加图片描述

2.5. 主键

数据库存储数据不是唯一的目的,还要考虑到提取数据。一般,要求数据库表中的记录有一个特定的唯一标识,来表示唯一性

这个唯一的特定标识就是主键,类似于序号学号这样的唯一标识,可以根据主键来唯一地筛选出一条记录。

  • 创建表并指定主键字段,主键字段不可重复。

请添加图片描述

  • 为已存在字段删除主键约束
alter table `tb_name` drop primary key; # 删除主键

只是为字段去掉主键约束,并不是删除整列。

  • 为已存在字段追加主键
alter table `tb_name` add primary key(`field`); # 追加主键

如果字段有重复值,会追加失败。

复合主键

create table `tb_name` (`field` datatype,    primary key (`field`) # 设置复合主键); 

如果想让多个字段合起来作为主键,就可以使用复合主键。也就是让多个字段联合在一起作为唯一标识,单个重复是无所谓的,只要不是多个字段一起冲突就行。

请添加图片描述

2.6. 自增长

auto_increment设置的字段,可以不给值,会自动被系统从当前最大值加1设置到记录。一般自增长的字段都是作为主键。

请添加图片描述

  • 自增长字段不用设置初始值,默认从1开始递增。
  • 自增长字段也可以插入数据,只要不与已有数据重复即可。之后新增数据会从最大值开始递增。
  • 被自增长的字段必须作为主键或者其他具有唯一性的键使用。

2.7. 唯一键

一张表中往往存在多个字段需要唯一,但主键只有一个,只能用唯一键解决这个问题。

请添加图片描述

  • 唯一键和主键性质差不多,但唯一键允许为空,NULL表示没有不参与任何运算。如果将唯一键设置为不能为空则自动转换成主键。
  • 主键是用来保证整个表的记录的唯一性的,唯一键用来保证所设置的字段在业务上的唯一性。主键只能有一个,唯一键能设置多个。

可以说,主键和唯一键并不冲突,他们不是用来对比的,只是负责数据在不同层面的唯一性。

2.8. 外键

外键用来将主表和从表之间建立关系,让从表和主表产生关联的字段就叫做外键。外键定义在从表上,一般外键就对应着主表的主键。

create table `tb_name` (    # ... ,foregin key (`field`) reference `tb_master`(`field`))

请添加图片描述

通过外键产生关系的表,除了在逻辑上有关联,MySQL也会维护该逻辑对用户操作产生约束。

比如班级表中得先有id为30的班级,才能在学生表中添加class_id为30的学生。

要删除班级表中id为20的班级,首先必须保证学生表中没有对应班级的学生。

对于数据库用户来说,外键是为了方便业务关联,对于MySQL来说,外键是为了产生对应的外键约束,保证数据的安全。

请添加图片描述

来源地址:https://blog.csdn.net/yourfriendyo/article/details/126575160

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL:数据类型和表的约束

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL:数据类型和表的约束

1. 数据类型 学习语言的时候首先就是学习数据类型,数据类型起着为变量合理分配空间的作用。数据库同样需要合理使用空间,其次还可以约束SQL语句的正确性,所以同样需要数据类型。 1.0. 数据类型分类 分类数据类型解释数值类型BIT (
2023-08-16

MySQL数据库约束类型有哪些

这篇文章主要介绍了MySQL数据库约束类型有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL数据库约束类型有哪些文章都会有所收获,下面我们一起来看看吧。数据库中的约束,顾名思义即是对插入数据库中的数
2023-06-27

MySQL数据库表约束讲解

目录mysql数据库表约束一、主键约束二、外键约束三、非空约束四、唯一约束五、默认约束六、自增约束数据库建表的约束条件常用约束条件及简单介绍MySQL数据库表约束为了防止往数据表中插入错误的数据,在MySQL中,定义了一些维护数据库完整性
2022-06-20

MySQL数据库表中的约束详解

目录mysql表中的约束(constraint)约束分类非空约束唯一性约束复合约束主键约束自增列-AUTO_INCREMENTlzqXVuAOKT外键约束FOREIGN KEY约束CHECK约束DEFAULT约束MySQL表中的约束(con
2023-03-02

MySQL数据库的约束

文章目录 一、约束是什么?二、约束的具体操作Not NULLUNIQUE约束的组合使用PRIMARY KEYDEFAULTFOREIGN KEY 一、约束是什么? 约束就是,在创建表的时候,对表设置一些规则,只有满足这些规
2023-08-30

MySQL数据库表中的约束有哪些

这篇文章主要讲解了“MySQL数据库表中的约束有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库表中的约束有哪些”吧!MySQL表中的约束(constraint)为了保证数
2023-07-05

从 MySQL 数据库获取约束列表?

要从 MySQL 数据库获取约束列表,请使用以下语法 -select *from information_schema.table_constraints where constraint_schema = yourDatabaseName
2023-10-22

MySQL总结(七)数据库表的约束-详解

数据库表的约束1. 数据库约束的概述1.1 约束的作用:对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。1.2 约束种类:约束名约束关键字特点主键primary key
MySQL总结(七)数据库表的约束-详解
2017-04-03

MySQL数据库之表的约束图文详解

目录一、表的约束二、空属性三、默认值四、列描述五、zerofill六、主键七、自增长八、唯一键九、外键总结一、表的约束前面我们所讲到的数据类型就是一种表的约束。为什么这么说呢?因为数据类型有自己的大小,也就是我们插入的数据是有范围的,不能
MySQL数据库之表的约束图文详解
2024-09-30

MySQL之存储引擎、基本数据类型及约束条件

一、存储引擎数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不
MySQL之存储引擎、基本数据类型及约束条件
2017-05-24

MySQL数据库怎么给表设置约束

今天小编给大家分享一下MySQL数据库怎么给表设置约束的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、PK(主键约束)1、
2023-06-29

MySQL中该如何约束及修改数据表

本文主要给大家简单讲讲MySQL中该如何约束及修改数据表,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL中该如何约束及修改数据表这篇文章可以给大家带来一些实际帮助。约束:按功能划为:
2022-11-30

编程热搜

目录