【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原

文章目录

  • 服务器,数据库,表关系
  • MySQL 数据存储逻辑
  • SQL 分类
  • 存储引擎
  • 库的操作
    • 查看数据库
    • 创建数据库
    • 查看创建语句
    • 删除数据库
    • 选择(切换)数据库
    • 查看当前选择的数据库
    • 修改数据库
  • 字符集和排序规则
  • 表的操作
    • 创建表
    • 查询表
    • 查询表结构
    • 插入数据
    • 检索数据
    • 修改表
    • 删除表
  • 备份
  • 还原
  • show processlist

服务器,数据库,表关系

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

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

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第1张图片

mysqld 就是 MySQL 数据库服务器的守护进程程序,它是 MySQL 数据库系统的核心组件之一。mysqld 进程负责监听 MySQL 数据库服务器的端口,接受客户端连接请求,处理 SQL 查询请求,管理数据库文件、表、索引等对象,以及执行各种数据库操作,如备份、恢复、复制等。mysqld 进程在运行时会读取 MySQL 配置文件(通常是 /etc/my.cnf 文件),根据配置文件中的参数设置来决定 MySQL 数据库服务器的行为。

当在系统中安装 MySQL 数据库时,通常会同时安装 mysqld 进程。在 Linux 系统中,可以通过启动、停止、重启 mysqld 进程来控制 MySQL 数据库服务器的启停和重启,常见的命令是 systemctl start/stop/restart mysqld


查看配置文件

cat /etc/my.cnf

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第2张图片

datadir 参数是指定 MySQL 数据库服务器存储数据库文件的目录路径。

建立一个数据库,本质是在 Linux 下建立了一个目录。也就是说,你不仅可以使用 SQL 指令创建数据库,也可以在 datadir 路径下直接新建目录来创建数据库,但是我们不建议这样做。

建立一个表,本质是在 Linux 下建立了一个文件。

MySQL 数据存储逻辑

MySQL 是一个关系型数据库管理系统(RDBMS),它是基于表的。

MySQL 中的表是由列(列名和列的数据类型)和行(具体的数据)组成的,每个表都有一个唯一的表名,并且可以在表中定义索引以提高查询效率。

例:

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第3张图片

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; -- 查看支持的存储引擎

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第4张图片

库的操作

查看数据库

语法

SHOW DATABASES;

该命令将返回所有可用的数据库列表,包括系统默认的数据库和用户创建的数据库。

执行该命令将返回类似如下结果:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| stu                |
+--------------------+

其中,information_schemamysqlperformance_schema 是 MySQL 系统默认的数据库。

创建数据库

语法

CREATE DATABASE [IF NOT EXISTS] database_name [CHARACTER SET charset_name] [COLLATE collation_name];
  • 大写的表示关键字。实际上 SQL 语言对关键字的大小写不敏感,所以平时写 SQL 语句时关键字可大写也可小写。

  • [] 表示可选项。

CREATE DATABASE 用于创建一个新的数据库。

[IF NOT EXISTS] 表示如果该数据库不存在,才执行创建操作,否则将会抛出错误。

database_name 为要创建的数据库的名称,可以使用任意字符,但需要遵循 MySQL 标识符的命名规则。

[CHARACTER SET charset_name] 用于指定数据库的字符集。

[COLLATE collation_name] 用于指定数据库的排序规则。


创建一个名为 mydb 的数据库:

CREATE DATABASE `mydb`;

如果该数据库不存在,则创建一个名为 mydb 的数据库。如果该数据库已经存在,则会返回一个错误。如果需要在创建数据库时指定字符集和排序规则,可以使用以下语句:

CREATE DATABASE IF NOT EXISTS `mydb` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

该语句创建了一个名为 mydb 的数据库,并将其字符集设置为 utf8mb4,排序规则设置为 utf8mb4_unicode_ci。如果该数据库已经存在,则不会执行创建操作。

database_name 通常使用反引号(`)括起来。

在 MySQL 中,使用反引号(`)将标识符括起来可以使其成为一个独立的标识符,即使标识符中包含了空格、关键字或其他特殊字符。


