当前位置: 首页 > news >正文

MySQL笔记---数据库基础

1. 什么是数据库

简单来说,数据库(Database)是一个有组织、可高效存储、管理和访问数据的系统,它并非简单的 “文件集合”,而是通过特定规则将数据结构化,解决 “大量数据如何有序、安全、快速使用” 的核心问题。

1.1 数据库的特性

数据库的设计围绕 “高效、安全、可靠” 展开,核心特性包括:

  • 结构化存储:数据按 “表 - 字段 - 记录” 的逻辑组织。例如 “用户表” 包含 “用户 ID、姓名、手机号” 等字段,每一行是一个用户的具体数据(记录)。
  • 高效访问:通过 “索引”(类似书籍目录)快速定位数据,即使是亿级数据,也能快速筛选。
  • 数据完整性:通过 “约束规则” 确保数据准确。例如
    • 主键约束:“用户 ID” 必须唯一(不重复);
    • 外键约束:“订单表” 的 “用户 ID” 必须在 “用户表” 中存在(避免无效订单);
    • 格式约束:“手机号” 必须是 11 位数字。
  • 并发控制:多用户同时操作时,自动协调优先级,避免冲突。例如:A 和 B 同时给同一用户充值,数据库会确保最终余额是 “原余额 + A 充值 + B 充值”,而非覆盖。
  • 安全与备份:支持细粒度权限(如 “客服只能看订单,不能改价格”),并可定时备份数据,防止误删系统故障导致数据丢失。

1.2 数据库与普通文件的对比

我们日常用的 Excel 表格、TXT 文档也能存数据,但面对大量、多用户共享、高频修改的数据时,就会暴露明显缺陷。数据库的价值,正是弥补这些缺陷:

对比维度普通文件(如 Excel)数据库(如 MySQL)
数据量适合小数据(如几百行),量大时卡顿支持海量数据(千万 / 亿行),性能稳定
多用户共享多人同时修改易冲突(如覆盖内容)支持并发操作,自动避免冲突
查询效率复杂筛选(如多条件匹配)速度慢通过 “索引” 等技术,毫秒级查询
数据安全性易误删、篡改,无权限控制支持权限管理(如只读 / 修改权限)、备份恢复
数据一致性无法自动校验(如手机号格式错误)可设置 “约束”(如手机号必须 11 位)

1.3 DBMS(数据库管理系统)、数据库、表

实际上,我们说的 “使用MySQL数据库” 的说法并不准确,准确的说法是 “使用MySQL数据库管理系统来管理数据库” 

“数据库” “DBMS”(数据库管理系统),二者其实是 “数据集合”“管理工具” 的关系:

  • 数据库(Database):本质是 “按规则存储的数据集合”(类似 “仓库里的货物”);
  • DBMS(数据库管理系统):操作和管理数据库的软件(类似 “仓库管理员”)。

目前市面上主流的数据库(这里指DBMS)基本上都是关系型数据库,这类数据库存储数据依靠的是一种被称作 “表” 的二维结构。

所谓表,实际上就是同一种结构化对象的集合罢了,例如student表:

通常来说,数据库就是一个被DBMS管理起来的文件目录(数据库中的表,就是目录中的文件),而数据库本质上是一个网络服务,分为客户端与服务器,以支持远程访问:

1.4 数据库存储引擎

数据库存储引擎(Storage Engine)是关系型数据库管理系统(RDBMS)中负责数据存储、检索、更新和管理的核心组件,它决定了数据在磁盘上的存储格式、索引方式、事务支持、锁机制等底层行为。

简单说,存储引擎就像数据库的 “文件系统”,但比普通文件系统更针对数据库的特性(如事务、查询优化)设计。不同存储引擎有不同的优势,选择合适的引擎直接影响数据库的性能、可靠性和功能支持。

我们登录数据库之后,可以输入如下语句来查询数据库支持的存储引擎:

show engines;

在MySQL中,最常用的三种引擎如下:

特性 / 引擎InnoDBMyISAMMemory
事务支持支持(ACID)不支持不支持
外键约束支持不支持不支持
锁机制行级锁(并发好)表级锁(并发差)表级锁
崩溃恢复支持(通过日志)不支持(可能丢失数据)不支持(重启丢失)
全文索引支持(5.6+)支持不支持
存储位置磁盘磁盘内存
适用场景事务、高并发读写读多写少、静态数据临时缓存、小表

三者当中最最常用的、被用作MySQL默认引擎的是谁呢?好难猜呀。

要修改数据库使用的存储引擎也很简单,修改配置文件 “/etc/my.cnf” 或 “/etc/mysql/my.cnf”:

然后重启数据库服务。

2. 如何登录数据库

mysql [选项]

MySQL 客户端(mysql 命令)提供了丰富的登录选项,用于指定连接参数、身份验证等。以下是常用的登录选项及用法说明:

选项简写选项全称作用描述示例
-u--user=用户名指定登录的 MySQL 用户名(必需)mysql -u root(使用 root 用户登录)
-p--password
  • 指定用户密码(建议不直接写密码,仅用 -p 让系统提示输入,更安全)
  • (不推荐)直接在 -p 后紧跟密码(明文显示,有安全风险)
  • mysql -u root -p(回车后会提示输入密码)
  • mysql -u root -p123456(不建议在生产环境使用)
