MySQL数据库基础知识要点总结

news2024/11/22 6:24:38

目录

前言

一.数据库构成

1.1 表

1.2 关系

1.3 索引

1.4 查询语言

1.5 数据库管理系统

二.数据类型

2.1 整数

2.2 浮点

2.3 日期与时间

2.4 字符串

三.约束条件

3.1  主键约束

3.2  唯一约束

3.3  外键约束

3.4 非空约束

3.5 默认值约束

总结



前言

数据库是现代信息技术的重要组成部分,它在各个领域都有广泛应用,因此数据库专业人才的需求也非常高。学习数据库可以为你提供广阔的就业前景和良好的薪资待遇,同时也能够提升数据管理、数据分析和软件开发等多方面的技能。

本篇文章通过数据库构成,数据类型和约束条件这三个部分的内容,来让你了解数据库的基础知识。详细内容请看正文。


一.数据库构成

1.1 表

表(Table):用于组织和存储数据的矩阵结构。每个表包含一组字段(Columns)和记录(Rows),字段定义了数据的类型和属性,记录则是具体的数据实例。

示例代码:

CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    gender VARCHAR(10)
);

1.2 关系

关系(Relationship):通过公共字段(主键和外键)连接不同表之间的数据关联。关系可以是一对一、一对多或多对多。

示例代码:

CREATE TABLE courses (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    instructor_id INT,
    FOREIGN KEY (instructor_id) REFERENCES instructors(id)
);

1.3 索引

索引(Index):用于提高数据的检索效率,特别是对大型数据集进行快速搜索和排序。索引基于一个或多个列的值创建。

示例代码:

CREATE INDEX idx_students_name ON students(name);

1.4 查询语言

查询语言(SQL):用于与数据库进行交互,执行数据操作和检索。常见的查询语言是结构化查询语言(SQL)。

示例代码:

SELECT * FROM students WHERE age > 20;

1.5 数据库管理系统

数据库管理系统(DBMS):用于管理和操作数据库的软件。常见的DBMS包括MySQL、Oracle和SQL Server等。

示例代码(MySQL):

CREATE DATABASE mydb;
USE mydb;

二.数据类型

2.1 整数

整数类型一共有 5 种,包括 TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT。以下是MySQL中常见的日期和时间数据类型:

1. TINYINT:用于存储非常小的整数,范围是-128到127(有符号)或0到255(无符号)。占用空间1字节。

2. SMALLINT:用于存储较小的整数,范围是-32768到32767(有符号)或0到65535(无符号)。占用空间2字节。

3. MEDIUMINT:用于存储中等大小的整数,范围是-8388608到8388607(有符号)或0到16777215(无符号)。占用空间3字节。

4. INT(INTEGER):用于存储常见的整数,范围是-2147483648到2147483647(有符号)或0到4294967295(无符号)。占用空间4字节。

5. BIGINT:用于存储大整数,范围是-9223372036854775808到9223372036854775807(有符号)或0到18446744073709551615(无符号)。占用空间8字节。

这些整数数据类型可以根据需要选择有符号(可包含正负值)或无符号(仅包含非负值)。有符号整数可以表示正负整数,而无符号整数只能表示非负整数。

示例代码:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    age TINYINT UNSIGNED,
    salary BIGINT NOT NULL,
    tenure SMALLINT
);

2.2 浮点

浮点数和定点数类型的特点是可以 处理小数 ,你可以把整数看成小数的一个特例。因此,浮点数和定点数的使用场景,比整数大多了。 MySQL支持的浮点数类型,分别是FLOAT、DOUBLE、REAL。以下是MySQL中常见的日期和时间数据类型:

1. FLOAT(M, D):用于存储单精度浮点数。M表示总位数(精度),D表示小数位数(标度)。FLOAT数据类型可以存储大约7位精度。
2. DOUBLE(M, D):用于存储双精度浮点数。M表示总位数(精度),D表示小数位数(标度)。DOUBLE数据类型可以存储大约15位精度。
3. DECIMAL(M, D):用于精确的十进制浮点数。M表示总位数,D表示小数位数。DECIMAL数据类型在存储和计算时具有固定的精度。