查看创建语句

SHOW CREATE DATABASE 命令,用于显示指定数据库的创建语句。该语句包含了创建数据库时使用的所有参数和选项,包括数据库名、字符集、排序规则等。

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第5张图片

删除数据库

语法

DROP DATABASE [IF EXISTS] database_name;

注意

一旦数据库被删除,所有与之相关的数据都将永久删除。因此,在执行此操作之前,请确保已经备份好需要保留的数据。

选择(切换)数据库

语法

USE database_name;

database_name 是要选择的数据库名称。该语句将使得后续的查询、插入、更新等操作默认在该数据库中进行。

查看当前选择的数据库

使用 DATABASE() 函数

SELECT DATABASE();

该函数不需要任何参数,调用它将返回当前选择的数据库名称。如果当前没有选择任何数据库,则该命令返回 NULL

修改数据库

语法

-- 修改数据库字符集和校验规则
ALTER DATABASE database_name CHARACTER SET character_set_name COLLATE collation_name;

old_database_name 是要修改名称的数据库名称,new_database_name 是新的数据库名称。

database_name 是要修改的数据库名称,character_set_name 是新的字符集名称,collation_name 是新的校验规则名称。

CHARACTER SET 也可以写成 CHARSET=

将名为 test 的数据库的名称修改为 new_test

ALTER DATABASE test RENAME TO new_test;

test 数据库的字符集修改为 utf8mb4,校验规则修改为 utf8mb4_general_ci

ALTER DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

注意

修改数据库的字符集和校验规则会影响所有表格和列的字符集和校验规则。因此,在执行 ALTER DATABASE 命令之前,请确保已经备份了所有数据,并且了解修改操作可能带来的风险。

ALTER不支持修改数据库名

MySQL 修改数据库名称比较麻烦,不支持直接修改,需要通过其它方式间接达到修改数据库名称的目的。

在 MySQL 5.1.23 之前的旧版本中,我们可以使用 RENAME DATABASE 来重命名数据库,但此后版本,因为安全考虑,删掉了这一条命令。

上面说过,可以通过在 datadir 下创建目录来创建数据库,那么当然也可以在 datadir 下直接修改目录名,但是我们不建议这样做。

字符集和排序规则

要查看 MySQL 实例的默认字符集和排序规则,可以使用以下命令:

SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第6张图片

字符集和排序规则在 MySQL 中非常重要,因为它们直接影响到数据库中存储和处理的数据。

字符集决定了数据库中可以存储哪些字符以及如何存储这些字符。不同的字符集支持不同的字符,如 ASCII 字符集只支持英文字母和数字,而 UTF-8 字符集支持更广泛的字符范围,包括不同语言的文字和符号等。同时,字符集还定义了每个字符的编码方式,以确保数据可以在不同的系统和应用程序之间正确地传输和处理。

排序规则决定了在对数据库中的字符数据进行排序时使用哪种规则。这是因为不同的字符集和语言中,字符的排序方式可能是不同的。例如,在中文中,字符的排序方式是根据拼音排序,而在英文中则是按照字典序排序。如果没有正确地设置排序规则,就可能导致排序结果不准确或不符合预期。

因此,字符集和排序规则对于正确存储和处理数据库中的字符数据非常重要,尤其是在涉及多语言和多字符集的应用程序中。在 MySQL 中,通过设置合适的字符集和排序规则,可以确保数据库中的数据可以正确地存储、传输和处理。

:

在“创建数据库”的语法中我们注意到,在创建数据库时可以指定字符集和排序规则,但是通常我们不这样做。因为不需要指定,它就会使用我们已经配置好的默认字符集和排序规则。

表的操作

创建表

语法

CREATE TABLE [IF NOT EXISTS] table_name (
  column1 datatype constraints,
  column2 datatype constraints,
  ...
  columnN datatype constraints
) [CHARSET=字符集] [COLLATE=校验规则] [ENGINE=存储引擎];

table_name 是要创建的表格名称。

column1columnN 是表格的列名。

datatype 是列数据类型。

