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

【MySQL】MySQL基础

目录

什么是数据库

主流数据库

基本使用

连接和退出

创建数据库

使用数据库

创建数据库表

表中插入数据

查询表中的数据

mysql的架构

SQL 语句分类

存储引擎


什么是数据库

存储数据用文件就可以了,为什么还要弄个数据库? 因为文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据的增删改查:一般文件确实提供了数据的存储和基本的读写功能,但对文件内容做增删改查,如果没有数据库,程序员要自己写代码做增删改查,不方便,有时候甚至不可能完成,而有了数据库,只需要告诉它需求,它自动完成
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。数据库一般指的是:在磁盘或内存中存储的特定结构组织的数据。

[root@VM-16-12-centos mysql]# which mysql /usr/bin/mysql [root@VM-16-12-centos mysql]# which mysqld /usr/sbin/mysqld

上面的 mysql 是 mysql 的客户端,mysqld 是 mysql 的服务端。mysql 的本质是一种基于 C(mysql) S (mysqld) 模式的一种网络服务。

[root@VM-16-12-centos mysql]# netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 0 0 :::3306 :::* LISTEN 22085/mysqld

主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

基本使用

连接和退出

mysql -h 127.0.0.1 -P 3306 -u root -p

参数解释:

参数含义在本命令中的值
-h指明 host(主机地址)127.0.0.1—— 本机回环地址,即连接本地的 MySQL 服务
-P指明 port(端口号,大写 P)3306—— MySQL 默认监听端口
-u指明 user(用户名)root—— MySQL 的超级管理员账户
-ppassword(密码,小写 p)后不跟具体密码,执行后会提示你交互式输入(更安全,避免密码暴露在命令行历史中),-p后直接跟密码(如-p123456)也是允许的,但不安全,因为密码会明文留在命令历史中。

注意:

-h-P如果省略,默认就是127.0.0.13306,所以本命令等效于简写:

mysql -u root -p

链接成功后,在 mysql 的命令行输入 quit 即可退出

[root@VM-16-12-centos mysql]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.44 MySQL Community Server (GPL) Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> quit Bye

创建数据库

链接数据库后,输入:(注意 mysql 指令要用 ; 作为结尾)

show databases;

结果:

+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)

退出 mysql 使用 vim 查看 /etc/my.cnf:

[mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid skip-grant-tables character-set-server=utf8 default-storage-engine=innodb

这就是 mysql 的配置文件,其中:datadir=/var/lib/mysql 就是数据库的存储目录,我们查看这个目录下的文件:

[root@VM-16-12-centos mysql]# ls /var/lib/mysql auto.cnf client-cert.pem ibdata1 ibtmp1 mysql.sock.lock public_key.pem sys ca-key.pem client-key.pem ib_logfile0 mysql performance_schema server-cert.pem ca.pem ib_buffer_pool ib_logfile1 mysql.sock private_key.pem server-key.pem

我们发现 mysql 现在的数据库其实就是 /var/lib/mysql 的子目录。

我们再链接上 mysql ,输入:

create database helloworld;
mysql> create database helloworld; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | helloworld | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)

再退出 mysql 查看 /var/lib/mysql:

[root@VM-16-12-centos mysql]# ls /var/lib/mysql auto.cnf client-cert.pem ib_buffer_pool ib_logfile1 mysql.sock private_key.pem server-key.pem ca-key.pem client-key.pem ibdata1 ibtmp1 mysql.sock.lock public_key.pem sys ca.pem helloworld ib_logfile0 mysql performance_schema server-cert.pem

发现多了 helloworld 这一目录,说明创建数据库的本质就是创建 Linux 文件目录,我们查看helloworld 这一目录:

[root@VM-16-12-centos mysql]# ls /var/lib/mysql/helloworld db.opt

使用数据库

链接上 mysql 后,上面输入 show databases; 后,展示了 information_schema、mysql、performance_schema、sys,和我们自己创建的 helloworld 等等数据库,输入:

use helloworld;

可以对开始特定的数据库进行操作。

创建数据库表

上面选择 helloworld 这个数据库后,输入:

create table student( id int, name varchar(32), gender varchar(2) );

查看 /var/lib/mysql/helloworld:

[root@VM-16-12-centos mysql]# ls /var/lib/mysql/helloworld db.opt student.frm student.ibd

与上面相比,多了 student.frm student.ibd 这两个文件,说明创建数据库表本质就是创建 Linux 目录下的文件

表中插入数据

在 mysql 命令行输入:

insert into student (id, name, gender) values (1, '张三', '男'); insert into student (id, name, gender) values (2, '李四', '女'); insert into student (id, name, gender) values (3, '王五', '男');

查询表中的数据

select * from student;

mysql的架构

逻辑架构(四层结构)

MySQL 采用客户端/服务器模式,从你输入命令到返回结果,经历了下面这几层:

SQL 语句分类

  • DDL【data definition language】 数据定义语言,用来维护存储数据的结构

代表指令: create, drop, alter

  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作

代表指令: insert,delete,update
DML中又单独分了一个DQL,数据查询语言,代表指令: select

  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务

代表指令: grant,revoke,commit

存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL的核心就是插件式存储引擎,支持多种存储引擎。

查看存储引擎

show engines \G
mysql> show engines \G *************************** 1. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keys Transactions: YES XA: YES Savepoints: YES *************************** 2. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tables Transactions: NO XA: NO Savepoints: NO *************************** 3. row *************************** Engine: MEMORY Support: YES Comment: Hash based, stored in memory, useful for temporary tables Transactions: NO XA: NO Savepoints: NO *************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears) Transactions: NO XA: NO Savepoints: NO *************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engine Transactions: NO XA: NO Savepoints: NO *************************** 6. row *************************** Engine: CSV Support: YES Comment: CSV storage engine Transactions: NO XA: NO Savepoints: NO *************************** 7. row *************************** Engine: ARCHIVE Support: YES Comment: Archive storage engine Transactions: NO XA: NO Savepoints: NO *************************** 8. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance Schema Transactions: NO XA: NO Savepoints: NO *************************** 9. row *************************** Engine: FEDERATED Support: NO Comment: Federated MySQL storage engine Transactions: NULL XA: NULL Savepoints: NULL 9 rows in set (0.00 sec)

InnoDB(默认引擎,MySQL 5.5+)

绝对的主流,99%的业务场景都用它。

特性说明
事务完整支持 ACID,有COMMITROLLBACK、崩溃恢复
锁粒度行级锁(Row-Level Lock),高并发下性能好
外键支持外键约束,保证数据一致性
索引使用B+ 树,数据和索引存储在一起(聚簇索引)
MVCC多版本并发控制,实现非阻塞读,提高并发性能
物理文件.ibd文件(数据和索引)、ib_logfile(重做日志)

适用场景:几乎一切事务型业务——电商订单、用户账户、支付系统、内容管理系统。

MyISAM(MySQL 5.5 之前的默认引擎)

老牌引擎,现在已边缘化,但仍有很多历史遗留系统在用。

特性说明
事务❌ 不支持
锁粒度表级锁(Table-Level Lock),写操作会锁整张表
外键❌ 不支持
索引使用 B+ 树,但数据和索引分开存储(非聚簇索引)
压缩支持表压缩,可大幅节省空间
物理文件.frm(表结构)、.MYD(数据)、.MYI(索引)

优点:读操作极快,占用空间小。
缺点:写操作锁表,并发差;崩溃后难以恢复。

适用场景:纯只读报表、数据仓库、日志分析(几乎不写入的场景)。

Memory(内存引擎)

数据全部存在内存中,重启即丢失。