这些浮点数数据类型可以根据需要来选择合适的精度和范围。FLOAT和DOUBLE数据类型在存储大量数据时占用的空间相对较小,但存在一些舍入误差。DECIMAL数据类型提供了准确的十进制计算,但占用的存储空间相对较大。

示例代码:

CREATE TABLE products (
    id INT PRIMARY KEY,
    price FLOAT(8, 2),
    weight DECIMAL(6, 3)
);

2.3 日期与时间

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。以下是MySQL中常见的日期和时间数据类型:

1. DATE:用于存储日期值,格式为'YYYY-MM-DD'。

2. TIME:用于存储时间值,格式为'HH:MM:SS'。

3. DATETIME:用于存储日期和时间值,格式为'YYYY-MM-DD HH:MM:SS'。

4. TIMESTAMP:用于存储日期和时间戳值。存储的范围为'1970-01-01 00:00:01'到'2038-01-19 03:14:07',以UTC时间为基准。

5. YEAR:用于存储年份值,格式为'YYYY'。

示例代码:

CREATE TABLE events (
    id INT PRIMARY KEY,
    event_date DATE,
    event_time TIME,
    event_datetime DATETIME,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2.4 字符串

MySQL数据库提供了多个字符串(String)数据类型,用于存储和处理文本和字符数据。以下是MySQL中常见的字符串数据类型:

1. CHAR:用于存储固定长度的字符串。在创建表时需要指定字符的最大数量。CHAR类型的字符串在存储时会被自动填充空格,因此它适合存储长度相等的数据。

2. VARCHAR:用于存储可变长度的字符串。在创建表时需要指定字符的最大数量。VARCHAR类型的字符串只会占用实际使用的存储空间,适合存储长度不等的数据。

3. TEXT:用于存储较长的文本数据,最大容量为65,535个字符。

4. ENUM:用于存储枚举值中的一个。ENUM类型提供给定选项的固定集合,您可以根据需要定义不同的选项。

5. SET:用于存储SET值中的一个或多个。SET类型提供给定选项的可变集合,您可以根据需要定义多个选项。

示例代码:

CREATE TABLE users (
    id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email CHAR(100),
    bio TEXT
);

注意:

CHAR(M) 类型一般需要预先定义字符串长度。如果不指定(M),则表示长度默认是1个字符。
VARCHAR(M) 定义时, 必须指定 长度M,否则报错。char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

三.约束条件

3.1  主键约束

主键约束(PRIMARY KEY):用于唯一标识表中的每一行数据。主键与记录之间的关系如同身份证和人之间的关系,他们是一一对应的。以下是MySQL中主键约束的一些重要特点:

1. 主键的值是唯一的:主键列的值在整个表中必须是唯一的,即每一行都有一个不同的主键值。
2. 主键不允许NULL值:主键列的值不能为NULL,确保每一行都有一个有效的主键值。
3. 主键的唯一索引:MySQL会自动为定义主键约束的列创建一个唯一索引,以提高查询效率。
4. 主键可以由一个或多个列组成:在创建表时,可以选择将多个列作为主键。这种情况下,这些列的组合必须是唯一的。
5. 主键的自动递增(AUTO_INCREMENT):通常情况下,我们会将主键列定义为自动递增的。这意味着MySQL会自动为主键列生成唯一的、递增的值。

示例代码:

CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100)
);

在上述示例中,`id`列被定义为主键,它将唯一标识`users`表中的每一行。

通过使用主键约束,可以确保表中的每一行都有一个唯一的标识,帮助保持数据的一致性和完整性。主键还可以作为关联表之间的连接点,用于建立表之间的关系。

3.2  唯一约束

唯一约束(UNIQUE):用于确保某个列(或一组列)中的值是唯一的。唯一约束可以包含NULL值,但每个非NULL值都必须是唯一的。以下是MySQL中唯一约束的一些关键特点:

