MySQL数据库②_库和表的操作_增删查改_备份恢复

news2024/11/15 9:17:27

目录

1. 创建数据库

2. 字符集和校验规则

2.1 默认的字符集和校验规则

2.2 支持的字符集校验规则

2.3 校验规则对数据库的影响

3. 库的查看,修改,删除

3.1 查看数据库

3.2 修改数据库

3.3 删除数据库

4. 库的备份和恢复

4.1 备份数据库

4.2 恢复数据库

5. 查看连接情况

6. 表的增删查改DDL

6.1 创建表

6.2 查看表

6.3 修改表

6.3.1 新增列

6.3.2 修改列类型

6.3.3 修改列名

6.3.4 修改表名

6.3.5 删除列

6.4 删除表

7. 表的备份和恢复

7.1 备份表

7.2 恢复表

本篇完。


1. 创建数据库

创建数据库的SQL如下:

CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSET=charset_name] [[DEFAULT] COLLATE=collation_name];

CREATE DATABASE [IF NOT EXISTS]

db_name [[DEFAULT] CHARSET=charset_name]

[[DEFAULT] COLLATE=collation_name];

  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • CHARSET用于指定数据库所采用的编码格式。
  • COLLATE用于指定数据库所采用的校验规则。

        需要注意: 如果创建数据库时未指明数据库的编码格式或校验规则,则默认使用MySQL配置文件中对应的编码格式或校验规则。


采用默认的编码格式和校验规则创建数据库:

如果没有对MySQL的配置文件进行过修改,则默认的编码格式是utf8,默认的校验规则是utf8_general_ci。


指定utf8编码格式创建数据库:

SQL中的charset=utf8,也可以写成character set=utf8或character set utf8。


指定utf8编码格式和utf8_general_ci校验规则创建数据库:

注意: SQL中的collate=utf8_general_ci,也可以写成collate utf8_general_ci。


2. 字符集和校验规则

2.1 默认的字符集和校验规则

        查看系统默认的字符集:通过查看MySQL系统变量variables中的character_set_database,可以得知系统默认的字符集。输入:

show variables like 'character_set_database';

如果是在指定数据库下使用该SQL,则查看的是该数据库对应的字符集。


        查看系统默认的字符集校验规则:通过查看MySQL系统变量variables中的collation_database,可以得知系统默认的字符集校验规则。输入:

show variables like 'collation_database';


        查看数据库支持的字符集:输入show charset

字符集主要是控制用什么语言,比如utf8就可以使用中文。


2.2 支持的字符集校验规则

        查看数据库支持的字符集校验规则:输入show collation


2.3 校验规则对数据库的影响

字符集编码格式和字符集校验规则的区别:

  • 字符集编码格式指的是在存储数据时各个字符的底层编码,用于指定数据的存储格式。
  • 字符集校验规则是在字符集内用于比较字符的一套规则,用于对数据进行比对。

        比如我们存储数据的时候是按照utf8的格式进行存储的,那么将来在对数据做比对时也必须按照utf8的格式进行比对,因为“存数据”和“取数据”的方式必须保持一致。

        注意: 在对数据库当中的数据进行增删查改时,不可避免的需要进行数据的比对,因为在对数据做增删查改之前,都需要先通过比对的方式找到目标数据。


校验规则对数据库的影响:

        现在我们知道了,为了保证读取的数据和存储的数据是一致的,因此字符集编码格式和校验规则必须是对应的。但实际同一中字符集编码格式一般会有多种可选择的校验规则,比如utf8编码格式的校验规则有utf8_general_ci、utf8_bin、utf8_unicode_ci等校验规则。

        使用不同的校验规则操作数据库中的数据可能会得到不同的结果,比如utf8_general_ci校验规则在比对数据时是不区分大小写的,而utf8_bin校验规则在对比数据时则是区分大小写的。


操作数据库时采用utf8_general_ci校验规则:

创建数据库时指定数据库的校验规则为utf8_general_ci,数据库的编码格式默认为utf8:

        在该数据库中创建一个简单的person表,由于创建未指定表的编码格式和校验规则,因此person表将继承当前数据库的编码格式和校验规则:

