《MySQL数据库》 数据类型、约束、键的使用—/—<5>

一、常见数据类型

1、数值类型:

INT、BIGINT、FLOAT、DOUBLE,DECIMAL等。

        INT(整型):通常占用4个字节,可以存储范围为-2^31到2^31-1的整数。

        BIGINT(大整型):通常占用8个字节,可以存储范围为-2^63到2^63-1的整数。

        FLOAT和DOUBLE(浮点型):表示带有小数点的数值。FLOAT通常占用4个字节,DOUBLE通常占用8个字节。FLOAT可以存储7位有效数字,DOUBLE可以存储15位有效数字。浮点型数值存储时通常会有一定的精度损失。在银行里常见。

        DECIMAL(精确数值):也表示带有小数点的数值,但是它是以字符串或者数字数组的形式存储的,可以存储非常大的数值,并且不会有精度损失。DECIMAL常用于存储货币金额或者需要高精度计算的场景。

2、字符串类型:

CHAR、VARCHAR、TEXT等。

        CHAR(定长字符串):CHAR类型用于存储定长的字符串。它需要指定固定的长度,占用的存储空间是固定的。如果存储的字符串长度小于指定长度,会用空格进行填充。例如,CHAR(10)表示存储长度为10的字符串。

        VARCHAR(可变长度字符串):VARCHAR类型用于存储可变长度的字符串。它需要指定最大长度,占用的存储空间根据实际存储的字符串长度来动态调整。VARCHAR类型存储的字符串长度可以小于指定的最大长度,不会有额外的空间浪费。例如,VARCHAR(255)表示最大长度为255的字符串。

        TEXT(大文本类型):TEXT类型用于存储较大的文本内容。它可以存储非常长的字符串,不需要指定固定或最大长度。TEXT类型通常用于存储文章、日志等较长的文本数据。

注意:utf8中一个汉字3个字节,gbk中一个汉字2个字节

3、日期和时间类型

DATE、DATETIME、TIMESTAMP等。

        DATE:DATE类型用于存储日期值,包括年、月、日。它通常以YYYY-MM-DD的格式进行存储。

        DATETIME:DATETIME类型用于存储日期和时间值,包括年、月、日、时、分、秒。它通常以YYYY-MM-DD HH:MM:SS的格式进行存储。

        TIMESTAMP:时间戳,TIMESTAMP类型用于存储日期和时间值,包括年、月、日、时、分、秒。它以YYYY-MM-DD HH:MM:SS的格式进行存储,但与DATETIME有一些重要区别。TIMESTAMP在存储时会自动将时间转换为GMT(格林尼治标准时间)来存储,然后在检索时会根据时区进行转换。另外,TIMESTAMP还具有自动更新的功能,可以在每次更新时自动更新为当前时间。在使用TIMESTAMP时,需要根据具体的数据库设置时区和自动更新属性。

类型

大小

范围

格式

用途

( bytes)

DATE

3

1000-01-01/9999-12-31

YYYY-MM-DD

日期值

TIME

3

'-838:59:59'/'838:59:59'

HH:MM:SS

时间值或持续时间

YEAR

1

1901/2155

YYYY

年份值

DATETIME

8

'1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'

YYYY-MM-DD hh:mm:ss

混合日期和时间值

TIMESTAMP

4

'1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC

YYYY-MM-DD hh:mm:ss

混合日期和时间值,时间戳

结束时间是第2147483647秒,北京时间2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

4、二进制类型

BLOB、LONGBLOB、VARBINARY等。

        BLOB:BLOB代表二进制大对象,用于存储大型二进制数据,如图像、音频、视频等。BLOB类型可以存储最大长度为65,535字节的数据。

        LONGBLOB:LONGBLOB是一个较大的BLOB数据类型,可以存储最大长度为4GB的二进制数据。它用于存储更大的二进制对象。

        VARBINARY:VARBINARY是一种可变长度的二进制数据类型,可以存储变长二进制数据,如图像、文件等。它的最大长度取决于具体的数据库系统。

5、枚举类型

ENUM。

        ENUM是一种在编程语言中表示一组具有名称的值的数据类型。这些具有名称的值通常是常量,并且具有特定的顺序,可以用于比较或迭代的目的。

        在ENUM中,每个具有名称的值都被分配一个整数值,称为枚举常量。这些常量可以在代码中使用,表示特定变量或参数的可能选项。