1. 唯一值的限制:唯一约束确保在指定的列中,每个值只能出现一次,并且不允许重复。这使得该列或组合列具有唯一性。

2. 包含NULL值:唯一约束允许在列中包含NULL值。NULL值被视为特殊值,因此在列中可以有多个NULL值,但非NULL值必须唯一。

3. 创建唯一索引:MySQL会自动为唯一约束的列创建唯一索引,以确保检索和查询的高效性。

4. 可以定义在单个列或多个列上:可以在单个列上定义唯一约束,也可以在多个列的组合上定义。对于多列的组合,这些列的组合值必须是唯一的。

示例代码:

CREATE TABLE users (
    id INT,
    username VARCHAR(50) UNIQUE,
    email VARCHAR(100) UNIQUE
);

在上述示例中,`username`和`email`列都被定义为唯一约束,确保表中每个用户的用户名和电子邮件地址都是唯一的。

需要注意的是,通过使用唯一约束,可以在列或组合列上强制实施数据的唯一性。这有助于避免数据重复或重复插入,并维护数据的一致性。

3.3  外键约束

外键约束(FOREIGN KEY):用于关联两个表,确保外键列中的值存在于关联表的主键列中。外键约束可以用于维护表之间的引用完整性。以下是MySQL中外键约束的一些重要特点:

1. 关联表之间的关系:外键约束用于定义表之间的关系,其中一个表中的列引用了另一个表的主键列。这种关系称为引用关系。

2. 父表和子表:在关系中,包含主键列的表称为父表,而包含外键列的表称为子表。

3. 引用完整性:外键约束确保在子表中的外键列中的值存在于父表的主键列中。这样可以防止在子表中插入无效的引用值。

4. 级联操作:在定义外键约束时,可以选择定义级联操作。这意味着在父表中进行更新或删除操作时,MySQL将自动更新或删除相关的子表中的行。

示例代码:

CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE orders (
    id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(id)
);

在上述示例中,`orders`表中的`customer_id`列被定义为外键,引用了`customers`表中的`id`列。这样就建立了`customers`表和`orders`表之间的关联。

3.4 非空约束

非空约束(NOT NULL):用于确保某个列中的值不为空,即不允许NULL值。以下是MySQL中非空约束的一些关键特点:

1. 强制不为空值:非空约束要求在指定的列中插入的值不能为NULL。这意味着该列不能没有值,必须包含一个有效的值。

2. 默认情况下允许为NULL:在创建表时,如果没有显式地指定非空约束,那么表中的列默认情况下是允许为NULL的。

3. 在插入或更新时进行验证:当尝试插入或更新某一行的数据时,MySQL会自动验证非空约束,确保所要插入或更新的列不为空。

4. 阻止插入或更新空值:如果尝试插入或更新数据时提供了NULL值,而该列具有非空约束,MySQL将拒绝该操作,并抛出相应的错误或警告。

示例代码:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT NOT NULL,
    department VARCHAR(50)
);

在上述示例中,`name`和`age`列被定义为非空约束,这表示在插入或更新数据时,这两个列必须包含非NULL的值。

3.5 默认值约束

默认值约束(DEFAULT):用于在插入数据时,如果未提供该列的值,则将使用默认值。以下是MySQL中默认值约束的一些关键特点:

1. 设置默认值:默认值约束用于指定列在插入时应具有的默认值。可以使用各种数据类型的字面值作为默认值,例如字符串、数字、NULL等。

2. 针对NULL值的默认值:当列的默认值设置为NULL时,如果未提供明确值或NULL以外的值,MySQL将自动插入NULL作为默认值。

3. 指定默认值的位置:在创建表时,可以在列定义之后使用DEFAULT关键字来指定默认值。也可以通过ALTER TABLE语句在已存在的表上添加默认值。

4. 修改默认值:可以随时通过ALTER TABLE语句修改现有列的默认值。