这时向表中插入一些数据:

通过select语句可以查看插入表中的数据:

        这时指定查看表中name='aaa'的记录时会将aaa和AAA一并筛选出来,根本原因就是utf8_general_ci校验规则在进行数据比对时是不区分大小写的。如下:


操作数据库时采用utf8_bin校验规则:

创建数据库时指定数据库的校验规则为utf8_bin,数据库的编码格式默认为utf8:

重复之前的操作:

插入数据:

查看:

        这时指定查看表中name='alice'的记录时只会将alice筛选出来,根本原因就是utf8_bin校验规则在进行数据比对时是区分大小写的。


3. 库的查看,修改,删除

3.1 查看数据库

输入show database可以查看系统中所有的数据库:


输入show create database 数据库名可以查看对应数据库的创建语句:

  • MySQL建议SQL中的关键字使用大写,但不是必须的。
  • 数据库的名字加上反引号,是为了防止使用的数据库名与关键字冲突。
  • /*!40100 DEFAULT CHARACTER SET utf8 */不是注释,它表示当前MySQL版本如果大于4.10,则执行后面的SQL语句。

3.2 修改数据库

修改数据库的SQL如下:

ALTER DATABASE db_name [[DEFAULT] CHARSET=character_name] [[DEFAULT] COLLATE=collation_name];

ALTER DATABASE db_name [[DEFAULT] CHARSET=character_name]

[[DEFAULT] COLLATE=collation_name];

  • 对数据库的修改主要指的是修改数据库的字符集或校验规则。

比如将数据库的字符集改为gbk,并将数据库的校验规则改为gbk_bin。如下:


3.3 删除数据库

删除数据库的SQL如下:

DROP DATABASE [IF EXISTS] db_name;

删除数据库后该数据库对应的文件夹就被删除了:

并且删除数据库后,该数据库下的所有表也都会被级联删除,因此不要随意删除数据库。


4. 库的备份和恢复

4.1 备份数据库

使用如下命令即可对指定数据库进行备份:

mysqldump -P 端口号 -u 用户名 -p 密码 -B 数据库名1 数据库名2 ...  > 数据库备份存储的文件路径

为了演示数据库备份,下面我们创建一个test3数据库,并在该数据库中创建两个表。如下:

在两个表中分别插入两条记录:

        这时在命令行中执行如下命令即可将该数据库进行备份,并指定将备份后产生的文件存放在当前目录下。如下:

        打开back.sql文件即可看到,文件中的内容实际就是我们在该数据库中执行的各种SQL命令,包括创建数据库、创建表、插入数据等SQL语句。如下:


4.2 恢复数据库

使用如下命令即可对指定数据库进行恢复:

source 数据库备份存储的文件路径

为了演示数据库恢复,我们先将刚才创建的test3数据库删除。如下:

这时让MySQL服务器执行如下命令即可对数据库进行恢复。输入source /var/lib/mysql/back.sql


        实际恢复数据库的时候就是按顺序执行数据库备份文件中的SQL语句,执行完毕后数据库也就恢复出来了。同时该数据库下的两张表,以及表当中的数据也都恢复出来了。


5. 查看连接情况

输入show processlist;即可查看当前连接MySQL的用户:

  • Id列:一个标识,可以在MySQL中通过kill id杀死指定id的线程。
  • User列:显示当前用户,如果不是root,这个命令就只显示你权限范围内的SQL语句。
  • Host列:显示这个语句是从哪个IP的哪个端口上发出的,可用来追踪出问题语句的用户。
  • db列:当前执行的命令是在哪一个数据库上,如果没有指定数据库,则该值为NULL。
  • Command列:显示当前连接执行的命令,一般就是休眠(Sleep)、查询(Query)和连接(Connect)。
  • Time列:表示该线程处于当前状态的时间,单位是秒。
  • State列:显示使用当前连接的SQL语句的状态。
  • Info列:一般记录的是线程执行的语句,默认只显示前100个字符,如果要看全部信息,需要使用show full processlist。

        show processlist可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登录的,那么很有可能你的数据库被人入侵了,以后如果发现自己的数据库比较慢时,可以用这个SQL来查看数据库连接情况。


