数据库基础认识

1. 数据库基础

什么是数据库?在安装 mysql 服务器时,mysql 是数据库服务的客户端mysqld 是数据库服务的服务端

bash 复制代码
xay@hcss-ecs-3ea8:~/MYSQL$ which mysql
/usr/bin/mysql
xay@hcss-ecs-3ea8:~/MYSQL$ which mysqld
/usr/sbin/mysqld

mysql 本质就是基于C(mysql)S(mysqld)模式的一种网络服务。

既然是个网络服务,也就能够通过 netstat -lntp 指令查看到:

bash 复制代码
tcp6       0      0 :::3306                 :::*                    LISTEN      1902810/mysqld
tcp6       0      0 ::1:6010                :::*                    LISTEN      2003832/sshd: root@
tcp6       0      0 :::33060                :::*                    LISTEN      1902810/mysqld

mysql是一套给用户提供数据存取服务的网络程序。

我们口头上所说的"数据库",一般指的的是,在磁盘/内存中存储的特定结构组织的数据,以及在磁盘上存储的一套数据库方案。而"数据库服务"特指的就是mysqld


存储数据用文件就可以了,为什么还要弄个数据库?

普通的文件确实提供了数据存储功能,但并没有提供很好的数据内容管理能力(从用户的角度看)。例如:一个文件中存储了 10 万个 IP 地址,我想要统计当前文件中有几个以 198 开头的 IP 地址,以及它们分别是什么------这个数据提取与分析的过程,需要用户自己编程完成,文件本身并不提供这样的管理能力。

文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

数据库的存储介质: 磁盘和内存

为了解决上述问题,专家们设计出了更利于管理数据的东西 ------ 数据库 。它能更有效地管理数据。

数据库本质上是对数据内容存储的一套解决方案:用户向数据库提供字段/查询要求,数据库直接返回结果。


2. 数据库的基本使用

连接服务器

指令:mysql -h ip -P port -u 用户名 -p(mysql -h 127.0.0.1 -P 3306 -u root -p)

-h:指明连接的主机,-P:指明主机上的port端口号,-u:指明登录的用户,-p:密码

bash 复制代码
xay@hcss-ecs-3ea8:~/MYSQL$ mysql -h 127.0.0.1 -P 3306 -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 26
Server version: 8.0.46 MySQL Community Server - GPL

Copyright (c) 2000, 2026, 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.

输入 quit/exit 退出连接。

可以直接去掉 -h 选项,表示默认连接本地服务器上搭建的mysql服务。去掉 -p 选项,表示使用默认配置的端口号3306。所以一般连接数据库服务器时,一般输入 mysql -u root -p 指令。


先具体的看看什么是数据库。

在命令行输入:show databases; 查看当前系统下创建的数据库:

bash 复制代码
mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| sys                 |
+---------------------+
4 rows in set (0.02 sec)

这些数据库在哪?它们存储在 /var/lib/mysql 路径下:

bash 复制代码
root@hcss-ecs-3ea8:/# cd /var/lib/mysql
root@hcss-ecs-3ea8:/var/lib/mysql# ls
auto.cnf                ca.pem                  ibtmp1                  public_key.pem
binlog.000001           client-cert.pem         '#innodb_redo'          server-cert.pem
binlog.000002           client-key.pem          '#innodb_temp'          server-key.pem
binlog.000003           debian-5.7.flag         mysql                   sys
binlog.000004           '#ib_16384_0.dblwr'     mysql.ibd               undo_001
binlog.000005           '#ib_16384_1.dblwr'     mysql_upgrade_info      undo_002
binlog.index            ib_buffer_pool          performance_schema
ca-key.pem              ibdata1                 private_key.pem

创建数据库:create database 库名;

bash 复制代码
mysql> create database helloworld;
Query OK, 1 row affected (0.01 sec)

创建 helloworld 数据库后,在 /var/lib/mysql 路径下会看到一个名为 helloworld 的目录。

bash 复制代码
root@hcss-ecs-3ea8:/var/lib/mysql# ls
auto.cnf                ca.pem                  ibdata1                 private_key.pem
binlog.000001           client-cert.pem         ibtmp1                  public_key.pem
binlog.000002           client-key.pem          '#innodb_redo'          server-cert.pem
binlog.000003           debian-5.7.flag         '#innodb_temp'          server-key.pem
binlog.000004           helloworld              mysql                   sys
binlog.000005           '#ib_16384_0.dblwr'     mysql.ibd               undo_001
binlog.index            '#ib_16384_1.dblwr'     mysql_upgrade_info      undo_002
ca-key.pem              ib_buffer_pool          performance_schema

