iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL:数据类型和表的约束
  • 122
分享到

MySQL:数据类型和表的约束

mysql数据库 2023-08-16 22:08:33 122人浏览 泡泡鱼
摘要

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

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

您可能感兴趣的文档:

--结束END--

本文标题: MySQL:数据类型和表的约束

本文链接: https://www.lsjlt.com/news/372198.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • MySQL:数据类型和表的约束
    1. 数据类型 学习语言的时候首先就是学习数据类型,数据类型起着为变量合理分配空间的作用。数据库同样需要合理使用空间,其次还可以约束SQL语句的正确性,所以同样需要数据类型。 1.0. 数据类型分类 分类数据类型解释数值类型BIT (...
    99+
    2023-08-16
    mysql 数据库
  • MySQL数据库约束类型有哪些
    这篇文章主要介绍了MySQL数据库约束类型有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL数据库约束类型有哪些文章都会有所收获,下面我们一起来看看吧。数据库中的约束,顾名思义即是对插入数据库中的数...
    99+
    2023-06-27
  • MySQL的约束类型、数据库操作、数据表操作大全(简述)
    目录 一.数据库的操作语法 二.MySQL数据库约束 三.数据类型 四.数据表操作 作者简介: tq02,一个想成为编程高手的梦中人作者主页: tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主学习专栏:  &...
    99+
    2023-09-14
    数据库 mysql 笔记 sql
  • MySQL数据库约束,表的设计
    ❤️Author: 老九 ☕️个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏:MySQL通关系列 文章目录 数据库约束no...
    99+
    2023-09-17
    数据库 mysql database
  • 【MySQL】表的约束
    文章目录 1. 约束概念2. 空属性3. 默认值5. comment——列描述6. zerofill7. 主键8. 复合主键9. 自增长10. 唯一键关于唯一键的理解 11. 外键外键的理...
    99+
    2023-10-25
    mysql 数据库
  • MySQL数据库表中的约束详解
    目录mysql表中的约束(constraint)约束分类非空约束唯一性约束复合约束主键约束自增列-AUTO_INCREMENT外键约束FOREIGN KEY约束CHECK约束DEFAULT约束MySQL表中的约束(con...
    99+
    2023-03-02
    MySQL表中的约束 MySQL数据库约束 MySQL约束的使用
  • 【mysql】—— 表的约束
    目录 序言 (一)空属性 (二)默认值 (三)列描述 (四)zerofill (五)主键 (六)自增长 (七)唯一键 (八)外键 总结 序言 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法...
    99+
    2023-08-31
    mysql 数据库
  • MySQL约束类型的示例分析
    这篇文章主要介绍MySQL约束类型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!约束 约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:NOT ...
    99+
    2024-04-02
  • MySQL数据库的约束
    文章目录 一、约束是什么?二、约束的具体操作Not NULLUNIQUE约束的组合使用PRIMARY KEYDEFAULTFOREIGN KEY 一、约束是什么? 约束就是,在创建表的时候,对表设置一些规则,只有满足这些规...
    99+
    2023-08-30
    数据库 mysql sql
  • 【MySQL】数据库的约束
    MySQL 数据库的约束 文章目录 MySQL 数据库的约束01 数据库的约束1.1 约束类型1.1.1 NOT NULL1.1.2 UNIQUE1.1.3 DEFAULT1.1.4 PRIM...
    99+
    2023-09-12
    数据库 mysql adb
  • 从 MySQL 数据库获取约束列表?
    要从 MySQL 数据库获取约束列表,请使用以下语法 -select *from information_schema.table_constraints where constraint_schema = 'y...
    99+
    2023-10-22
  • MySQL数据库表中的约束有哪些
    这篇文章主要讲解了“MySQL数据库表中的约束有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库表中的约束有哪些”吧!MySQL表中的约束(constraint)为了保证数...
    99+
    2023-07-05
  • 【MySQL数据库】一约束
    🍁博客主页:👉@不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉MySQL数据库专栏 ✨欢迎加...
    99+
    2023-09-28
    数据库 mysql java
  • MySQL中常见的约束类型是什么
    这篇文章给大家分享的是有关MySQL中常见的约束类型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 约束的字面意思就是规定或者限制某个事该如何去...
    99+
    2024-04-02
  • MySQL 数据库的约束及数据表的设计原理
    目录1. 数据库的约束1.1 介绍1.2 约束类型1.3 not null1.4 unique1.5 default1.6 primary key1.7 foreign key1.8...
    99+
    2024-04-02
  • MySQL数据库怎么给表设置约束
    今天小编给大家分享一下MySQL数据库怎么给表设置约束的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、PK(主键约束)1、...
    99+
    2023-06-29
  • oracle的约束类型有哪些
    在Oracle数据库中,常见的约束类型包括: 主键约束(Primary Key Constraint):用于唯一标识表中的每一行...
    99+
    2024-03-04
    oracle
  • MySQL中常见的六个约束类型详解
    目录前言1. not null2. unique3. default4. primary key自增主键auto_increment5. foreign key6. check总结前...
    99+
    2024-04-02
  • MySQL中该如何约束及修改数据表
    本文主要给大家简单讲讲MySQL中该如何约束及修改数据表,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL中该如何约束及修改数据表这篇文章可以给大家带...
    99+
    2022-11-30
    mysql 数据表
  • 『 MySQL篇 』:MySQL表的相关约束
    基础篇 MySQL系列专栏(持续更新中 …)1『 MySQL篇 』:库操作、数据类型2『 MySQL篇 』:MySQL表的CURD操作3『 MySQL篇 』:MySQL表的相关约束 文章目录 1 . 非空约束 (`not nu...
    99+
    2023-08-16
    mysql 数据库 sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作