MySQL约束和数据类型

news2024/11/24 19:00:42

目录

约束条件

MySQL数据类型

1、数值类型

2、字符串类型

3、日期时间类型

源码等资料获取方法


约束条件

约束条件就是在给字段加一些约束,使该字段存储的值更加符合我们的预期。

常用约束条件如下:

  • UNSIGNED :无符号,值从0开始,无负数
  • ZEROFILL:零填充,当数据的显示长度不够的时候,在数据前使用0填充至指定长度,字段会自动添加UNSIGNED
  • NOT NULL:非空约束,表示该字段的值不能为空
  • DEFAULT:表示如果插入数据时没有给该字段赋值,那么就使用默认值
  • PRIMARY KEY:主键约束,表示唯一标识,不能为空,且一个表只能有一个主键。一般都是用来约束id
  • AUTO_INCREMENT:自增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
  • UNIQUE KEY:唯一值,表示该字段下的值不能重复,null除外。比如身份证号是一人一号的,一般都会用这个进行约束
  • FOREIGN KEY:外键约束,某个表的字段是另一个表的主键,我们称这个字段为另一个表的外键。目的是为了保证数据的完成性和唯一性,以及实现一对一或一对多关系

MySQL数据类型

MySQL支持多种类型的SQL数据类型:数值,日期和时间类型,字符串(字符和字节)类型,空间类型和 JSON数据类型等
数据类型描述使用以下约定:

  • M表示整数类型的最大显示宽度。M表示整数类型的最大显示宽度。对于浮点和定点类型, M是可以存储的总位数(精度)。对于字符串类型, M是最大长度。允许的最大值M取决于数据类型。
  • D适用于浮点和定点类型,并指示小数点后面的位数。最大可能值为30,但不应大于 M-2。
  • [ ]表示类型定义的可选部分。

在MySQL中常用数据类型主要分为以下几类

  1.  数值类型
  2. 字符串类型
  3. 日期时间类型

1、数值类型

数值类型包括整数型、浮点型、定点型

1.1 整数型

类型大小范围(有符号)范围(无符号)用途
TINYINT1 字节(-128,127)(0,255)小整数值
SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值

有符号表示数值可以为负数,无符号表示数值为非负数,如果不手动指定UNSIGNED,那么默认就是有符号的。

创建一个表

CREATE TABLE int_db(
a TINYINT,
b SMALLINT,
c MIDDLEINT,
d INT,
e BIGINT
);

查看表结构

我们来看看type这一列,可以看到,每个字段类型后面都有一个括号,括号里面的有个数值,这个数值实际上就是字段的显示宽度,也就是M的值,M表示整数类型的最大显示宽度。最大显示宽度为255.显示宽度与类型可包含的值范围无关

我们在创建表的时候并没有指定字段类型的显示宽度,那么,默认的显示宽度则是该字段类型最大的显示宽度

例如字段a的显示宽度为4,是因为TINYINT有符号值的范围是-128到127,
-128的长度为4(负号、1、2、8共四位),所以默认的显示宽度最大为4,其他的以此类推

下面我们再新建一个表,将字段a的修改为无符号类型

CREATE TABLE int_db(
a TINYINT UNSIGNED, 
b SMALLINT,
c MIDDLEINT,
d INT,
e BIGINT
);

再看看a字段的默认显示宽度 

 可以看到,默认显宽度就变成3了,因为无符号的TINYINT的值范围为0-255,没有负号,所以最多是3位。

ZEROFILL 

使用该约束后当数据的长度比我们指定的显示宽度小的时候会使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED

新建个表试一下

CREATE TABLE int_db2(
a TINYINT(8) ZEROFILL,
b TINYINT(5) UNSIGNED
);

插入一条记录

INSERT int_db2() VALUES(12,12);

 可以看到,12变成了00000012,自动在前面补了0,这是因为指定的显示宽度是8,但是12只有两位,所以在前面补0,使长度为8。这就是ZEROFILL的效果

 1.2 浮点型 