constraints 是列的约束条件,如默认值、非空、唯一性等。

最后一行指定字符集,校验规则,存储引擎是可选项

创建一个名为 students 的表格,包含 idnamegender 三个字段,可以使用以下命令:

CREATE TABLE students (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  gender ENUM('M', 'F') DEFAULT 'M'
);

idnamegender 三个字段,分别使用了 INTVARCHARENUM 三种数据类型。其中,id 是主键,name 不允许为空,gender 有默认值 ‘M’,且只能取值为 ‘M’ 或 ‘F’。

执行该命令后,如果创建成功,系统会提示 Query OK, 0 rows affected,表示成功创建了一个名为 students 的表格。如果创建失败,系统会给出相应的错误提示信息。

注:使用 comment 注释表和列

在 MySQL 中,可用 comment 注释表和列,可以用来记录该表或列的作用、用途、限制、注意事项等信息。

例如,在创建一个名为 employees 的表时,可以添加一个注释来描述该表的作用:

CREATE TABLE employees (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  hire_date DATE,
  salary DECIMAL(10,2),
  comment '员工信息表'
);

使用 SHOW CREATE TABLE 命令可以查看表的详细信息,包括注释信息。例如:

SHOW CREATE TABLE employees;

输出结果如下:

CREATE TABLE `employees` (
  `id` int(11) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `hire_date` date DEFAULT NULL,
  `salary` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工信息表'

在列中添加注释的方式与上面类似,只需要在列定义后面添加 COMMENT 关键字即可。

查询表

在选择了数据库后,使用

SHOW TABLES;

查询表结构

语法

DESC table_name;

执行 DESC 命令后,MySQL 会返回该表格的列信息,如列名、数据类型、是否允许为空、默认值等。

查询刚才创建的 students 表格

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第7张图片

该输出表格中的每一行表示一个列的信息,包括 Field(列名)、Type(数据类型)、Null(是否允许为空)、Key(键类型)和 Default(默认值),Extra 表示该列的一些额外信息,如自增长属性、虚拟列等。如果某个字段不允许为空,则其 Null 列显示 NO;如果该字段为主键,则其 Key 列显示 PRI

插入数据

语法

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

table_name 表示要插入数据的表格名称。

column1, column2, column3, ... 列出了要插入数据的列名称。

value1, value2, value3, ... 对应了这些列要插入的值。

students 表格中插入一条记录,包括 idnamegender 三个列,可以使用以下语句:

INSERT INTO students (id, name, gender)
VALUES (1, 'Alice', 'F');

这条语句会向 students 表格中插入一条 id 为 1、name'Alice'gender'F' 的记录。如果不指定列名称,可以省略列名列表,如下所示:

INSERT INTO students
VALUES (1, 'Alice', 'F');

这条语句与上述语句等价,因为 students 表格中的列顺序与指定的值的顺序一致。不过不建议这样写,上面的写法不容易出错,同时可以使代码更加易于维护。

检索数据

SELECT 语句用于从一个或多个表中检索数据。

语法

SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name ASC|DESC;

column1, column2, ... 列出了要检索的列名称,可以使用通配符 * 表示所有列。

table_name 指定了要检索数据的表格名称。

WHERE condition 是可选的,表示用于筛选要检索的行的条件,可以使用比较运算符、逻辑运算符、通配符等进行筛选。

ORDER BY column_name ASC|DESC 是可选的,表示按照指定列进行升序或降序排列。

从名为 student 的表格中检索所有列

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第8张图片

只检索 namegender 两列,并且只需要检索 gender'F' 的记录

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第9张图片

students 表格按照 id 列进行降序排列:

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第10张图片

以上只是 SELECT 语句的一些基本用法,实际上 SELECT 语句有很多高级用法,如聚合函数、子查询、连接查询等,这些我们会在后面的章节中进行讲解。

修改表

-- 添加一列
ALTER TABLE 表名 ADD 列名 数据类型;

-- 修改列的数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;

-- 修改列名
ALTER TABLE 表名 CHANGE 原列名 新列名 数据类型;

-- 删除列
ALTER TABLE 表名 DROP 列名;

-- 添加主键
ALTER TABLE 表名 ADD PRIMARY KEY (列名);

-- 添加唯一索引
ALTER TABLE 表名 ADD UNIQUE (列名);

-- 添加普通索引
ALTER TABLE 表名 ADD INDEX (列名);

-- 删除索引
ALTER TABLE 表名 DROP INDEX 索引名;

-- 修改表名
ALTER TABLE 旧表名 RENAME TO 新表名; -- TO可省略

-- 修改存储引擎
ALTER TABLE 表名 ENGINE=存储引擎名称;

-- 修改表的字符集和校对规则
ALTER TABLE 表名 CONVERT TO CHARACTER SET 字符集名称 COLLATE 校对规则名称;

删除表

DROP TABLE [IF EXISTS] table_name [, table_name] ... [RESTRICT | CASCADE];
  • IF EXISTS:可选项,表示在删除表时,如果表不存在则不会报错。
  • table_name:需要删除的表的名称,支持同时删除多个表,用逗号隔开。
  • RESTRICT:可选项,表示在删除表时,如果有其他对象依赖于该表,则不会删除该表。
  • CASCADE:可选项,表示在删除表时,同时删除依赖于该表的对象。

备份

使用 mysqldump 工具备份

mysqldump 是一个命令行工具,可以用来备份 MySQL 数据库。

语法

mysqldump -u [用户名] -p [密码] [数据库名] > [备份文件路径]

[用户名][密码] 分别是要使用的 MySQL 用户名和密码

[数据库名] 是要备份的数据库名称,[备份文件路径] 是备份文件的保存路径。

[数据库名] 可以带 -B 选项,这样在还原数据库时,不需要先创建空的数据库。

备份名为 test 的数据库,可以使用以下命令:

mysqldump -u root -p test > /home/user/test_backup.sql

本质上

mysqldump 本质上是通过生成一组 SQL 语句来备份数据库中的数据和结构。备份时,mysqldump 会将数据库中所有的表结构和数据导出为一组 SQL 语句,并将这些语句保存到一个文本文件中。在需要恢复数据时,可以使用这个文本文件来重新创建数据库,并将数据导入到新创建的数据库中。

打开备份的文件,类似于这样:

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第11张图片

  • 如果你只想备份一个数据库中的特定几个表,可以使用 mysqldump 命令的 --tables 参数指定要备份的表名,语法如下:
mysqldump -u username -p --tables database_name table1 table2 table3 > backup_file.sql
  • 同时备份多个数据库
mysqldump -u username -p --databases db1 db2 db3 > backup_file.sql
  • 如果备份一个数据库时,没有带上 -B 参数,在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用 source 来还原。

还原

source命令是 MySQL 客户端工具中的一个命令,用于在当前 MySQL 连接中执行指定的 SQL 脚本文件。

基本步骤:

  1. 选择要执行脚本文件的数据库。

    use database_name;
    
  2. 使用source命令执行 SQL 脚本文件,也就是我们刚刚用 mysqldump 备份出来的 sql 文件。

    source /path/to/script.sql;
    

    /path/to/script.sql是要执行的SQL脚本文件的路径。

进入一个空的数据库

img

执行备份文件,会显示许多 Query OK

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第12张图片

查询表,表结构,检索数据,发现数据还原成功

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第13张图片

show processlist

SHOW PROCESSLIST 命令用于显示当前 MySQL 服务器上正在执行的所有连接和相应的进程列表。

【MySQL】(1)数据库基础,库与表的增删查改,数据库的备份与还原_第14张图片

上述结果中,每一行代表一个MySQL连接和进程的信息,其中Id表示连接ID,User表示连接的用户名,Host表示连接的主机名,db表示当前连接正在使用的数据库名,Command表示当前连接正在执行的命令,Time表示连接已经持续的时间(单位为秒),State表示当前连接的状态,Info表示当前连接正在执行的SQL语句或命令。

你可能感兴趣的:(MySQL数据库,数据库,mysql,服务器,linux)