整理:熟悉MySQL的使用和运行原理,掌握索引、事务、锁等机制。了解存储引擎、读写分离、分库分表。

系列博客目录


文章目录

  • 系列博客目录
  • 1.MySQL的运行原理
  • 2.MySQL的使用
    • 步骤 1:创建数据库
    • 步骤 2:创建表
      • 2.1 创建 `users` 表
      • 2.2 创建 `products` 表
    • 步骤 3:插入数据
      • 3.1 向 `users` 表插入数据
      • 3.2 向 `products` 表插入数据
    • 步骤 4:查询数据
      • 4.1 查询所有用户
      • 4.2 查询所有商品
      • 4.3 查询特定用户(比如查询邮箱为 `bob@example.com` 的用户)
      • 4.4 查询库存大于 20 的商品
    • 步骤 5:更新数据
      • 5.1 更新商品价格
      • 5.2 更新用户邮箱
    • 步骤 6:删除数据
      • 6.1 删除某个商品(删除 `Headphones` 商品)
      • 6.2 删除某个用户(删除 `Charlie` 用户)
    • 步骤 7:创建索引
      • 7.1 为 `products` 表的 `price` 列创建索引
      • 7.2 为 `users` 表的 `email` 列创建唯一索引
    • 步骤 8:创建视图
    • 步骤 9:删除数据、表和数据库
      • 9.1 删除某个表(例如删除 `products` 表)
      • 9.2 删除数据库
    • 小结
  • 3.索引
    • 1.1 索引概述
    • 1.2 索引类型
    • 1.3 索引的底层原理
    • 1.4 索引的优缺点
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.


1.MySQL的运行原理

MySQL 是一个基于客户端-服务器架构的关系型数据库管理系统,通过 SQL 查询处理客户端请求。其核心包括查询解析、优化、执行和数据存储管理。MySQL 使用存储引擎(如 InnoDB、MyISAM)来管理数据,并通过索引、事务管理和锁机制来优化性能和保证数据一致性。同时,MySQL 通过日志机制支持数据恢复和复制,提高系统的可靠性和扩展性。

2.MySQL的使用

好的,接下来我会带你进行一个小的实战项目,创建一个简单的数据库和表,进行基本的增、查、改、删操作,并且创建索引和视图。假设我们在开发一个在线商店的数据库。

步骤 1:创建数据库

首先,我们需要创建一个数据库来存储商店相关的数据:

CREATE DATABASE online_store;

使用 USE 语句来选择我们刚才创建的数据库:

USE online_store;

步骤 2:创建表

我们会创建两张表:

  1. users:存储用户信息。
  2. products:存储商品信息。

2.1 创建 users

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  • id:自动递增且为主键。
  • name:用户名,不能为空。
  • email:用户邮箱,必须唯一。
  • created_at:记录创建时间。

2.2 创建 products