示例代码:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) DEFAULT 'N/A',
    age INT DEFAULT 0,
    department VARCHAR(50) DEFAULT NULL
);

在上述示例中,`name`列的默认值设置为字符串'N/A',`age`列的默认值设置为整数0,`department`列的默认值设置为NULL。

通过使用默认值约束,可以确保在插入数据时如果未显式提供值,那么将使用默认值填充列,从而简化了对那些常见的默认值的重复输入,提高了数据插入的效率和简洁性。


总结

总的来说,数据库是一个组织和存储数据的系统。它可以被视为一个电子文件柜,用于收集、管理和提供对数据的访问。数据库通常由数据表、记录和字段组成,这些表用于存储不同类别的数据,并通过键值关系相互连接。
关注,点赞,收藏,希望友友们能一键三连哦!

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

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

相关文章

Linux环境下安装jdk1.8并配置环境变量

JDK版本:1.8 Linux准备工作 1.在usr目录下创建一个java文件夹准备放置我们下载好的jdk安装包 // An highlighted block var foo bar;2 , 将下载好的安装包放到我们刚刚创建好的 /usr/java 目录下, 执行 命令解压安装包。 tar -zxvf jdk-8u221-linux-x64.tar.g…

open62541开发:添加sqlite3 历史数据库

历史数据库在OPCUA 应用中十分重要,例如OPCUA 网关和OPCUA 汇聚服务器中都需要历史数据库功能。但是open62541 协议栈中仅包含了基于内存的历史数据库,在实际应用中是不够的。本博文讨论open62541 中添加sqlite3 为基础的历史数据库若干问题。 借鉴 Gi…

【Python小练习】简单浮点矩阵乘法