类型大小范围(有符号)范围(无符号)用途
FLOAT4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度
浮点数值
DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度
浮点数值

创建表

CREATE TABLE float_db(
a FLOAT(3,2),
b DOUBLE(5,3)
);

指定a字段为FLOAT类型,字段总长度为3,小数点后长度为2,b字段为DOUBLE类型,字段总长度为5,小数点后长度为3

插入数据

INSERT float_db VALUES(1.1111,2.2222);

可以看到,我们给a字段的值是1.1111,但是只存进去了1.11 ,给b字段的值是2.2222,但是只存进去了2.222

也就是说 FLOAR 和 DOUBLE 类型存储的小数位数与类型关系不打。

在这里我建议,干脆忘记mysql有double这个数据类型。

2、字符串类型

常用的字符串类型有如下

  • CHAR[(M)] 一个固定长度的字符串,在存储时始终用空格填充指定长度。 M表示以字符为单位的列长度。M的范围为0到255.如果M省略,则长度为1,存储时占用M个字节
  • VARCHAR(M)可变长度的字符串,M 表示字符的最大列长度,M的范围是0到65,535,存储时占用L+1(L<=M,L为实际字符的长度)个字节
  • TINYTEXT[(M)] 不能有默认值,占用L+1个字节,L<2^8
  • TEXT[(M)] 不能有默认值,占用L+2个字节,L<2^16
  • MEDIUMTEXT[(M)] 不能有默认值,占用L+3个字节,L<2^24
  • LONGTEXT[(M)] 不能有默认值,占用L+4个字节,L<2^32
  • ENUM('value1','value2',...) 枚举类型。ENUM是一个字符串对象,其值从允许值列表中选择,它只能有一个值,从值列表中选择,最多可包含65,535个不同的元素

2.1 CHAR和VARCHAR

 创建表

CREATE TABLE str_db(
a CHAR(4),
b VARCHAR(4));

插入数据

INSERT str_db() VALUES("","");
INSERT str_db() VALUES("ab","ab");
INSERT str_db() VALUES("abcd","abcd");
INSERT str_db() VALUES("abcdefg","abcdefg"); #在严格模式下,该条数据会插入失败,非严格模式则会对数据进行截取

我们看到查询的结果是一样的,但实际上他们存储时占用的长度是不一样的。 
CHAR类型不管存储的值的长度是多少,都会占用M个字节,而VARCHAR则占用实际长度+1个字节。

但是CHAR的查询效果要高于VARCHAR,所以说,如果字段的长度能够确定的话,比如手机号,身份证号之类的字段,可以用CHAR类型,像地址,邮箱之类的就用VARCHAR

2.2 TEXT系列

TEXT系列的存储范围比VARCHAR要大,当VARCHAR不满足时可以用TEXT系列中的类型。需要注意的是TEXT系列类型的字段不能有默认值,在检索的时候不存在大小写转换,没有CHAR和VARCHAR的效率高

 

 2.3 ENUM 枚举类型

创建表

CREATE TABLE enum_db(gender ENUM("男","女"));

插入数据

INSERT enum_db() VALUES("男");
INSERT enum_db() VALUES(1); #也可以使用编号插入值,等同于"男",序号从1开始
INSERT enum_db() VALUES("女");
INSERT enum_db() VALUES(2);    #等同于"女"

下面我们插入一条不是枚举集合中的数据试一下

3、日期时间类型

  • TIME 范围是’-838:59:59.000000’ 到’838:59:59.000000’
  • DATE 支持的范围是 ‘1000-01-01’到 ‘9999-12-31’
  • DATETIME 日期和时间组合。支持的范围是 ‘1000-01-01 00:00:00.000000’到 ‘9999-12-31 23:59:59.999999’。
  • TIMESTAMP 时间戳。范围是’1970-01-01 00:00:01.000000’UTC到’2038-01-19 03:14:07.999999’UTC。
  • YEAR 范围是 1901到2155

MySQL中的常用数据类型大概就这些。我们在数据类型的选择上,数据类型能满足使用就行的,越小越好,比如人的年龄,任何整数类型都可以,但是我们一般使用TINYINT类型。