CREATE TABLE products (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,description TEXT,price DECIMAL(10, 2) NOT NULL,stock INT DEFAULT 0,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  • id:自动递增且为主键。
  • name:商品名称,不能为空。
  • description:商品描述。
  • price:商品价格。
  • stock:商品库存,默认为 0。
  • created_at:记录创建时间。

步骤 3:插入数据

我们向这两张表中插入一些数据。

3.1 向 users 表插入数据

INSERT INTO users (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');

3.2 向 products 表插入数据

INSERT INTO products (name, description, price, stock) VALUES
('Laptop', 'High-performance laptop', 1200.00, 10),
('Smartphone', 'Latest model smartphone', 800.00, 50),
('Headphones', 'Noise-canceling headphones', 150.00, 100);

步骤 4:查询数据

我们可以执行一些简单的查询,查看数据是否插入成功。

4.1 查询所有用户

SELECT * FROM users;

4.2 查询所有商品

SELECT * FROM products;

4.3 查询特定用户(比如查询邮箱为 bob@example.com 的用户)

SELECT * FROM users WHERE email = 'bob@example.com';

4.4 查询库存大于 20 的商品

SELECT * FROM products WHERE stock > 20;

步骤 5:更新数据

假设用户想要更新某个商品的价格,或者修改某个用户的信息。

5.1 更新商品价格

将商品 Laptop 的价格更新为 1100.00:

UPDATE products
SET price = 1100.00
WHERE name = 'Laptop';

5.2 更新用户邮箱

Bob 的邮箱修改为 bob.new@example.com

UPDATE users
SET email = 'bob.new@example.com'
WHERE name = 'Bob';

步骤 6:删除数据

如果我们要删除某些数据,比如删除一个用户或商品,可以使用 DELETE 语句。

6.1 删除某个商品(删除 Headphones 商品)

DELETE FROM products WHERE name = 'Headphones';

6.2 删除某个用户(删除 Charlie 用户)

DELETE FROM users WHERE name = 'Charlie';

步骤 7:创建索引

为了提高查询性能,我们可以为 products 表的 price 列和 users 表的 email 列创建索引,尤其是当这些列经常用于查询时。

7.1 为 products 表的 price 列创建索引

CREATE INDEX idx_price ON products (price);

7.2 为 users 表的 email 列创建唯一索引

CREATE UNIQUE INDEX idx_email ON users (email);

步骤 8:创建视图

假设我们想要快速查看那些价格在 500 以上且库存大于 10 的商品,可以创建一个视图来简化查询。

CREATE VIEW expensive_products AS
SELECT id, name, price, stock
FROM products
WHERE price > 500 AND stock > 10;

查询该视图:

SELECT * FROM expensive_products;

步骤 9:删除数据、表和数据库

当我们不再需要某些数据或表时,可以删除它们。

9.1 删除某个表(例如删除 products 表)

DROP TABLE products;

9.2 删除数据库

如果删除整个数据库及其所有表,可以使用:

DROP DATABASE online_store;

小结

通过这个小的实战,我们完成了:

  1. 创建数据库和表。
  2. 插入、查询、更新和删除数据。
  3. 创建索引以提高查询效率。
  4. 创建视图简化查询。
  5. 删除数据和表,管理数据库。

这些是 MySQL 中最常用的操作,掌握了这些后,你就能处理大部分数据库操作了。

3.索引

1.1 索引概述

索引是数据库中一种用于提高查询速度的数据结构。它可以加速数据的查找过程,类似于书
籍中的目录,可以快速找到目标数据。

1.2 索引类型

B-Tree 索引:MySQL 中最常见的索引类型,尤其是在 InnoDB 存储引擎中。B-Tree 索引是一个平衡树结构,适合范围查询、排序和唯一性检查。
Hash 索引:基于哈希表实现的索引,适用于精确匹配查询。其查询时间复杂度为 O(1),但不支持范围查询。
Full-Text 索引:全文索引用于加速文本字段中的关键词搜索。
R-Tree 索引:主要用于空间数据的存储,例如地理信息系统 (GIS) 中的坐标数据。

1.3 索引的底层原理

B+树:MySQL 的 B-Tree 索引实际上是 B+树的实现。B+树是一种多路平衡查找树,非叶子节点只存储键值,不存储数据,而数据存储在叶子节点中。叶子节点通过链表连接,支持高效的范围查询和排序操作。

1.4 索引的优缺点

优点:提高查询速度,特别是在大表中。通过唯一性索引来防止数据重复。
缺点:占用存储空间,尤其是多列组合索引。插入、更新、删除操作时需要维护索引,增加了开销。

4.

5.

6.

7.

8.

9.

10.

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

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

相关文章

“公路养护新利器!公路 AI 智慧巡检系统

家人们,咱日常开车出行,最烦的就是遇到路面坑洼、道路破损的情况,不仅颠簸难受,还存在安全隐患。其实,这些问题都得靠公路养护人员及时发现并处理。但以往的公路巡检工作可不容易,现在好了,有了…

mysql mvcc 锁 关系

多版本并发控制(MVCC)是一种用于数据库并发控制的机制,它可以在保证数据一致性的同时,提高数据库的并发性能。下面结合 MVCC 机制,详细阐述常见的四种事务隔离级别(读未提交、读已提交、可重复读、串行化&a…

2502vim,vim文本对象中文文档

介绍 文本块用户(textobj-user)是一个可帮助你毫不费力地创建自己的文本对象的Vim插件. 因为有许多陷阱需要处理,很难创建文本对象.此插件隐藏了此类细节,并提供了声明式定义文本对象的方法. 你可用正则式来定义简单的文本对象,或使用函数来定义复杂的文本对象.如… 文本对…

AUTOSAR面试题集锦(1)

最基础概念 目录 最基础概念 什么是AUTOSAR?AUTOSAR到底做了什么? AUTOSAR的结构是什么样的?分为哪几层? MCAL开发 什么是MCAL? 使用过EB吗?怎样使用EB配置MCAL工程? autosar4.3.1和4.4.0有什么区别? 什么是复杂驱动? 为什么使用多核?AUTOSAR提供了几种多核…

【算法】动态规划专题⑧ —— 分组背包问题 python

目录 前置知识进入正题实战演练总结 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 python 进入正题 分组背包问题的详细解析 1. 问题定义 在 分组背包问题 中,物品被划分为若干组,每组内的物品 互斥(只能选择其中一个或…

LLM:DeepSeek 系列(二)

原文链接 3、DeepSeek-V2 DeepSeek-V2 发布于 2024 年 5 月,为多领域专家(MoE)语言模型,包含总共 2360 亿个参数,其中每个词元激活 210 亿个参数,并支持 12.8 万个词元的上下文长度。DeepSeek-V2 采用包括…

AtCoder Beginner Contest 391(A~E题题解)

A - Lucky Direction 思路&#xff1a;纯模拟的一个水题 #include <bits/stdc.h> using namespace std; #define int long long string s; signed main() { cin>>s;for(int i0;i<s.size();i){char cs[i];if(cN){cout<<"S";}else if(c…

redis中的hash结构

hash类型也叫散列&#xff0c;其中value是一个无序字典&#xff0c;不用像string类型中的value用jason结构去存储&#xff0c;他的value可以将对象中的每个字段独立存储&#xff0c;而且有个好处&#xff0c;方便修改value值 类似于这样 hash类型的常见命令&#xff1a;

USB子系统学习(四)使用libusb读取鼠标数据

文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试 1、声明 本文是在学习韦东山《驱动大全》USB子系统时&#xff0c;为梳理知识点和自己回看而记录&#xff0c;全部内容高度复制粘贴。 韦老师的《驱动大全》&#xff1a;商品详情 …

02.08 多路文件IO

思维导图1&#xff1a; 思维导图2&#xff1a; 高效处理多路文件IO&#xff1a;select、poll和epoll模型详解 在现代网络编程中&#xff0c;高效地监视多个文件描述符的IO状态&#xff08;如可读、可写、异常&#xff09;是至关重要的。本文将详细介绍三种常用的多路文件IO模…

opentelemetry-collector 配置elasticsearch

一、修改otelcol-config.yaml receivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318 exporters:debug:verbosity: detailedotlp/jaeger: # Jaeger supports OTLP directlyendpoint: 192.168.31.161:4317tls:insecure: trueotlphttp/prometheus: …

基于联合概率密度与深度优化的反潜航空深弹命中概率模型研究摘要

前言:项目题材来自数学建模2024年的D题,文章内容为笔者和队友原创,提供一个思路。 摘要 随着现代军事技术的发展,深水炸弹在特定场景下的反潜作战效能日益凸显,如何最大化的发挥深弹威力也成为重要研究课题。本文针对评估深弹投掷落点对命中潜艇概率的影响进行分析,综合利…

fps动作系统2:手臂动画

文章目录 角色蓝图pawn自动控制玩家 动画蓝图事件图表动画图表状态机时长 随机序列播放器混合空间播放器权重速度 角色蓝图 pawn 自动控制玩家 设置玩家控制器控制此pawn。 动画蓝图 事件图表 更新角色的相关数值 动画图表 设置角色相关动画以及切换规则 状态机 状态…

使用 ElementUI 和 Spring 实现稳定可靠的文件上传和下载功能

前端(ElementUI) 1. 文件上传 使用 el-upload 组件配置上传接口处理上传成功和失败<template><div><el-uploadclass="upload-demo"action="http://your-server-url/upload":on-success="handleSuccess":on-error="handle…

Docker安装pypiserver私服

Docker安装pypiserver私服 1 简介 Python开源包管理工具有pypiserver、devpi和Nexus等&#xff0c;pypiserver安装部署比较简单&#xff0c;性能也不错。 搭建pypiserver私服&#xff0c;可以自己构建镜像&#xff0c;也可以使用官网的docker镜像。 # Github地址 https://g…

[ Spring ] Integrate Spring Boot Service Monitor Prometheus and Grafana

文章目录 Install Prometheus ServerInstall Grafana ServerSpring Prometheus ProjectSpring Prometheus PropertiesSpring Prometheus ApplicationSpring Prometheus ConfigurationSpring Prometheus ControllerConfigure Grafana Dash Board Install Prometheus Server # d…

“现代C++ RAII库:设计、优化及实战应用“

文章目录 代码 示例raii 类的使用示例代码&#xff1a;解释&#xff1a; raii_var 类的使用示例代码&#xff1a;解释&#xff1a; 结合线程使用示例代码&#xff1a;解释&#xff1a; make_raii 函数签名&#xff1a;示例&#xff1a;解释&#xff1a; raii_bind_var 函数签名…

代码随想录day06

242.有效的字母异位词 刚学哈希表想着使用unordered_set来实现&#xff0c;结果无法通过&#xff0c;原因是对字母异位词理解有问题&#xff0c;字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语&#xff0c;并使用所有原字母一次。对字母出现的次数有要求&am…

Java_双列集合

双列集合特点 存放的是键值对对象&#xff08;Entry&#xff09; Map 因为都是继承Map&#xff0c;所以要学会这些API&#xff0c;后面的类就都知道了 put 有两个操作&#xff0c;添加&#xff08;并返回null&#xff09;或者覆盖&#xff08;返回被覆盖的值&#xff09…

MHTML文件如何在前端页面展示

MHTML文件如何在前端页面展示 需求背景&#xff1a; 目前在给证券公司做项目&#xff0c;但是在使用新系统的过程中&#xff0c;甲方还希望之前之前系统的历史记录可以看到。 最初制定的计划是项目组里面做数据的把原系统页面爬取下来&#xff0c;转成图片&#xff0c;直接给…