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

news2024/10/6 14:33:27

文章目录

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

服务器,数据库,表关系

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

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

img

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

img

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

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

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

MySQL 数据存储逻辑

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

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

例:

img

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

img

库的操作

查看数据库

语法

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 命令,用于显示指定数据库的创建语句。该语句包含了创建数据库时使用的所有参数和选项,包括数据库名、字符集、排序规则等。

img

删除数据库

语法

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_%';

img

字符集和排序规则在 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 表格

img

该输出表格中的每一行表示一个列的信息,包括 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 的表格中检索所有列

img

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

img

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

img

以上只是 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 语句,并将这些语句保存到一个文本文件中。在需要恢复数据时,可以使用这个文本文件来重新创建数据库,并将数据导入到新创建的数据库中。

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

img

  • 如果你只想备份一个数据库中的特定几个表,可以使用 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

img

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

img

show processlist

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

img

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2、Git使用不完全指南:Git客户端的使用及使用Token认证方式提交代码详解(详细图文)

本篇介绍如何在Windows、Linux下安装Git客户端以及从远程代码仓库拉取代码。以及介绍2023如何从GitHub上获取Token令牌、使用Pycharm通过Token令牌从本地push上传仓库的方法,用来解决推送代码报Push failed The requested URL returned error:403的错误问题。 安装…

通讯录的实现(初级版本)

思维导图: 目录 思维导图: ​编辑 一,实现通讯录的第一步——实现逻辑 二,头文件内实现的内容 三,contect.c文件内的函数定义 3.1初始化通讯录:void InitContect(cotect*pc) 3.2:实现通讯录内容的增加&#xff…

投稿指南【NO.14】SCI期刊推荐(mdpi旗下)

写在前面:SCI论文发表是我国高校机构与基地评估、成果评奖、项目立项、人才培养等方面的重要考核指标,更不要要说关系到我们个人的毕业、晋升和前途。SCI含金量之高,要是读研读博科研工作期间能发表,将对直博、找工作、国奖申请、…

04 | 连接池:别让连接池帮了倒忙

04 | 连接池:别让连接池帮了倒忙 连接池一般对外提供获得连接、归还连接的接口给客户端使用,并暴露最小空闲连接数、最大连接数等可配置参数,在内部则实现连接建立、连接心跳保持、连接管理、空闲连接回收、连接可用性检测等功能。 注意鉴…

MySQL 主从同步及延迟原因分析

主从同步的基本原理 MySQL主从同步步骤详见 MySQL binlog模式及主备的基本原理 谈到主备的并行复制能力,我们要关注的是图中黑色的两个箭头。一个箭头代表了客户端写入主库,另一箭头代表的是从库上sql_thread执行中转日志(relay log&#xff…

《Squeeze-and-Excitation Networks》

Squeeze-and-Excitation Networks1. 摘要2. 介绍3. 网络设计4. 代码实现1. 摘要 卷积操作可以使网络通过在每层的局部感受野内融合空间和通道级信息以构建信息特征;空间信息尝试通过加强CNN整个特征层次的空间编码质量以加强CNN的表示能力;本文主要聚焦…

【计算机网络-应用层】万维网

文章目录1 统一资源定位符 URL2 万维网文档2.1 超文本标记语言 HTML2.2 层叠样式表 CSS2.3 JavaScript3 超文本传输协议 HTTP3.1 HTTP 报文格式3.1.1 HTTP 请求报文3.1.2 HTTP 响应报文3.2 HTTP 的工作过程3.2.1 HTTP/1.03.2.2 HTTP/1.13.2.3 相关例题4 Cookie1 统一资源定位符…

如何从根本上防止服务器被攻击

随着互联网的发展,服务器成为了企业和个人网络应用的重要基础设施。但是,随之而来的网络安全威胁也在不断增加,服务器安全问题也成为了影响企业信息安全的重要因素。针对这种情况,服务器安全防御变得尤为重要。   服务器安全防御…

6.Swagger的实战使用

六.Swagger的实战使用 1.什么是swagger 2.swagger的基本使用 3.swagger实战使用 六.Swagger的实战使用 1.什么是swagger swagger是后端接口文档的生成并且提供ui界面进行测试过去用postman测试 缺点:需要自己写地址,如果项目变了需要自己更改 2.sw…

CF区间DP作业题解

1. Recovering BST 由于互质关系不是传递的,所以尽量挂在树的最下面,刚好构成二叉树 f[i][j][0]f[i][j][0]f[i][j][0] 表示区间 [i,j][i,j][i,j] 以 iii 为根,是否可以构成一棵树。 f[i][j][1]f[i][j][1]f[i][j][1] 表示区间 [i,j][i,j][i,j…

Spring理论学习

1、什么是IOC IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Spring 特有,…

阿里通义千问、ChatGPT和文心一言有何区别,在哪里能使用?

目前,聊天机器人技术在人工智能领域的发展越来越成熟了。现在已经有几款备受关注的聊天机器人产品问世,例如ChatGPT、阿里的通义千问和百度的文心一言。它们有什么区别,怎么使用呢? 其实,我也挺好奇的,毕竟…

人人拥有ChatGPT的时代来临了,这次微软很大方!

技术迭代的在一段时间内是均匀发展甚至止步不前的,但在某段时间内会指数级别的爆发。 ChatGPT背后的GPT 3.5训练据说花了几百万美金外加几个月的时间,参数大概有1700多亿。 这对于绝大多数的个人或企业来说绝对是太过昂贵的。 然而,微软&am…

月薪过 3w 的 软件测试工程师 都是怎么做到的?

对任何职业而言,薪资始终都会是众多追求的重要部分。前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经基本饱和。 当然,我说的是最基础的功能测试的岗…

如何使用双轴XY平台绘制正弦曲线

1. 功能说明 本文示例将实现双轴XY平台绘制正弦曲线的功能。 2. 电子硬件 在这个示例中,采用了以下硬件,请大家参考: 主控板 Basra主控板(兼容Arduino Uno) 扩展板 Bigfish2.1扩展板 SH-ST步进电机扩展板 电池11.1V动…

跟着原子学I2C

I2C通讯 1、IIC总线介绍 集成电路总线,是一种同步串行半双工通信总线。 总线or协议?! 总线是数据传输通道,协议是数据传输规则。 1、1介绍 a、由时钟线SCL和数据线SDA组成,并且都接上拉电阻,确保总线空…

UDP套接字

大家好,又见面了,🎉🎉🎉🌸🌸🌸 今天为大家带来UDP套接字的相关知识 文章目录认识socketUDP和TCP认识UDPAPI有关方法基于UDP实现回显服务器UDP的方法基于UDP实现回显程序认识socket UDP和TCP 认识UDPAPI有…

【数据结构】二叉树的概念及结构

🚀write in front🚀 📜所属专栏: 初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是…

Linux内核设备驱动设备树概念与使用

一、设备树概念以及作用 1.1设备树概念 设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比…

prometheus基本介绍

001 基本介绍 1.主要功能 多维数据模型(时序由metric名字和k/v的labels构成)灵活的查询语句无依赖存储,支持local和remote不同的模型采用http协议,使用pull模式,拉取数据,简单易懂监控目标,可…