源码等资料获取方法

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/776167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构与算法】哈夫曼编码(最优二叉树)实现

哈夫曼编码 等长编码&#xff1a;占的位置一样 变长编码&#xff08;不等长编码&#xff09;&#xff1a;经常使用的编码比较短&#xff0c;不常用的比较短 最优&#xff1a;总长度最短 最优的要求&#xff1a;占用空间尽可能短&#xff0c;不占用多余空间&#xff0c;且不…

【MySQL】DML数据操纵语言(非常适合MySQL初学者学习)

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;重…

清华大学携手蚂蚁集团,攻坚可信AI、安全通用大模型等关键技术

2023年4月7日&#xff0c;清华大学与蚂蚁集团签署合作协议&#xff0c;双方将在“下一代互联网应用安全技术”方向展开合作&#xff0c;聚焦智能风控、反欺诈等核心安全场景&#xff0c;携手攻坚可信AI、安全大模型等关键技术&#xff0c;并加速技术落地应用&#xff0c;以解决…

NodeJS内置模块 npm包管理工具 nvm版本管理工具 nrm镜像管理工具

Nodejs 下载 下载地址 node 是什么 node.js 是一个开源的&#xff0c;跨平台的 JavaScript 运行环境 运行 js 文件 node 文件.jsnodemon 监听文件变化 npm i nodemon -gnodemon 文件名全局变量 global globalThis node 中顶级对象为 global &#xff0c;也可以使用 glo…

postgreSQL数据库的安装

文章目录 一、Linux 下安装 postgreSQL 数据库1.1、准备环境1.2、关闭防火墙跟SELinux1.2.1、关闭防火墙 firewalld1.2.2、关闭SELinux 1.3、挂载本地镜像1.4、软件包的下载postgreSQL 一、Linux 下安装 postgreSQL 数据库 1.1、准备环境 操作系统IP应用Red Hat 8192.168.192…

类加载的过程(简单介绍)

目录 一、类加载过程一览 加载&#xff1a; 验证&#xff1a; 准备&#xff1a; 解析&#xff1a; 初始化&#xff1a; 二&#xff1a;类加载器分类 启动类加载器&#xff08;bootstrap class loader&#xff09; 扩展类加载器&#xff08;extensions class loader&…

Nginx外网访问内网如何实现

1、背景 项目要求&#xff1a;将甲方内网的项目能够对外访问&#xff0c;甲方提供一个中间过渡服务器&#xff0c;中间过渡服务器与外网互通&#xff0c;且中间服务器可以访问内网&#xff1b; 外网客户端->中间过渡服务器开放端口&#xff1a;80 中间过渡服务器->内网服…

Cadence Allegro PCB设计88问解析(三十一) 之 Allegro 中 打印(Plot)设置

一个学习信号完整性仿真的layout工程师 在PCB进行投板时&#xff0c;往往会打印一下装备层(Assembly)&#xff0c;给贴片&#xff0c;用于核对器件的信息等。下面简单介绍Allegro中打印(Plot)设置。 1. 在Allegro的菜单下选择File命令&#xff0c;点击Plot Setup&#xff0c;会…

无线振弦采集仪应用于岩土工程安全监测的解决方案

无线振弦采集仪应用于岩土工程安全监测的解决方案 随着现代岩土工程的发展&#xff0c;工程规模越来越大&#xff0c;地质灾害频发&#xff0c;安全监测成为岩土工程的重要组成部分。传统的安全监测方法存在一些局限性&#xff0c;如无法实时监测&#xff0c;监测精度不高等问…

途乐证券-沪指震荡跌0.25%,半导体等板块走弱,地产等板块拉升

19日早盘&#xff0c;沪指窄幅震动下探&#xff0c;深成指、创业板指均走低&#xff1b;两市半日成交约4300亿元&#xff0c;北向资金净卖出超40亿元。 截至午间收盘&#xff0c;沪指跌0.25%报3189.81点&#xff0c;深成指跌0.51%&#xff0c;创业板指跌1%&#xff1b;两市合计…

