聊聊对Mysql的理解

目录

1、Sql介绍

1.1、SQL的分类

1.2、数据库的三大范式

1.3、数据表的约束

1.4、约束的添加与删除

2、核心特性

3、主要组件

4、数据结构原理

5、索引失效

6、常用问题

7、优势与局限


前言

        MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现属于Oracle旗下产品。


1、Sql介绍

Structure Query Language(结构化查询语言)简称SQL。

1.1、SQL的分类


1、DDL(Data Definition Language) 数据定义语言

用来操作数据库、表、列等; 常用语句:CREATE、 ALTER、DROP。


2、DML(Data Manipulation Language) 数据操作语言

用来操作数据库中表里的数据;常用语句:INSERT、 UPDATE、 DELETE。


3、DCL(Data Control Language) 数据控制语言

用来操作访问权限和安全级别; 常用语句:GRANT、DENY。


4、DQL(Data Query Language) 数据查询语言

用来查询数据 常用语句:SELECT。‘’

1.2、数据库的三大范式


1、第一范式(1NF)

数据库表的每一列都是不可分割的基本数据线(每列的值具有原子性,不可再分割)。


2、第二范式(2NF)

在第一范式(1NF)的基础上,如果表是单主键,那么主键以外的列必须完全依赖于主键;如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分。


3、第三范式(3NF)

在第二范式的基础上建立起来的,即满足第三范式必须要先满足第二范式。第三范式(3NF)要求:表中的非主键列必须和主键直接相关而不能间接相关;(非主键列之间不能相关依赖)。

1.3、数据表的约束

1. 主键约束 (PRIMARY KEY)

  • 唯一标识表中的每一行记录

  • 不允许 NULL 值

  • 一个表只能有一个主键

CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(50)
);-- 复合主键
CREATE TABLE order_items (order_id INT,product_id INT,quantity INT,PRIMARY KEY (order_id, product_id)
);

2. 外键约束 (FOREIGN KEY)

  • 建立表与表之间的关系

  • 确保引用完整性

  • 被引用的列必须是主键或唯一键

CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,order_date DATE,FOREIGN KEY (user_id) REFERENCES users(id)
);

3. 唯一约束 (UNIQUE)

  • 确保列中的所有值都是唯一的

  • 允许 NULL 值(但只能有一个 NULL)

  • 一个表可以有多个 UNIQUE 约束

CREATE TABLE employees (id INT PRIMARY KEY,email VARCHAR(100) UNIQUE,phone VARCHAR(20) UNIQUE
);

4. 非空约束 (NOT NULL)

  • 强制列不接受 NULL 值

  • 必须包含值

CREATE TABLE products (id INT PRIMARY KEY,name VARCHAR(100) NOT NULL,price DECIMAL(10,2) NOT NULL
);

5. 默认约束 (DEFAULT)

  • 当插入数据时,如果没有提供值,则使用默认值

CREATE TABLE orders (id INT PRIMARY KEY,order_date DATE DEFAULT CURRENT_DATE,status VARCHAR(20) DEFAULT 'pending'
);

6. 检查约束 (CHECK) - MySQL 8.0+

  • 限制列中值的范围

  • 确保数据满足特定条件

CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT CHECK (age >= 18),salary DECIMAL(10,2) CHECK (salary > 0)
);

1.4、约束的添加与删除

1.添加约束

-- 添加主键
ALTER TABLE students ADD PRIMARY KEY (id);-- 添加外键
ALTER TABLE orders ADD CONSTRAINT fk_user
FOREIGN KEY (user_id) REFERENCES users(id);-- 添加唯一约束
ALTER TABLE products ADD UNIQUE (product_code);

2.删除约束

-- 删除主键
ALTER TABLE students DROP PRIMARY KEY;-- 删除外键
ALTER TABLE orders DROP FOREIGN KEY fk_user;-- 删除唯一约束
ALTER TABLE products DROP INDEX product_code;

合理使用约束可以确保数据库数据的完整性和一致性,是数据库设计中的重要环节。