6. 表的增删查改DDL

表操作至少会涉及如下两类SQL语句:

DDL(Data Definition Language)数据定义语言:比如建表、删表、该表、新增列、删除列等。DML(Data Manipulation Language)数据操作语言:比如插入记录、删除记录、修改记录等。

这里讲的是表的DDL操作,也就是操作表结构的SQL语句。

6.1 创建表

创建表的SQL如下:

CREATE TABLE [IF NOT EXISTS] table_name(
	field1 datatype1 [COMMENT '注释信息'],
	field2 datatype2 [COMMENT '注释信息'],
	field3 datatype3  [COMMENT '注释信息']
)[CHARSET=charset_name] [COLLATE=collation_name] [ENGINE=engine_name];
  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • field表示列名,datatype表示列的类型。
  • CHARSET用于指定表所采用的编码格式,如果没有指定则以所在数据库的编码格式为准。
  • COLLATE用于指定表所采用的校验规则,如果没有指定则以所在数据库的校验规则为准。
  • ENGINE用于指定表所采用的存储引擎。
  • COMMENT用于对指定列添加注释信息。

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

        可以看到当前的MySQL默认使用的是InnoDB存储引擎,如果建表时没有指定使用哪种存储引擎,那么就会默认使用InnoDB存储引擎。

        在创建表之前需要先选中一个数据库,然后在数据库中创建表,这里我们先创建一个数据库。如下:

        数据库创建完毕后选中数据库,在该数据库中创建一个user表,并在建表时指定采用MyISAM存储引擎。如下:

注意:

  • 采用不同的存储引擎,创建表时所产生的文件不一样。
  • 采用InnoDB存储引擎建表,会产生对应的xxx.frm(表结构)和xxx.ibd(表数据+表索引)文件。
  • 采用MyISAM存储引擎建表,会产生对应的xxx.frm(表结构)、xxx.MYD(表数据)和xxx.MYI(表索引)文件。

6.2 查看表

输入desc 表名可以查看表的结构:

  • Field表示该字段的名字。
  • Type表示该字段的类型。
  • Null表示该字段是否允许为空。
  • Key表示索引类型,比如主键索引为PRI。
  • Default表示该字段的默认值。
  • Extra表示该字段的额外信息说明。

6.3 修改表

修改表的SQL如下:

ALTER TABLE table_name ADD 新增列名 新增列的属性;

ALTER TABLE table_name MODIFY 列名 修改后的列属性;

ALTER TABLE table_name DROP 列名;

ALTER TABLE table_name RENAME [TO] 新表名;

ALTER TABLE table_name CHANGE 列名 新列名 新列属性;

        修改表的过程中可能会影响到表中的数据,为了演示这个过程,我们在修改表之前先在user表中插入两条数据:

6.3.1 新增列

在user表中新增一列用于保存用户的照片路径:

        新增列SQL中的after表示将该列新增到哪一列之后,如果想要将新增的列放到第一列,可以将after及其之后的SQL换成not null first。

新增列后可以通过desc命令确认新增成功,这时再插入一条用户记录后查看表中信息:

        可以看到在新增列之前插入表中的两条记录对应的path值为NULL,因此新增列后可能还需要对原来插入的记录进行修改。


6.3.2 修改列类型

将user表中password列的类型由char(30)改成char(50):


6.3.3 修改列名

将user表中password列的列名改成passwd:


6.3.4 修改表名

将user表的表名改成employee:


6.3.5 删除列

将employee表中的path列删除:

需要注意的是删除列后,该列对应的所有数据都没有了。


6.4 删除表

删除表的SQL如下:

DROP [TEMPORARY] TABLE [IF EXISTS] table_name;
  • 在创建表语句中加上TEMPORARY关键字,那么服务器将创建出一个临时表,该表会在你与服务器的会话终止时自动消失。
  • TEMPORARY表的名字可以与某个已有的永久表相同,当有TEMPORARY表存在时,对应的永久表会隐藏起来(即无法访问)。
  • 为了避免重新连接后(TEMPORARY已经不存在),在未做检测的情况下调用DROP误删了对应永久表,因此在使用DROP删除临时表时需要带上TEMPORARY关键字。

        这里演示一下直接删除(很多情况都不建议直接删除,可以先看一下删除语句和结果,然后看表的备份和恢复自己操作一下):