6、集合类型

SET

二、约束

1、主键约束(PRIMARY KEY)

用于唯一标识表中的每一行数据,通常使用整数类型的列。

例如:身份证号,它对于每个人来说是唯一的,不可重复的也是非空的

2、唯一约束(UNIQUE)

保证列中的所有值都是唯一的,可以包含空值。

同样是如身份证一样唯一

3、外键约束(FOREIGN KEY)

用于定义列与其他表的关系,保证引用完整性。

4、非空约束(NOT NULL)

确保列中不包含空值。

5、默认值约束(DEFAULT )

在插入新行时,如果没有指定列的值,则使用默认值。

如下图所示,即默认值为空

6、检查约束(CHECK)

用于确保列中的值满足特定的条件,可以使用各种表达式和运算符来定义

例如可在上述图片中的字段名age后增加一个check age>18,即该列数据都要大于18,否则会报错

实例演示:

CREATE TABLE users (
-- 主键id INT PRIMARY KEY, 
-- 非空name VARCHAR(50) NOT NULL, 
-- 唯一email VARCHAR(100) UNIQUE,
-- 也是非空password VARCHAR(100) NOT NULL,
-- 字段是时间类型,设置了默认值是current-timestamp是时间戳的意思created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
-- 同样是时间戳类型,后面的on update表示如果值发生更新,当前时间戳同样发生更新updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-- 检查,检查age是否大于等于18age INT CHECK(age >= 18),
-- 文本类型address TEXT,
-- 枚举类型,从admin 和user中选择一个,默认是user用户role ENUM('admin', 'user') DEFAULT 'user'
);

运行后即可创建一个新表,然后写入数据,有些没有限制为not null 的可以不写,枚举类型只能选择不可写入,

三、属性的介绍和使用

1、PRIMARY KEY使用

        PRIMARY KEY 是一列或一组列,其值唯一标识表中的每一行。一个表只能有一个PRIMARY KEY。在表创建时,可以指定其中的一列为主键,也可以使用多列来组合作为主键。对于多列组合主键,它们的值的组合必须是唯一的

CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),age INT
);

2、AUTO_INCREMENT使用

        AUTO_INCREMENT是一种MySQL特有的属性,它允许一个整数列自动增长每次插入新行时自动递增。这通常用于为表创建一个唯一的、自动生成的数字标识符。必须将AUTO_INCREMENT属性与INTEGER数据类型一起使用,通常是使用INT或BIGINT数据类型。

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50)
);

        在上面的代码中,每次插入一行时,MySQL将自动为id列生成一个新的唯一值,而不需要手动为该列指定一个值。这使得插入新行时更加方便,同时也确保每个行都有一个唯一的标识符。

实例代码:
CREATE table auto(id int primary key auto_increment,coun int,fil VARCHAR(255) not NULL,county varchar(255)
)

创建一个表,定义id 为主键,并给他一个自增的属性,创建完成后,点击导入向导,对其进行导入数据

使用navicat可视化导入,注意其中导入字段的时候不要选id这个字段,我们设置了四个字段,自增的字段不用选择,如下图所示

导入的txt文件内数据样式为

导入结束后可视化显示为:

其中的字段id所对应的值为自增序列,如果对这个表进行插入数据操作,id对应的值会自定增加,如果手动删除一行数据,后面再增加一行,那么此时的id值是从之前那个值的后面开始递增,此时可以使用截断表来重置自增id,也可以使用查询命令TRUNCATE TABLE table_name;来截断。

3、UNIQUE使用

        假设有一个“学生”数据表,其中包含学生ID、姓名和电子邮件地址。为了确保每个学生的电子邮件地址是唯一的,可以在“电子邮件地址”列上创建UNIQUE约束。

CREATE TABLE students (student_id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE
);

        在上面的代码中,我们创建了一个名为“students”的数据表,并在“email”列上创建了一个UNIQUE约束。这将确保每个学生的电子邮件地址是唯一的。