特性说明
存储位置内存(RAM),读写极快
持久化❌ 不持久,服务重启数据全丢
锁粒度表级锁
索引默认使用 Hash 索引(也支持 B 树)
适用数据量小数据量(受max_heap_table_size限制)

适用场景:临时表、缓存表、会话数据、高频查询的字典表(如省市区编码)。

Archive(归档引擎)

特性说明
压缩比极高,以 zlib 压缩存储
操作只支持INSERTSELECT,不支持UPDATE/DELETE
索引只支持自增主键索引
锁粒度行级锁

适用场景:日志归档、审计记录、历史数据冷存储。

其他引擎(了解即可)

引擎特点场景
CSV数据存为 CSV 文件与 Excel/外部系统交换数据
Blackhole写入的数据直接丢弃(黑洞)用于主从复制中的中继,或性能测试
Federated访问远程 MySQL 表,不存本地数据数据联邦查询(现较少用)

对比总结(面试重点)

对比维度InnoDBMyISAMMemory
事务
行级锁❌(表锁)❌(表锁)
外键
崩溃恢复✅(通过 Redo Log)
MVCC
数据与索引存储聚簇(在一起)非聚簇(分开)非聚簇
全文索引✅(5.6+支持)
空间占用较大较小极小(内存)
适用场景事务型OLTP只读报表临时缓存
http://www.jsqmd.com/news/1135373/

相关文章:

  • NVIDIA RTX Spark:重新定义AI PC,开启个人智能体时代
  • 从入门到精通:渗透测试核心技能与实战路径全解析
  • 软件配置管理(SCM)中常见的三库模型(受控库、开发库、产品库),其核心作用是实现配置项的版本控制与生命周期管理
  • LP5812与PIC18LF26K80实现RGB LED智能控制方案
  • DFT/FFT 频谱泄露对比:4种N值设置对频率分辨率与幅值精度的影响分析
  • AI 设计 Token 校验:颜色对了,语义也不能乱
  • 终极BetterJoy使用指南:免费解锁Switch控制器PC全平台兼容方案
  • windows网络适配器驱动开发-网络数据缓冲区管理
  • AI 导出鸭一站式工具:Claude 做 word 文档规避导出难题
  • 于 Simulink 的双向 DC-DC 变换器在恒压(CV)与恒流(CC)模式下的切换仿真
  • 5个理由告诉你为什么Notepad--应该是你的首选跨平台文本编辑器
  • 抖音内容批量下载全攻略:开源工具助你高效获取无水印素材
  • 28. 【C语言】通用数据操作:`void *` 与类型无关编程
  • 编排模式:中央协调 + 子任务分配
  • deepseek 导出遇格式难题?AI 导出鸭轻松实现高效无损文档导出
  • AI 复制内容带乱码太糟心?AI 导出鸭一键解决格式错乱与乱码难题
  • 云原生 AI 推理弹性:GPU 扩容慢,要先设计预热池
  • 让老旧安卓电视焕发新生:MyTV-Android开源电视直播应用完全指南
  • 做 excel 表格用哪个 deepseek 软件文档导出不用反复调整?AI 导出鸭稳定高效,完美适配 Excel 生成与导出需求
  • 个人介绍及学习目标
  • 【AAAI 2026】VQAThinker:通过RL进行可解释VQA训练
  • LRU Cache:面试必考设计题
  • 深度探索C++对象模型 学习笔记 第七章 站在对象模型的尖端(1)
  • 校园一卡通安全策略研究​​​​​​​
  • 向下普及L2+、向上攻坚L4,被技术与商业双重夹击的L3自动驾驶何去何从
  • 5分钟搭建终极DNS转发器:mosdns完整实战指南
  • RocketMQ 基础知识全解析:从入门到理解
  • Audrey MCP 服务说明文档
  • Windows平台HEIC格式转换终极指南:HEIF Utility完整解决方案
  • 极简 API 网关:手写一个支持限流和断路器的轻量反向代理