7. 表的备份和恢复

演示删除前,先把库备份一下,然后删除,然后演示恢复。

7.1 备份表

使用如下命令即可对指定表进行备份:

mysqldump -P 端口号 -u 用户名 -p 密码 数据库名 表名1 表名2 ... > 表备份存储的文件路径

比如用备份库的test3库演示:

再创建一个person表:

        如果只想备份数据库中的student表和teacher表,这时就可以在命令行中执行如下命令,并指定将备份后产生的文件存放在当前目录下:

这时历史上与student和teacher表相关的SQL语句,就会被保存到备份文件当中:


7.2 恢复表

        表恢复之前需要先选中一个数据库,表明需要将表恢复到哪一个数据库中,为了防止恢复出来的表与该数据库中已有的表的表名重复,一般在恢复表时会选择创建一个空的数据库,然后在该数据库中进行表的恢复。

        在数据库中使用如下命令即可对指定表进行恢复:

source 表备份存储的文件路径

为了演示表恢复,直接test3数据库删除。如下:

这时创建一个空的数据库并在该数据库中执行如下命令即可对表进行恢复。如下:

        当备份文件中的SQL语句执行完毕后,该数据库下就恢复出了student和teacher表,并且表当中的数据也都恢复出来了:

(数据和创建test3数据库插入的表一模一样)

本篇完。

下一篇是MySQL的数据类型。

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

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

相关文章

在虚拟机上搭建CentOS环境并配置静态IP

在虚拟机上搭建CentOS环境并配置静态IP 在进行Linux系统的学习和实践时,搭建一个本地的CentOS环境是一个非常好的方式。本文将介绍如何使用虚拟机(VM)搭建CentOS环境,并配置静态IP,以便更好地进行网络管理和测试。 步…

Java开发工具 IntelliJ IDEA 2023中文

IntelliJ IDEA 2023是一款强大的集成开发环境(IDE),适用于多种编程语言,包括Java、Python、Kotlin等。它提供了许多特色功能,以提高开发效率和代码质量。 Java开发工具 IntelliJ IDEA 2023中文 以下是一些IntelliJ ID…

机器学习复习(4)——CNN算法

目录 数据增强方法 CNN图像分类数据集构建 导入数据集 定义trainer 超参数设置 数据增强 构建CNN网络 开始训练 模型测试 数据增强方法 # 一般情况下,我们不会在验证集和测试集上做数据扩增 # 我们只需要将图片裁剪成同样的大小并装换成Tensor就行 test_t…

跨平台开发:浅析uni-app及其他主流APP开发方式

随着智能手机的普及,移动应用程序(APP)的需求不断增长。开发一款优秀的APP,不仅需要考虑功能和用户体验,还需要选择一种适合的开发方式。随着技术的发展,目前有多种主流的APP开发方式可供选择,其…

【计网·湖科大·思科】实验七 路由信息协议RIP、开放最短路径优先协议OSPF、边界网关协议BGP

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

nginx初学者指南

一、启动、停止和重新加载配置 前提:先要启动nginx 在Windows上启动nginx的步骤如下: 1. 下载并安装nginx。可以从nginx官网下载适合自己操作系统的版本,一般是zip压缩包,解压到指定目录中。 2. 进入nginx的安装目录&#xff…

简单几步,借助Aapose.Cells将 Excel 工作表拆分为文件

近年来,Excel 文件已成为无数企业数据管理的支柱。然而,管理大型 Excel 文件可能是一项艰巨的任务,尤其是在高效共享和处理数据时。为了应对这一挑战,大型 Excel 工作簿被拆分为较小的工作簿以增强电子表格管理。Aspose提供了这样…

electron项目在内网环境的linux环境下进行打包

Linux需要的文件: electron-v13.0.0-linux-x64.zip appimage-12.0.1.7z snap-template-electron-4.0-1-amd64.tar.7z 下载慢或者下载失败的情况可以手动下载以上electron文件复制到指定文件夹下: 1.electron-v13.0.0-linux-x64.zip 复制到~/.cache/electron/目录下…