前言 最近上《计算机控制系统》课,涉及许多矩阵运算(乘法居多),觉得手算不过来,按计算器太慢,于是写一个Python小程序做做。 二、代码 import numpy as np from numpy import shapem int(input("…

3D点云数据集制作实录【LiDAR】

在过去的两年里,我一直在和机器人打交道。 今年早些时候,我不再只关注相机,而是决定开始使用激光雷达。 因此,经过大量研究后,我选择了 32 束 RoboSense 设备。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 …

ElasticSearch深度分页解决方案

文章目录 概要ElasticSearch介绍es分页方法es分页性能对比表方案对比 From/Size参数深度分页问题Scroll#性能对比向前翻页 总结个人思考 概要 好久没更新文章了,最近研究了一下es的深分页解决方案。和大家分享一下,祝大家国庆节快乐。 ElasticSearch介…

记一次 .NET 某拍摄监控软件 卡死分析

一:背景 1. 讲故事 今天本来想写一篇 非托管泄露 的生产事故分析,但想着昨天就上了一篇非托管文章,连着写也没什么意思,换个口味吧,刚好前些天有位朋友也找到我,说他们的拍摄监控软件卡死了,让…

Android Shape设置背景

设置背景时&#xff0c;经常这样 android:background“drawable/xxx” 。如果是纯色图片&#xff0c;可以考虑用 shape 替代。 shape 相比图片&#xff0c;减少资源占用&#xff0c;缩减APK体积。 开始使用。 <?xml version"1.0" encoding"utf-8"?…

【STM32单片机】u8g2智能风扇设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用按键、IIC OLED模块、DS18B20温度传感器、直流电机、红外遥控等。 主要功能&#xff1a; 初始化后进入温度显示界面&#xff0c;系统初始状态为手动…

探索视听新纪元: ChatGPT的最新语音和图像功能全解析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f916; 人工智能 AI: &#x1f9e0; Machine …

【我的创作纪念日】使用pix2pixgan实现barts2020数据集的处理(完整版本)

使用pix2pixgan &#xff08;pytorch)实现T1 -> T2的基本代码 使用 https://github.com/eriklindernoren/PyTorch-GAN/ 这里面的pix2pixgan代码进行实现。 进去之后我们需要重新处理数据集&#xff0c;并且源代码里面先训练的生成器&#xff0c;后训练鉴别器。 一般情况下…

亚马逊要求的UL报告的产品标准是什么?如何区分

亚马逊为什么要求电子产品有UL检测报告&#xff1f; 首先&#xff0c;美国是一个对安全要求非常严格的国家&#xff0c;美国本土的所有电子产品生产企业早在很多年前就要求有相关安规检测。 其次&#xff0c;随着亚马逊在全球商业的战略地位不断提高&#xff0c;境外的电子设…

百度资源搜索平台出现:You do not have the proper credential to access this page.怎么办?

Forbidden site not allowed You do not have the proper credential to access this page. If you think this is a server error, please contact the webmaster. 如果你的百度资源平台&#xff0c;点进去出现这个提示&#xff0c;说明您的网站已经被百度清退了。 如果你的网…

队列的分类及用途

队列&#xff08;Queue&#xff09;是一种常见的数据结构&#xff0c;用于存储和管理数据元素。队列通常遵循先进先出&#xff08;FIFO&#xff0c;First-In-First-Out&#xff09;的原则&#xff0c;这意味着最早添加到队列的元素将首先被移除。队列有不同的类型和用途&#x…

VS code本地安装PlantUML

VS code本地安装PlantUML 需要条件vs code安装插件使用常见错误 需要条件 在VS Code上安装PlantUML扩展之前&#xff0c;请确保您具有以下先决条件: : Java与GraphViz(点击可直接跳转下载界面); 安装省略 vs code安装插件 vs code安装以下两个插件&#xff08;PlantUML,Grap…

易云维®智慧工厂数字化管理平台助推工业制造企业数字化转型新动能

近年来&#xff0c;我国正在积极推进工业制造企业数字化转型&#xff0c;工业制造企业数字化转型迎来了密集的利好政策&#xff0c;近期&#xff0c;国家工信部又出台系列政策&#xff0c;实施工业制造企业数字化促进工程&#xff0c;推动工业制造企业更快更好地拥抱数字经济。…

数字安全设备制造有哪几种方式?

数字安全设备制造是指制造用于保护数字信息系统和网络安全的专用设备。以下是几种常见的数字安全设备制造方式&#xff1a; 集成式安全设备制造&#xff1a;集成式安全设备制造是将多种安全功能集成到单一的硬件设备或软件平台中。这种制造方式可以大大降低设备的成本和复杂性&…

vue3 + vite3 addRoute 实现权限管理系统

vue3 vite3 addRoute 实现权限控制 1、前言2、静态路由3、动态路由4、在组建中使用路由5、注意事项 1、前言 在权限系统开发中&#xff0c;根据后端返回的菜单列表动态添加路由是非常常见的需求&#xff0c;它可以实现根据用户权限动态加载可访问的页面。本篇文章我们将重点介…

第二届全国高校计算机技能竞赛——Java赛道

第二届全国高校计算机技能竞赛——Java赛道 小赛跳高 签到题 import java.util.*; public class Main{public static void main(String []args) {Scanner sc new Scanner(System.in);double n sc.nextDouble();for(int i 0; i < 4; i) {n n * 0.9;}System.out.printf(&…

探索公共厕所的数字化治理,智慧公厕完善公共厕所智能化的治理体系

随着城市化进程的不断发展&#xff0c;公共厕所治理成为一个不容忽视的问题。如何通过数字化手段来提升公共厕所管理水平&#xff0c;成为了一个备受关注的话题。本文将以智慧公厕领先厂家广州中期科技有限公司&#xff0c;大量精品案例项目实景实图&#xff0c;探讨公共厕所数…

品牌线上假货怎么治理

随着品牌的发展&#xff0c;母婴、家电、百货等行业&#xff0c;链接量暴增&#xff0c;销售店铺也较多&#xff0c;线上仅通过图片销售的形式&#xff0c;也导致了假货链接地滋生&#xff0c;假货分两种情况&#xff0c;一种是只销售假货的店铺&#xff0c;一种是真假混卖的店…