《2023购物中心运营数字化白皮书》正式发布!|爱分析报告

在国家政策鼓励线下实体经济发展、鼓励消费的大背景下&#xff0c;购物中心的发展潜力巨大。但另一方面&#xff0c;随着行业进入存量时代&#xff0c;竞争愈发激烈&#xff0c;品牌扩张乏力&#xff0c;购物中心招商压力增大。以数字化手段加持的精细化运营&#xff0c;成为购…

侦听器watch

在代码逻辑中监听某个数据的变化&#xff0c;这个时候就需要用侦听器 watch 来完成了&#xff1b; 1.data的watch <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&q…

备战秋招 | 笔试强训6

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、十进制变量i的值为100&#xff0c;那么八进制的变量i的值为&#xff08;&#xff09; A. 146 B. 148 C. 144 D. 142 2、执行下面语句后的输出为 int I1; if(I<0)printf("****\n") …

Java框架 Mybatis入门

0目录 Java框架Mybatis 1..框架介绍 2.Mybatis实战 1.框架介绍 补充MVC思想 为什么使用框架&#xff1f; 效率高&#xff0c;成本低 框架是别人写好的&#xff0c;可以直接调用 框架是基于MVC的思想 框架包中含有MVC思想的所有组成模块&#xff1a;控制层&#xff1b;模型…

zabbix 企业级监控(1) 监控自己

重点一 Zabbix简介在企业网络运维过程中&#xff0c;管理员必须随时关注各服务器和网络的运行状况&#xff0c;以便及时发现问题&#xff0c;尽可能减少故障的发生。当网络中的设备&#xff0c;服务器等数量较多时&#xff0c;为了更加方便&#xff0c;快捷的获得监控信息&…

欧姆龙CP系列PLC以太网通讯欧姆龙cp1e怎么用以太网通讯

大家好&#xff0c;今天要和大家分享的是一款在工控领域中非常实用的产品——捷米特JM-ETH-CP转以太网模块。这款模块采用了即插即用的设计&#xff0c;不仅不会占用PLC的通讯口&#xff0c;而且可以通过复用接口让触摸屏与PLC进行通讯。这个设计真的非常巧妙&#xff0c;相信会…

7-Spring cloud之路由网关zuul

7-Spring cloud之路由网关zuul 1. 前言2. 关于zuul2.1 zuul基本原理2.2 为什么要使用zuul 3. 搭建zuul3.1 项目结构3.2 基本配置3.2.1 pom文件3.2.2 yml文件3.3.3 启动类 3.3 测试看效果3.3.1 演示3.3.1 架构图 4. zuul路由访问映射规则4.1 映射服务提供者的服务名4.2 访问加前…

概率论的学习和整理--番外13:一个经典dubo模型的概率计算等

目录 1 经典模型知识科普 1.1 知识来源 1.2 下面是摘取的部分规则 2 这个经典dubo的概率和期望 2.1 网上计算的概率&#xff0c;期望全是负&#xff0c;赌徒悲剧 2.2 为什么会这样呢 3 假设把下注庄家不抽水&#xff0c;获得100%收益而不是95&#xff0c;多少次后可以赢…

桥梁监测需要哪些设备?

随着我国经济的发展&#xff0c;我国桥梁建设也迈上了新的台阶。截至2022年底&#xff0c;我国的公路桥梁总数达到了103.32万座。然而&#xff0c;随着在役桥梁使用时间的增长&#xff0c;承载能力受到荷载、环境以及结构退化等因素的影响&#xff0c;桥梁安全问题日益凸显。桥…

生成式AI管理规则落地 大模型后时代到来

国家网信办等七部门联合颁布的《生成式人工智能服务管理暂行办法》&#xff0c;给中国生成式AI产业树立了发展规范。 这份监管文件的用意并不止于管控&#xff0c;还用大量的笔墨传递出推动产业发展的原则&#xff0c;尤其强调“鼓励生成式人工智能技术在各行业、各领域的创新…