4、FOREIGN KEY使用

        假设有一个“订单”数据表和一个“产品”数据表,其中“订单”表包含订单ID、订单日期和产品ID,而“产品”表包含产品ID、产品名称和产品价格。为了确保订单中的每个产品ID都是有效的,可以在“订单”表中为“产品ID”列创建FOREIGN KEY约束,该约束参照“产品”表中的“产品ID”列。

CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(50) NOT NULL,price DECIMAL(8, 2) NOT NULL
);
CREATE TABLE orders (order_id INT PRIMARY KEY,order_date DATE NOT NULL,product_id INT,FOREIGN KEY (product_id) REFERENCES products(product_id)
);

        在上面的代码中,我们创建了一个名为“products”的数据表和一个名为“orders”的数据表,并在“orders”表中为“product_id”列创建了一个FOREIGN KEY约束。这将确保订单中的每个产品ID都是有效的,并且参照了“products”表中的产品ID列。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OCCT】第3讲 OpenCasCadeVTK实现三维建模Demo

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享OpenCasCade&VTK共同实现三维建模Demo,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1.…

AI2021矢量图形软件:Illustrator 2021 Win/Mac 直装版

dobe Illustrator 2021是一款功能强大的矢量图形设计软件,广泛应用于出版、多媒体和在线图像制作领域。该软件特别适用于印刷出版、海报书籍排版、专业插画、多媒体图像处理以及网页设计,能够提供高精度和控制的线稿,适合处理从简单到复杂各种…

SpringBoot 自动装配原理

零、前言 Spring简直是java企业级应用开发人员的春天,我们可以通过Spring提供的ioc容器,避免硬编码带来的程序过度耦合。但是,启动一个Spring应用程序也绝非易事,他需要大量且繁琐的xml配置,开发人员压根不能全身心的…

怎么查询大数据信用评分?

相信在了解大数据信用评分的时候,不少人都因为大数据信用评分在申贷的时候遭受到过挫折,因为大数据信用已经被很多银行和金融机构作为风险控制的重要依据使用,其中的大数据信用评分,能直观的感知到用户的信用情况。那如何查询大数…

AI智能助手商业系统软件源码(IMYAI智能助手) AI换脸/智能体GPTs应用/AI视频生成/AI绘画/文档分析/GPT-4o模型支持

人工智能技术的发展日新月异,从深度学习到自然语言处理,再到计算机视觉等领域,不断推动着各行各业的变革。在应用层面,人工智能已深入到内容创作领域,为创作者提供了前所未有的便利和可能性。这些技术的发展潜力巨大&a…

C++ 80行 极简扫雷

一共5346个字符&#xff0c;MinGW编译通过&#xff08;强烈不建议写这种代码&#xff01;&#xff01;&#xff01;&#xff09; 压行规则&#xff1a;一行不超过80个字符 代码&#xff1a; #include<windows.h> #include<stdio.h> #include<time.h> #def…

关于Unity四种合批技术详解

文章目录 一.静态合批(StaticBatching)1.启用静态合批2.举例说明3.静态合批的限制4.静态合批的优点缺点5.动态指定物品合批 二.动态合批(Dynamic Batching)1.启用动态合批2.合批规则3.举例说明4.使用限制 三.GPU Instancing1.启用GPU Instancing2.启用限制3.举例说明 四.SRP Ba…

uniapp h5本地预览pdf教程 (含白屏|跨域解决方案)

第一步 下载pdf.js 很多pdf.js版本在真机ios环境都会白屏 经测试后2.5.207版本比较稳定&#xff0c;Android和IOS环境PDF文件都能加载成功 下载地址 https://github.com/mozilla/pdf.js/releases/tag/v2.5.207https://github.com/mozilla/pdf.js/releases/tag/v2.5.207第二步 解…

C++(week15): C++提高:(五)Redis数据库

文章目录 零、Redis的安装、API1.redis、hiredis、redis-plus-plus安装2.HiRedis的API 一、Redis数据库的基本概念1.关系型数据库与非关系型数据库的区别2.非关系型数据库的分离3.Redis的概念4.Redis的特性5.Redis的优点 二、Redis常用命令三、Redis的五大数据类型及其命令1.st…

c++初阶-----STL---list

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

Datawhale AI夏令营第四期 魔搭-AIGC方向 task01笔记