2、核心特性

  1. 开源免费:社区版可免费使用,有活跃的开源社区支持

  2. 跨平台:支持Windows、Linux、macOS等多种操作系统

  3. 高性能:优化过的存储引擎(InnoDB等)提供良好的读写性能

  4. 可扩展性:支持主从复制、分片等扩展方案

  5. 关系型数据库:基于表结构存储数据,支持SQL(结构化查询语言)

3、主要组件

  • 存储引擎:InnoDB(默认)、MyISAM、Memory等,各有适用场景

  • 查询优化器:分析SQL语句并生成高效执行计划

  • 连接池:管理数据库连接,提高并发性能

  • 日志系统:包括二进制日志、错误日志、慢查询日志等

4、数据结构原理

5、索引失效

持续更新

6、常用问题

1、count(*)和count(1)和count(列)区别

  1. COUNT(*)COUNT(1)在实际结果上完全相同。

  2. 它们的执行计划也完全一致。

  3. 在复杂查询和性能测试中表现相同。

  4. COUNT(列名)有明显区别,count(列)会忽略NULL值。

2、Delete和Truncate区别

        TRUNCATE和DETELE都能实现删除表中的所有数据的功能。

但两者也是有区别的:


1、DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。


2、使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1。


3、DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句。

7、优势与局限

优势

  • 成熟稳定,社区支持完善

  • 易于安装和使用

  • 良好的兼容性和工具生态

  • 支持事务处理(ACID特性)

局限

  • 在大数据量(如PB级)场景下不如NoSQL高效

  • 水平扩展能力相对有限

  • 复杂查询性能可能不如专用分析型数据库

参考文章:

1、MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)_mysql有这一篇幅就够了-CSDN博客

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

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

相关文章

[HOT 100] 1617. 统计子树中城市之间最大距离

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 1617. 统计子树中城市之间最大距离 - 力扣(LeetCode) 2. 题目描述 给你 n 个城市,编号为从 1 到 n 。同时给你一个大小为 n-1 的数组 edges &…

接口自动化——参数化

之前有说过,通过pytest测试框架标记参数化功能可以实现数据驱动测试。数据驱动测试使用的文件主要有以下类型: txt 文件 csv 文件excel 文件json 文件yaml 文件.... 本文主要讲的就是以上几种文件类型的读取和使用 一.txt 文件读取使用 首先创建一个 …

游戏引擎学习第257天:处理一些 Win32 相关的问题

设定今天的工作计划 今天我们本来是打算继续开发性能分析器(Profiler),但在此之前,我们认为有一些问题应该先清理一下。虽然这类事情不是我们最关心的核心内容,但我们觉得现在是时候处理一下了,特别是为了…

实验三 触发器及基本时序电路

1.触发器的分类?各自的特点是什么? 1 、 D 触发器 特点:只有一个数据输入端 D ,在时钟脉冲的触发沿,输出 Q 的状态跟随输入端 D 的 状态变化,即 ,功能直观,利于理解和感受…

硬件加速模式Chrome(Edge)闪屏

Chrome开启“硬件加速模式”后,打开浏览器会闪屏或看视频会闪屏,如果电脑只有集显,直接将这个硬件加速关了吧,没啥必要开着 解决方法 让浏览器使用独立显卡 在Windows左下角搜索 图形设置 ,将浏览器添加进去&#…

前端工程化利器:Node.js 文件匹配库 fast-glob 完全指南——比传统方案快 350% 的「文件搜索神器」

为什么需要 fast-glob? 在前端工程化场景中,文件匹配是高频操作:自动化构建、资源打包、静态资源管理等都依赖高效的路径匹配。传统的 node-glob 虽然功能齐全,但性能瓶颈明显。fast-glob 应运而生——它以 极简 API 和 超高性能…

React class 的组件库与函数组件适配集成

如果你有一个 基于 React class 的组件库,现在需要在 React hooks 函数组件中使用,你可以通过以下几种方式实现适配和集成: 数据生命周期确保 class 组件使用 React.forwardRef 导出(或手动绑定 ref) ✅ 1. 直接使用 c…