Blender使用Rigify和Game Rig Tool基础

做动画需要的几个简要步骤: 1.建模 2.绑定骨骼 3.绘制权重 4.动画 有一个免费的插件可以处理好给引擎用:Game Rig Tool 3.6和4.0版本的 百度网盘 提取码:vju8 1.Rigify是干嘛用的? 》 绑定骨骼 2.Game Rig Tool干嘛用的&#xf…

LVGL部件8

一.按钮矩阵部件 1.知识概览 2.函数接口 1.lv_btnmatrix_set_btn_ctrl 在 LVGL(LittlevGL)中,lv_btnmatrix_set_btn_ctrl() 函数用于设置按钮矩阵(Button Matrix)中单个按钮的控制选项。该函数可以用来定制按钮矩阵中…

寒假作业2月3号

第二章 引用内联重载 一.选择题 1、适宜采用inline定义函数情况是(C) A. 函数体含有循环语句 B. 函数体含有递归语句 C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句…

【蓝桥杯】环形链表的约瑟夫问题

目录 题目描述: 输入描述: 输出描述: 示例1 解法一(C): 解法二(Cpp): 正文开始: 题目描述: 据说著名犹太历史学家 Josephus 有过以下故事&a…

UE4 C++ 枚举类型

先在UCLASS()前写入: //定义枚举变量:方法一 UENUM(BlueprintType) //BlueprintType:在蓝图中可显示、创建该枚举变量 namespace MyEnumType //namespace:命名空间,支持同样的变量命令、便于访问//MyEnumType&#xf…

如何保证MySQL和Redis中的数据一致性?

文章目录 前言一、缓存案例1.1 缓存常见用法1.2 缓存不一致产生的原因 二、解决方案2.1 先删除缓存,再更新数据库2.2 先更新数据库,删除缓存2.3 只更新缓存,由缓存自己同步更新数据库2.4 只更新缓存,由缓存自己异步更新数据库2.5 …

【MybatisPlus篇】查询条件设置(范围匹配 | 模糊匹配 | 空判定 | 包含性判定 | 分组 | 排序)

文章目录 🎄环境准备⭐导入依赖⭐写入User类⭐配置启动类⭐创建UserDao 的 MyBatis Mapper 接口,用于定义数据库访问操作⭐创建配置文件🛸创建测试类MpATest.java 🍔范围查询⭐eq⭐between⭐gt 🍔模糊匹配⭐like &…

力扣之2629.复合函数(reduceRight )

/*** param {Function[]} functions* return {Function}*/ var compose function(functions) {return function(x) {return functions.reduceRight((result, func) > func(result), x);} };/*** const fn compose([x > x 1, x > 2 * x])* fn(4) // 9*/ 说明&#x…

docker 容器指定主机网段

docker 容器指定主机网段。 直接连接到物理网络:使用macvlan技术可以让Docker容器直接连接到物理网络,而不需要通过NAT或端口映射的方式来访问它们。可以提高网络性能和稳定性,同时也可以使容器更加透明和易于管理。 1、查询网卡的名称&…

微软Office Plus与WPS Office的较量:办公软件市场将迎来巨变?

微软Office Plus在功能表现上远超WPS Office? 微软出品的Office套件实力强劲,其不仅在办公场景中扮演着不可或缺的角色,为用户带来高效便捷的体验,而且在娱乐生活管理等多元领域中同样展现出了卓越的应用价值 作为中国本土办公软…

c语言--求第n个斐波那契数列(递归、迭代)

目录 一、概念二、用迭代求第n个斐波那契数1.分析2.完整代码3.运行结果4.如果求第50个斐波那契数呢?看看会怎么样。4.1运行结果:4.2画图解释 三、用迭代的方式求第n个斐波那契数列1.分析2.完整代码3.运行结果4.求第50个斐波那契数4.1运行结果4.2运行结果…

基于粒子群算法的多无人机任务分配

python3.6以上正常运行 基于粒子群算法的多无人机任务分配资源-CSDN文库