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 校对规则];
  • [] 是可选项

  • 数据库编码集(Character Set)

    • 编码集定义了数据库中可以存储哪些字符 。不同的编码集支持不同语言的字符,例如,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
相关推荐
云和数据.ChenGuang1 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi1 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据2 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi3 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀3 小时前
Redis梳理
数据库·redis·缓存
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天4 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺4 小时前
分布式系统架构:服务容错
数据库·架构
独行soc5 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