Sway初体验

Sway(缩写自 SirCmpwn’s Wayland compositor[1])是一款专为 Wayland 设计的合成器,旨在与 i3 完全兼容。根据官网所述: Sway 是 Wayland 的合成器,也是 x11 的 i3 窗口管理器的替代品。它可以根据您现有的 i3 配置工作…

dubbo 参数校验-ValidationFilter

org.apache.dubbo.rpc.Filter 核心功能 拦截RPC调用流程 Filter是Dubbo框架中实现拦截逻辑的核心接口,作用于服务消费者和提供者的作业链路,支持在方法调用前后插入自定义逻辑。如参数校验、异常处理、日志记录等。扩展性机制 Dubbo通过SPI扩展机制动态…

Lesson 16 A polite request

Lesson 16 A polite request 词汇 park n. 公园,停车场,庄园 v. 停车,泊车 例句:让我来停车。    Let me park. 相关:spot n. 车位 区别:garden n. 花园 [小,私家的] 例句:我们…

解决 Builroot 系统编译 perl 编译报错问题

本文提供一种修复 Builroot 系统编译 perl 编译报错途径 2025-05-04T22:45:08 rm -f pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/ln -s perldelta.pod pod/perl5261delta.pod 2025-05-04T22:45:08 /usr/bin/gcc -c -DPERL_CORE -fwrapv -fpcc-struct-return -pipe -f…

Spring MVC 中解决中文乱码问题

在 Spring MVC 中解决中文乱码问题,需要从 请求参数编码 和 响应内容编码 两方面入手。以下是完整的解决方案: 一、解决请求参数中文乱码 1. POST 请求编码(表单提交) 配置 CharacterEncodingFilter 在 web.xml 中添加 Spring 提…

MYSQL数据库突然消失

之前在下载mysql时发现没有my.ini。考虑到后面的项目可能需要,看着教程自己创建了一次,当时就发生了所有数据库消失的问题,近几天这种事件又发生了。我在服务里看到我有mysql和mysql57两个服务,启动一个的时候另一个就无法启动&am…

【Spring】idea + maven 从零创建Spring IoC容器示例

【Spring】idea maven 从零创建Spring IoC容器示例 1. 环境准备2. 创建maven项目3. 添加依赖4. 创建Java类与接口4.1 定义接口UserService4.2 实现接口UserServiceImpl 5. 配置Spring IoC容器6. 编写主类调用IoC容器扩展:使用注解方式实现IoC1. 修改beans.xml2.使用…

面试回答之STAR结构

面试回答之STAR结构 1. STAR结构的起源 STAR是行为面试法(Behavioral Interview)的核心框架,由以下四个单词首字母组成: • Situation(情境) • Task(任务) • Action&#xff…

Kubernetes部署运行应用

①使用 Deployment 运行一个无状态应用 ②运行一个单实例有状态应用 ③运行一个有状态的应用程序 ④使用 Persistent Volumes 部署 WordPress 和 MySQL

二叉搜索树的最近祖先(递归遍历)

235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) class Solution { private:TreeNode*traversal(TreeNode*cur,TreeNode*p,TreeNode*q){if(curNULL){return NULL;}if(cur->val>p->val&&cur->val>q->val){TreeNode*lefttrave…

网络:TCP三次握手、四次挥手

目录 深刻理解三次握手 深刻理解四次挥手 深刻理解三次握手 三次握手时,如果最后一个ACK包,服务器没有收到,此时: 客户端:认为已经建立链接 服务器:认为没有建立链接,还在超时等待。 而此…

MySQL 实战 45 讲 笔记 ----来源《极客时间》

01 | 基础架构:一条SQL查询语句是如何执行的? 1. MySQL 可以分为 Server层 和 存储引擎层 两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等。存储引擎层支持 InnoDB、MyISAM等. (1) 连接器:管理连接,权限认证…

nextjs+supabase vercel部署失败

1.不能含有<any> 改成unknown或者增加类(如图) 2.检查vecel是否配置环境变量&#xff08;即supabase的url和anon-key&#xff09;