输入 show databases; 可以查看到它:

cpp 复制代码
mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| helloworld          |
| information_schema  |
| mysql               |
| performance_schema  |
| sys                 |
+---------------------+
5 rows in set (0.01 sec)

总结:建立数据库,本质就是Linux下的一个目录


3. 数据库表结构

数据库一般都有表结构,要建立表结构,需要选中一个数据库:use 库名

建立数据库表:create table 表名(列名 数据类型,列名 数据类型,......)

bash 复制代码
mysql> create table student(
    -> id int,
    -> name varchar(32),
    -> gender varchar(2)
    -> );
Query OK, 0 rows affected (0.03 sec)

数据库表建立成功后,在 helloworld 数据库中,就可以在该路径下看到 student.ibd 这样的文件:

bash 复制代码
root@hcss-ecs-3ea8:/var/lib/mysql/helloworld# ls
student.ibd

在数据库内建表,本质就是在Linux下创建对应的文件

表结构有了,向表结构插入数据:insert into 数据库名 (列名,......) values(插入的值),插入的值必须与在创建表结构时,列名的数据类型所对应,如 id 列是int类型,插入数据时不能是浮点型。

bash 复制代码
mysql> insert into student (id, name, gender) values('202652', '张三', '男');
Query OK, 1 row affected (0.01 sec)

mysql> insert into student (id, name, gender) values('202653', '李四', '女');
Query OK, 1 row affected (0.00 sec)

mysql> insert into student (id, name, gender) values('202653', '王五', '男');
Query OK, 1 row affected (0.00 sec)

数据插入完毕后,输入 select * from 表名; 查看表结构:

bash 复制代码
mysql> select * from student;
+--------+--------+--------+
| id     | name   | gender |
+--------+--------+--------+
| 202652 | 张三   | 男     |
| 202653 | 李四   | 女     |
| 202653 | 王五   | 男     |
+--------+--------+--------+
3 rows in set (0.00 sec)

建立一个数据库,建立一张表结构,插入数据,这些工作都是**mysqld(mysql服务端)**帮助我们完成的,不需要程序员手动操作文件。


4. 服务器,数据库,表之间的关系

安装数据库服务器,只是在机器上安装了一个数据库管理系统程序(mysqld),这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

数据库服务器、数据库和表的关系如下:

上图中的**"Client"指的是mysql客户端** ,"MYSQL"指的是mysqld服务端


5. MYSQL架构

数据库是行列式结构,以行列式的结构存储数据。

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、 Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。


6. 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


7. 存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎。

输入 show engines; 可以查看当前支持的存储引擎:

bash 复制代码
mysql> show engines \G
*************************** 1. row ***************************
      Engine: ndbcluster
     Support: NO
     Comment: Clustered, fault-tolerant tables
Transactions: NULL
          XA: NULL
  Savepoints: NULL
*************************** 2. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 4. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
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: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NO
          XA: NULL
  Savepoints: NULL
*************************** 7. row ***************************
      Engine: ndbinfo
     Support: NO
     Comment: MySQL Cluster system information storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
*************************** 8. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 9. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 10. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 11. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
11 rows in set (0.01 sec)

每个存储引擎都有它所对应的功能,大部分情况下,mysql常用的存储引擎就两个:InnoDB和MyISAM,其中80% 使用的是InnoDB。

相关推荐
看我干嘛!1 小时前
Redis安装
数据库·redis·缓存
2401_824697661 小时前
如何管理Oracle服务器的内核共享内存_shmmax与shmall计算
jvm·数据库·python
2301_783848651 小时前
mysql数据迁移过程如何降低性能影响_采用增量备份与多线程同步
jvm·数据库·python
【心态好不摆烂】1 小时前
MySQL——表的约束(上)
数据库·mysql
小娄~~1 小时前
IO模型与并发服务器
运维·服务器·数据库
2401_884454151 小时前
CSS如何快速实现网站换肤功能_利用CSS变量重置全局颜色方案
jvm·数据库·python
fengxin_rou2 小时前
数据库三大范式深度详解:数据表设计规范化实战指南
数据库·mysql·范式
2301_809244532 小时前
PHP函数是否支持调用FPGA设备_PHP与FPGA硬件交互的实现方式【教程】
jvm·数据库·python
li星野2 小时前
Function Call 完全指南:让大模型从“聊天”到“行动”
数据库·oracle