MySQL 数据库之库操作

文章目录

  • [1. 什么是数据库](#1. 什么是数据库)
  • [2. 基础概念](#2. 基础概念)
    • [2.1 连接数据库](#2.1 连接数据库)
    • [2.2 服务器,数据库,表关系](#2.2 服务器,数据库,表关系)
    • [2.3 SQL分类](#2.3 SQL分类)
  • [3. 库的操作](#3. 库的操作)
    • [3.1 创建,选择,查看数据库](#3.1 创建,选择,查看数据库)
    • [3.2 字符集和默认校验规则](#3.2 字符集和默认校验规则)
  • [3.3 操纵数据库](#3.3 操纵数据库)
      • [3.3.1 数据库查看](#3.3.1 数据库查看)
      • [3.3.2 数据库删除](#3.3.2 数据库删除)
      • [3.3.3 数据库修改](#3.3.3 数据库修改)
  • [4. 其它](#4. 其它)
    • [4.1 备份](#4.1 备份)
    • [4.2 还原](#4.2 还原)
    • [4.3 备份还原注意事项](#4.3 备份还原注意事项)
    • [4.5 查看连接情况](#4.5 查看连接情况)

1. 什么是数据库

使用which mysqlwhich mysqld命令

  1. mysql是数据库服务的客户端
    • mysql 是MySQL数据库的命令行客户端工具,用户可以通过它连接到MySQL服务器并与之交互。它允许用户执行SQL语句来查询、更新和管理数据库。mysql 客户端是用户与MySQL数据库进行通信的接口。
  2. mysqld是数据库服务的服务器端
    • mysqld 是MySQL数据库服务器的守护进程(daemon),它是MySQL服务器的核心,负责处理客户端的连接请求、执行SQL语句、管理数据库文件等。mysqld 运行在后台,监听来自客户端的连接,并处理这些连接上的所有数据库操作。
  3. MySQL数据库是基于C(mysql)和S(mysqld)模式的一种网络服务
    • MySQL遵循客户端/服务器(Client/Server,简称C/S)架构模式。在这种模式下,mysql 客户端和 mysqld 服务器端通过网络进行通信。客户端(如 mysql 命令行工具或其他数据库管理工具)向服务器(mysqld)发送请求,服务器处理这些请求并将结果返回给客户端。这种模式使得MySQL可以支持多用户同时访问和操作数据库,并且可以在不同的机器上运行客户端和服务器,通过网络进行数据交互。

  1. MySQL是一套提供了数据存取的服务的网络程序:

    • MySQL是一个关系型数据库管理系统(RDBMS),它提供了一套完整的数据存取服务。作为一个网络程序,MySQL允许客户端通过网络连接到服务器,执行SQL语句来查询、更新和管理存储在数据库中的数据。
  2. 数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据,也就是将来在磁盘存储的一套数据库方案

    • 数据库是长期存储在磁盘或内存中的、有组织的数据集合。它通常由数据库管理系统(如MySQL、PostgreSQL、Oracle等)来管理。数据库中的数据按照一定的数据模型(如关系模型、文档模型等)组织,以便于存储、检索和管理。
  3. 数据库服务一般指的是类似mysqld这样的程序

    • 这些服务程序负责处理来自客户端的请求,执行SQL语句,管理数据的存储和检索,以及维护数据库的完整性和安全性。数据库服务通常作为守护进程在后台运行,以确保数据库的持续可用性和性能。

一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据内容管理的能力(站在用户的角度上)。

将数据库理解为:是对数据存储的一套解决方案,客户端给服务端字段或者要求,服务端返回结果。

宏观上看,这一堆合起来是数据库

程序员操作的是mysql

2. 基础概念

2.1 连接数据库

c 复制代码
mysql -h -P -u -p
// 例如
mysql -h 127.0.0.1 -P 3306 -u root -p 123456
  • -h:后面跟着的是要连接的主机的IP地址。如果不填写,那么默认连接的是本机(localhost)。
  • -P:后面跟着的是端口号。如果不填写,那么默认使用的是3306端口,这是MySQL的默认端口。
  • -u:后面跟着的是用户名。
  • -p:后面跟着的是密码。注意,-p 后面不需要加空格,直接跟上密码,或者在 -p 后面留有空格,然后紧接着输入密码(这样密码就不会显示在命令行历史中,增加安全性)。

2.2 服务器,数据库,表关系

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

实际上,一个数据库是一个目录,一个表是一个文件

/etc/my.cnf写了默认数据存储位置

2.3 SQL分类

  • DDL【data definition language】 数据定义语言,用来维护存储数据的结构代表指令: create, drop, alter
  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作代表指令: insert,delete
    • updateDML中又单独分了一个DQL,数据查询语言,代表指令: select
  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务代表指令: grant,revoke,commit

3. 库的操作

3.1 创建,选择,查看数据库

创建数据库

如果你需要在创建数据库时指定特定的字符集和校对规则,可以使用以下命令:

sql 复制代码
CREATE DATABASE [IF NOT EXISTS] 数据库名字 [CHARACTER SET 编码集 COLLATE 校对规则];
  • \] 是可选项

    • 编码集定义了数据库中可以存储哪些字符 。不同的编码集支持不同语言的字符,例如,ASCII编码集只支持英文字符,而UTF-8编码集支持多种语言的字符,包括中文、日文、韩文等。
    • 编码集决定了字符数据的存储方式和存储大小 。例如,UTF-8编码的单个字符可以占用1到4个字节,而ASCII编码的字符只占用1个字节。
  • 数据库校验集(Collation)

    • 校验集定义了字符数据的比较规则,包括大小写敏感性、大小写不敏感性、重音符号的处理等。
    • 校验集是编码集的一个子集,它不仅包括编码集的所有字符,还包括了字符比较的规则。
    • 例如,utf8_general_ci是一个大小写不敏感的校验集,而utf8_bin是一个大小写敏感的校验集,它们都基于UTF-8编码集。
    • 校验集的选择会影响字符串比较和排序的结果。在多语言环境中,选择合适的校验集非常重要,以确保数据的正确性和一致性。

总的来说

  • 编码集(Character Set):决定了数据库如何存储字符数据,即数据库中可以存储哪些字符。
  • 校验集(Collation):决定了数据库如何比较和排序字符数据,即如何根据特定的规则读取和处理这些字符。

选择数据库

创建数据库后,你可能想要选择这个数据库以便在其上执行其他操作。可以使用USE语句:

sql 复制代码
USE mydatabase;

查看数据库列表: 如果你想查看所有数据库,可以使用以下命令:

sql 复制代码
SHOW DATABASES;

可以看到一个数据库就是一个目录

3.2 字符集和默认校验规则

查看系统默认字符集以及校验规则

这里的字符集和默认校验规则就是2.1提到的编码集和校验集

sql 复制代码
show variables like 'character_set_database';
show variables like 'collation_database';

查看数据库支持的字符集 和 支持的字符集校验规则

sql 复制代码
show charset;
show collation;

3.3 操纵数据库

3.3.1 数据库查看

前面3.1介绍了SHOW DATABASES;查看当前有多少个数据库,USE mydatabase;可以使用该数据库

如果想知道当前正在使用哪个数据库,可以使用

sql 复制代码
select database();

想要显示创建语句,可以使用

sql 复制代码
show create database 数据库名;
  • 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
  • /*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话

3.3.2 数据库删除

sql 复制代码
DROP DATABASE [IF EXISTS] db_name;

执行该语句后的效果:

  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
  • mysqld内部看不到对应的数据库

一般不要轻易删除数据库,非要删除的话,做好备份

3.3.3 数据库修改

sql 复制代码
ALTER DATABASE database_name CHARACTER SET charset_name COLLATE collation_name;

其中database_name是你要修改的数据库名,charset_name是新的字符集名称,collation_name是新的校验集名称。

4. 其它

4.1 备份

shell 复制代码
mysqldump -u username -p -B 密码 database_name > backup_file.sql
  • username 是你的MySQL用户名。
  • database_name 是你想要备份的数据库名。
  • backup_file.sql 是备份文件的名称,可以指定路径。

可以看到,该文件里面是历史上写的sql语句

4.2 还原

sql 复制代码
mysql > source path
  • path是4.1生成的文件的路径

4.3 备份还原注意事项

  • 如果备份的不是整个数据库,而是其中的一张表

    shell 复制代码
    mysqldump -u root -p 数据库名 表名1 表名2 > backup_file.sql
  • 同时备份多个数据库

    shell 复制代码
    mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
  • 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原

4.5 查看连接情况

sql 复制代码
show processlist
相关推荐
广州智造4 小时前
OptiStruct实例:3D实体转子分析
数据库·人工智能·算法·机器学习·数学建模·3d·性能优化
技术宝哥7 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸9 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1239 小时前
Redis解析
数据库·redis·缓存
数据库幼崽9 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd9 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou10 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh10 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵12 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多12 小时前
Linux——mysql主从复制与读写分离
数据库·mysql