目录 赛题内容 可图Kolors-LoRA风格故事挑战赛 baseline要点讲解(请配合Datawhale速通教程食用) Step1 设置算例及比赛账号的报名和授权 Step2 进行赛事报名并创建PAI实例 Step3 执行baseline Step4 进行赛题提交 微调结果上传魔搭 lora 调参参数介绍及 SD 的基础知识点…

ICETEK-DM6437-AICOM——CPU定时器及直流电机控制中断控制

一、设计目的&#xff1a; 1.1 CPU定时器程序设计&#xff1b; 1.2 2直流电机程序设计&#xff1b; 1.3 外中断。 二、设计原理&#xff1a; 2.1 定时器的控制&#xff1a; 在DM6437&#xff08;是一种数字信号处理器&#xff0c;DSP&#xff09;上使用其内部定时器和中断来…

JESD204B/C协议学习笔记

JESD204B基础概念 204B包含传输层&#xff0c;链路层&#xff0c;物理层。 应用层是对 JESD204B 进行配置的接口&#xff0c;在标准协议中是不含此层&#xff0c;只是为了便于理解&#xff0c;添加的一个层。 协议层指工程中生成的IP核JESD204B&#xff0c;负责处理输入的用户…

Java网络编程——简单的 API 调用

Get请求 - 无参数 上一章我们学习了网络的基本概念&#xff0c;我们知道 URL 能输入到浏览器地址栏中被打开&#xff0c; 那么能不能在程序中发送请求&#xff0c;获取结果呢&#xff1f; 例如“中国科学技术大学”的网站&#xff08;https://www.ustc.edu.cn/&#xff09;&a…

探索设计模式:观察者模式

探索设计模式&#xff1a;观察者模式 &#x1f9d0;观察者模式简介:gem:核心概念:rainbow:观察者模式的优点:truck:实现步骤1. 定义主题接口2. 实现观察者接口3. 具体主题实现4. 具体观察者实现5. 调用 :triangular_flag_on_post:总结 在实际开发过程中&#xff0c;设计模式的作…

【Hot100】LeetCode—124. 二叉树中的最大路径和

1- 思路 使用递归 dfs 实现① 递归思路&#xff1a;每次递归返回值为 &#xff0c; root.valMath.max(left,right) 从 左右孩子中挑选一个大的。② 递归公式&#xff1a;定义 sum&#xff0c;sum root.val left right 2- 实现 ⭐124. 二叉树中的最大路径和——题解思路 cl…

【矩阵对角线求和】求一个3*3矩阵对角线元素之和

求一个3*3矩阵对角线元素之和&#xff0c;使用C语言实现 具体代码&#xff1a; #include<stdio.h>int main(){float a[3][3],sum0;printf("请输入3x3矩阵的元素&#xff08;按行输入&#xff09;&#xff1a;\n");for(int i0;i<3;i){for(int j0;j<3;j)…

Java、PHP、Node 操作 MySQL 数据库常用方法

一、Java 操作 MySQL 数据库 1、Java 连接 MySQL 数据库 1. 使用 JDBC 驱动程序连接 使用这种方式&#xff0c;首先需要导入 MySQL 的 JDBC 驱动程序依赖&#xff0c;然后通过 Class.forName() 方法加载驱动程序类。其创建连接的过程相对直接&#xff0c;只需提供准确的数据库…

Tech Talk: SSD架构与功能模块详解

在之前的系列文章中&#xff0c;我们介绍了固态硬盘的系列知识&#xff0c;包括闪存的介质、原理&#xff0c;以及作为SSD大脑的控制器设计&#xff0c;本文将详细介绍SSD架构以及功能模块。 SSD架构简介 ◎SSD架构示意图 如上图所示&#xff0c;典型的SSD架构包括主机接口、SS…

点亮童梦思考之光,神秘伙伴震撼登场!

本文由 ChatMoney团队出品 介绍说明 咱们来聊聊“十万个为什么”机器人&#xff0c;这对小朋友来说&#xff0c;好处可多了去啦&#xff01; 小朋友们天生好奇&#xff0c;满脑子都是问号。 这个机器人就像个啥都懂的知识达人&#xff0c;不管他们问啥&#xff0c;都能给出答…