-h--host=主机名指定连接的 MySQL 服务器地址(默认是 localhost,即本地)mysql -u root -p -h 192.168.1.100(连接远程服务器)
-P--database=库名指定 MySQL 服务器的端口(默认是 3306,若服务器端口修改需显式指定)mysql -u root -p -h 127.0.0.1 -P 3307(连接 3307 端口)
-D--database=库名登录后直接切换到指定数据库(等价于登录后执行 use 库名)mysql -u root -p -D test(登录后直接进入 test 数据库)
-e--execute=SQL登录后直接执行指定 SQL 语句,执行完自动退出(常用于脚本)mysql -u root -p -e "SELECT VERSION();"(执行版本查询并退出)
--protocol--protocol=协议指定连接协议(可选:tcp、socket、pipe、memory,默认自动选择)mysql -u root -p --protocol=tcp(强制使用 TCP 协议连接)
--ssl--ssl启用 SSL 加密连接(若服务器配置了 SSL 需显式指定)mysql -u root -p --ssl(使用 SSL 加密连接)
-V--version显示 MySQL 客户端版本,不登录服务器mysql -V 或 mysql --version
--help--help显示所有可用选项的帮助信息mysql --help

退出很简单,输入 “quit” 即可:

3. SQL语言

SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库(RDBMS)的标准编程语言,核心作用是实现对数据库中数据的 “查询、插入、修改、删除” 以及对数据库结构(表、视图、权限等)的管理。

它是所有关系型数据库(如 MySQL、Oracle、SQL Server、PostgreSQL 等)的通用交互语言,也是数据领域(开发、运维、分析)的基础工具。

简单来说,SQL语言本质上就是一种解释型的语言(类似shell)。而MDBS的客户端就是这种语言的解释器(类似bash)

在Linux命令行当中,bash解释我们输入的shell语句,进而与操作系统交互。

而当我们登录mysql之后,命令行就相当于被mysql客户端夺舍了,mysql客户端解释我们输入的SQL语句,进而与服务器进行交互。

我们在vscode当中我们开启两个终端,一个登录mysql,一个不登陆:

可以看到,一个显示的命令行解释器为mysql,另一个显示的是bash。

实际上python也是一样的道理,这就是所谓的脚本语言。

3.1 SQL语句的分类

根据操作目的,SQL 可分为 5 大类,每类对应不同的数据库操作场景,以下是常用分类及典型命令:

分类英文全称核心作用常用命令示例
数据查询 (DQL)Data Query Language从数据库中 “提取数据”(最常用)SELECT(查询)、FROM(指定表)、WHERE(条件筛选)、GROUP BY(分组)、ORDER BY(排序)
数据操纵 (DML)Data Manipulation Language对数据进行 “增、改、删”INSERT(插入)、UPDATE(修改)、DELETE(删除)
数据定义 (DDL)Data Definition Language定义 / 修改数据库 “结构”(表、视图等)CREATE(创建,如建表CREATE TABLE)、ALTER(修改,如改表结构ALTER TABLE)、DROP(删除,如删表DROP TABLE)、TRUNCATE(清空表数据)
数据控制 (DCL)Data Control Language管理数据库 “权限” 和 “访问控制”GRANT(授予权限,如给用户查表权限)、REVOKE(回收权限)、CREATE USER(创建用户)
事务控制(TCL)Transaction Control Language保证数据操作的 “原子性、一致性”(避免数据异常)COMMIT(提交事务,确认操作)、ROLLBACK(回滚事务,撤销操作)、SAVEPOINT(设置事务保存点)

http://www.dtcms.com/a/398733.html

相关文章:

  • 【数据迁移】:oracle 大数据上线失败复盘:【大表定义变更】不一致导致生产数据灌入失败及解决方案
  • InnoDB一致性读与锁定读全解析
  • Oracle归档及数据库存储空间查询
  • 怎么用wordpress建外贸网站华丽的网站模板
  • 如何在Linux系统里将新添加磁盘进行分区挂载
  • 公司网站案例免费域名建站
  • 抓包解析MCP协议:基于JSON-RPC的MCP host与MCP server的交互
  • 一“网”跨协议,万“设”皆可通!耐达讯自动化Modbus TCP转Profibus ,让控制无界,让能源有道。
  • 江门网站优化公司衡水seo网站建设优化排名
  • [2025CVPR-域泛化方向]:通过改进损失景观实现更好的域泛化
  • 网站开发商怎么关闭图片显示公司网站费怎么做分录
  • ABAC权限模型实战:实现“上班才能访问财务系统”!
  • 深入解析:使用递归计算整数各位数字之和的C语言实现
  • 第1章:初识Linux系统——第4节:文件操作命令2
  • 众云网联做的网站效果好吗深圳网站设计公司排名榜
  • wordpress修改教程网站优化制作公司代理
  • 【LeetCode】82. 删除排序排序链表中的重复元素 II
  • 如何设计一个企业级消息推送系统架构?
  • 使用IOT-Tree消息流实现实时数据同步:标签实时数据--关系数据库表
  • 国外做网站公司能赚钱备案网站多长时间
  • 淘宝网站是谁做的好wordpress 分类信息主题
  • Scikit-learn Python机器学习 - 回归分析算法 - 岭回归 (Ridge Regression)
  • 【mysql】内部技术架构
  • 马来西亚股票数据API对接文档
  • 【C++实战㉟】解锁C++面向对象设计:里氏替换原则实战指南
  • 邮件系统的未来趋势:技术革新与智能化的未来
  • 解决MySQL的sql_mode=only_full_group_by错误提示
  • phpcms 网站名称标签建设政协网站的意义
  • 【langgraph】docker镜像查看langraph-api相关版本
  • Datawhale25年9月组队学习:llm-preview+Task3:提示词工程