MySQL:数据类型和表的约束

这篇具有很好参考价值的文章主要介绍了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. 数值类型

MySQL:数据类型和表的约束

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

tinyint类型

MySQL:数据类型和表的约束

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

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

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

MySQL:数据类型和表的约束

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

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

MySQL:数据类型和表的约束

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

MySQL:数据类型和表的约束

如果希望小数精度更高,推荐使用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年开始的时间,占用四字节

MySQL:数据类型和表的约束

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

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

1.3. enum和set类型

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

MySQL:数据类型和表的约束

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

MySQL:数据类型和表的约束

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

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

MySQL:数据类型和表的约束

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

请添加图片描述

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

MySQL:数据类型和表的约束

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

MySQL:数据类型和表的约束

 

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

2. 表的约束

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

2.1. 空属性

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

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

设置not null方式如下:

MySQL:数据类型和表的约束

2.2. 默认值

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

MySQL:数据类型和表的约束

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

2.3. 列描述

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

MySQL:数据类型和表的约束

2.4. zerofill

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

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

MySQL:数据类型和表的约束

2.5. 主键

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

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

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

MySQL:数据类型和表的约束

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

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

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

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

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

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

MySQL:数据类型和表的约束

2.6. 自增长

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

MySQL:数据类型和表的约束

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

2.7. 唯一键

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

MySQL:数据类型和表的约束

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

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

2.8. 外键

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

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

MySQL:数据类型和表的约束

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

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

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

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

MySQL:数据类型和表的约束文章来源地址https://www.toymoban.com/news/detail-450657.html

到了这里,关于MySQL:数据类型和表的约束的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL——修改数据库和表的字符编码

    修改编码: ( 1) 先停止服务 ( 2 )修改 my.ini 文件 ( 3 )重新启动服务说明: 如果是在修改 my.ini 之前建的库和表,那么库和表的编码还是原来的 Latin1 ,要么删了重建,要么使用 alter 语句修改编码。 mysql create database 0728 db charset Latin1; Query OK, 1 row affected ( 0.00 sec) mysql use

    2024年02月09日
    浏览(37)
  • MySQL数据库和表的基本操作

    MySQL是一个客户端服务器结构的程序 主动发送数据的这一方,客户端(client) 被动接受数据的这一方,服务器(server) 客户端给服务器发送的数据叫做: 请求(request) 服务器给客户端发送的数据叫做: 响应(response) 客户端和服务器之间是通过网络进行通信的 服务器是存储数据的主体

    2024年01月19日
    浏览(32)
  • 在MySQL中查看数据库和表的数据大小

    在管理和维护MySQL数据库时,了解数据库和表的数据大小是非常重要的。这可以帮助您监控数据库的增长、优化性能以及规划存储需求。本博客将介绍如何使用SQL查询来查看MySQL数据库和表的数据大小。 首先,我们将学习如何查看整个MySQL数据库的总数据大小,包括所有数据库

    2024年02月09日
    浏览(62)
  • 头歌 MySQL数据库 - 数据库和表的基本操作(一)答案

    第1关:查看表结构与修改表名 编程要求 根据提示,在右侧编辑器补充代码: 把数据表 tb_emp 改名为 jd_emp ; 查看该数据库下数据表的列表; 查看数据表 jd_emp 的 基本结构 。 第2关:修改字段名与字段数据类型 编程要求 根据提示,在右侧编辑器补充代码: 把数据表 tb_emp 的字

    2024年02月01日
    浏览(88)
  • 【MySQL】库和表的操作

    目录 一、库的操作 1.1创建数据库 1.2创建数据库案例 1.3字符集和校验规则 (1)查看系统默认字符集以及校验规则 (2)查看数据库支持的字符集  (3)查看数据库支持的字符集校验规则 (4)校验规则对数据库的影响 1.4操纵数据库 (1)查看数据库 (2)显示创建语句 (3)

    2024年02月15日
    浏览(28)
  • [ MySQL ] — 库和表的操作

    目录 库的操作 创建数据库 语法: 使用: 字符集和校验规则 查看系统默认字符集以及校验规则  查看数据库支持的字符集  查看数据库支持的字符集校验规则 校验规则对数据库的影响 操纵数据库  查看数据库 显示创建语句 修改数据库 删除数据库  备份  恢复 查看连接情

    2024年02月14日
    浏览(22)
  • 【MySQL】库和表的增删查改

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、库的操作 1、创建数据库 2、数据库所使用的编码 2.1查询编码集和校验集 2.2查看数据库的字符集和校验集 2.3创建数

    2024年02月08日
    浏览(38)
  • {MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 承接上文,继续讲一下MySQL 提示:以下是本篇文章正文内容,下面案例可供参考 NOT NULL - 指示某列不能存储 NULL 值。 UNIQUE - 保证某列的每行必须有唯一的值

    2024年02月03日
    浏览(41)
  • MySQL数据类型和约束

    MySQL支持许多的数据类型,包括数值、字符串、日期和时间等类型。数据类型的选择既需要考虑数据的实际情况,也需要考虑存储空间的大小以及计算效率等因素。 数值类型主要分为整数类型和小数类型。MySQL支持的整数类型包括TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT等类型;而

    2024年02月01日
    浏览(35)
  • 3. MySQL - 数据类型 & 选项约束

    目录 回顾 1. 命令行下的 MySql 客户端 2. 图形化界面的 MySQL-Client 3. 数据库概述 3.1 数据库管理系统是什么 3.2 工作模式 3.3 RDBMS 管理数据的结构 3.4 客户端连接服务器的信息 4. MySQL 中的数据类型 4.1 整型类型 4.2 字符串 4.3 日期/时间 5. MySQL 每个字段的选项约束 6. 练习:将我们

    2024年02月15日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包