【MySQL】数据库的操作

news2024/12/24 10:17:06

目录

前言

创建数据库

编码集和校验集

不同校验集的区别

删除数据库

确认当前数据库

查看数据库属性

修改数据库属性

备份与还原

数据库和表的备份

还原

创建表

查看列结构

查看表属性

修改表的列

修改表名称 

修改列名称

删除表


前言

在上一篇文章中,我们简单地讲解了有关数据库的基本概念,对于什么是数据库还不是很了解的可以翻翻上一篇文章初见数据库。

本文将详细讲解关于数据库的操作及相关的概念。

创建数据库

🎃在上一篇文章中便有简单讲过这个操作,但还有一些其他的细节仍未阐述,下面就一起来看一下吧。

create database (if not exists) 数据库名 (charset = 编码集 collate 校验集)
//括号中的为较上次增加的指令,实际写时并不用带上括号

🎃其中 if not exists 语句在创建对象前会先检查该对象是否已经存在,已存在便不会创建新对象

🎃比如,当前状态下我已经存在了一个叫做 alpaca 的数据库,现在我要用这个命令再创建一个叫 alpaca 的数据库。

  

🎃若我们直接创建一个同名数据库,系统便会直接报错。

编码集和校验集

🎃在数据库名后,使用者还可以指定数据库的 字符集 校验集

🎃其中字符集决定数据在写入时使用的编码,而校验集则是决定了读取时该以哪种形式进行读取。

🎃我们可以使用以下指令查看数据库支持的字符集和校验集

show charset;      //查看字符集
show collation;    //查看校验集

🎃通过查询字符集,我们可以看到一系列的信息,第一列为字符集名称, 第二列为对该字符集的描述,第三列表示该字符集对应的默认校验集,最后一列表示一个字符的最大大小(单位为字节)。

  

🎃那么,当我们没有自己决定使用的字符集和校验集时,使用的是哪一对呢?

🎃我们可以直接使用命令查询,或是通过查询配置文件得到答案。

show variables like 'character_set_database';    //查看默认字符集
show variables like 'collation_database';        //查看默认校验集

🎃打开 /etc/my.cnf 可以看到 mysql 的配置文件,我们可以找到默认设置的字符集为 utf8

🎃不知道你是否还有印象,查看支持的字符集时,在第三列我们便能看到字符集默认的校验集,因此这里只规定字符集即可。

不同校验集的区别

🎃前面说过,校验集决定我们如何读取数据的形式,而同一种字符集一般会有多种校验集。

🎃我们就简单感受一下两个校验集的不同,平常直接使用系统默认的设定就足够了。

🎃现在,我们创建两个数据库,字符集都为 utf8,而一个校验集为 utf8_general_ci,另一个为 utf8_bin

 

🎃之后在两个数据库中都创建一个表并插入相同的数据。

mysql> use d1;
Database changed
mysql> create table t1 ( c varchar(10) );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t1 value('a');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 value('b');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t1 value('A');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 value('B');
Query OK, 1 row affected (0.01 sec)

mysql> use d2;
Database changed
mysql> create table t1 (c varchar(10));
Query OK, 0 rows affected (0.03 sec)

mysql> insert into t1 value('a');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 value('b');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t1 value('A');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 value('B');
Query OK, 1 row affected (0.00 sec)

🎃现在,我们分别对表中的数据进行查询,会发现出现的结果不一样。同样是对 字符的查找,其中第一个数据库却连大写的 A 也查找出来了。这是因为,对于 utf8_general_ci 校验集来说,在读取时是不会进行大小写区分的,因此在他看来 aA 是等价的。

 

🎃不同的校验集读取同样的数据可能会得到不同的结果,更多的性质还需要自己去了解。 

🎃但数据库无论对数据做任何操作,都必须保证编码一致

删除数据库

🎃一般投入使用的数据库最好不要删除,仅作为了解。

drop database 数据库名

确认当前数据库

🎃我们都知道,在对数据库的表进行操作前,需要确保当前正处于目标数据库下。

🎃那我们该如何确定当前位于哪个数据库下呢?

select database();

🎃这个 database() 是一个函数,本质上就是我们通过 select 调用了这个函数,从而获取当前的位置。

查看数据库属性

🎃对于一个数据库,我们想要查看一下它的相关属性,了解他用了什么字符集和校验集,便可以使用。

show create database 数据库名

 

修改数据库属性

🎃当我们对于当前数据库的属性不满意时,相对其进行修改就可以使用这个命令。

alter database ... (后与create相同)

🎃create 的区别就只有第一个关键字不同而已,后面的语句我们就可以根据需要对字符集和校验集进行设置。 

🎃如此,便完成了对数据库相应属性的修改。

备份与还原

🎃在使用数据库时,为了避免数据丢失会经常对数据库或表进行备份,接下来就一起来学习该如何进行数据库的备份吧。

数据库和表的备份

[注意]:  这个命令是借用了 mysql 的备份工具,即这个命令是在 Linux 命令行使用的,而不是 mysql 命令行。

mysqldump -P ... -u ... -p ... -B 数据库名1 数据库名2 ... > 存储备份的文件路径      //备份数据库

mysqldump -u ... -p ... 数据库名 表名1 表名2 ... > 存储备份的文件路径     //备份表

 

🎃这样我们就完成了数据库的备份,打开备份生成的文件,我们可以看到,其中的操作我们都十分熟悉,就是建立这个数据库时进行的操作。

🎃因此,数据库的备份本质上就是将建立该数据库的方法备份起来,恢复时只需要再使用一遍这些操作即可。

🎃值得注意的一点是,若备份时没有带上 -B选项,则恢复前需要先创建空的数据库并使用。

还原

🎃而还原的操作是在 mysql 命令行下使用的,只要输入备份文件的路径便可进行还原。

source 备份文件的路径
mysql> drop database d1;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| alpaca             |
| d2                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> source /root/MySQL/d1.sql;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Database changed
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.03 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| alpaca             |
| d1                 |
| d2                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

创建表

🎃创建完数据库后,还要创建表才能插入对应的数据,而表的创建还需要涉及数据库的数据结构,会进行一下简单的介绍。

create table (
    ...    //eg. name varchar(20) comment '用户名',
    ...
) charset = ... collate = ... engine = ...;

🎃这里我们在数据库中创建了一个表,而列的数据类型分别为字符串整型

🎃其中 comment 起到类似于注释的作用,之后可以查询到

🎃创建数据库时,我们可以指定字符集和校验集,创建表时同样也可以指定。当创建数据库时未指定字符集和校验集时,则使用系统的默认选项,而创建表时若未指定,则默认使用当前数据库设定的字符集和校验集

查看列结构

🎃创建了一个表,是否我们需要查看一下其中的列结构,验证一下创建的表满足我们的预期。

desc 表名

 

🎃我们可以看到各列的信息:

  • Field: 该列的名称
  • Type: 该列的数据类型
  • Null: 该列是否能为空
  • Key: 该列是否为特殊键
  • Default: 该列的默认值

查看表属性

🎃上面的操作是查看列结构,而关于表属性则需要用下面这个操作。

show create table 表名

 

🎃而我们在创建表使用的 comment 在这里便可以查询到,不仅如此还能查询到该表使用的存储引擎字符集校验集

修改表的列

alter table 表名 add (datatype ... comment ...)  //添加列

alter table 表名 modify 列名 ...  (与 add 相同)      //修改列

alter table 表名 drop 列名            //删除列

🎃当表中的列无法满足我们的使用需求时,便可以使用列修改操作进行修改。

🎃如下,我们对一列进行了增加修改和删除操作,可以跟着流程体会一下。

mysql> alter table t1 add hobby varchar(20);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | YES  |     | NULL    |       |
| id    | int(11)     | YES  |     | NULL    |       |
| hobby | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> alter table t1 modify hobby int ;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | YES  |     | NULL    |       |
| id    | int(11)     | YES  |     | NULL    |       |
| hobby | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> alter table t1 drop hobby;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | YES  |     | NULL    |       |
| id    | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

[注意]: 修改成员属性/大小时,会覆盖掉原来的comment,若不新写comment,则该列将不会有注释。

修改表名称 

alter table 旧名称 rename to 新名称

🎃修改表名称,本质上还是修改表,因此开头的关键字还是使用 alter,而后使用 rename to 进行名称的修改。 

 

修改列名称

🎃有修改表名称自然也有修改列的名称,第二个关键字替换成 change,而新字段需要完整定义,因此要再写一遍要设定的数据类型。

alter table 表名 change 旧名称 新名称 ...(数据类型)
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | YES  |     | NULL    |       |
| id    | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> alter table t1 change id id1 int;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(20) | YES  |     | NULL    |       |
| id1   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

删除表

🎃删除表十分简单,使用 drop 关键字并指定表明即可。

drop table 表名

 


🎃好了,今天【MySQL】数据库的操作 的相关内容到这里就结束了,如果这篇文章对你有用的话还请留下你的三连加关注。

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

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

相关文章

什么是生成对抗网络 (GAN)?

什么是生成对抗网络 (GAN)? 钦吉兹赛义德贝利 一、说明 GAN(Generative Adversarial Network)网络是一种深度学习模型,由两个神经网络——生成器和判别器组成。生成器负责生成虚假的数据,而判别…

Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)

Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等) 准备文件,这里我放在resource下的templates路径 在pom中配置构建打包的资源,更新maven 如果使用了assembly打包插件这样配置可能仍不生效&#…

Windows+Pycharm 如何创建虚拟环境

当我们开发一个别人的项目的时候,因为项目里有很多特有的包,比如 Pyqt5.我们不想破坏电脑上原来的包版本,这个时候,新建一个虚拟环境,专门针对这个项目就很有必要了. 简略步骤: 1.新建虚拟环境 1.打开 pycharm 终端(Terminal)安装虚拟环境工具: pip install virtualenv2.创…

基于FPGA的图像指数对比度增强算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1图像指数对比度增强概述 4.2基于FPGA的图像指数对比度增强 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns…

Redis——渐进式遍历和数据库管理命令

介绍 如果使用keys * 这样的操作,将Redis中所有的key都获取到,由于Redis是单线程工作,这个操作本身又要消耗很多时间,那么就会导致Redis服务器阻塞,后续的操作无法正常执行 而渐进式遍历,通过多次执行遍历…

虹科展会丨9月19号工博会启航:虹科五大团队携20+产品,双展台+两场演讲等您来!

2023年9月19-23日,第23届中国国际工业博览会即将在上海国家会展中心拉开帷幕。本届工博会以“碳循新工业、数聚新经济”为主题,展览面积30万平方米,吸引了来自全球27个国家和地区超2600家企业参展,共设置九大专业展区,…

电子游戏冷知识

电子游戏一直在试图用技术还原一个真实或虚幻的世界,并在其中演绎和倾诉人类种种的情感和欲望。 对信息技术发展的贡献 游戏推动了芯片、网络、VR/AR等领域的技术进步和创新。根据中科院的研究报告,游戏技术对芯片产业的科技进步贡献率是14.9%&#xff…

清华大学LightGrad-TTS,且流式实现

论文链接: https://arxiv.org/abs/2308.16569 代码地址: https://github.com/thuhcsi/LightGrad 数据支持: 针对BZNSYP和LJSpeech提供训练脚本 针对Grad-TTS提出两个问题: DPMs are not lightweight enough for resource-con…

真空腔体的设计要点

真空腔体是保持内部为真空状态的容器,真空腔体设计制作要考虑容积、材质和形状。 1、根据应用需求选择腔体形状。几种代表性的真空腔体包括垂直真空腔体、水平真空腔体、立方真空腔体和球形真空腔体。 2、根据获得真空度选择腔体材质。钛用于极高真空;…

轻松学习 Spring 事务

文章目录 一. Spring事务简介二. Spring事务使用1. 编程式事务2. 声明式事务 三. Transactional的使用1. 参数作用2. 事务失效的场景3. Transactional工作原理 四. Spring 事务的隔离级别五. Spring事务传播机制 一. Spring事务简介 在之前的博客已经介绍了在 Spring 环境中整…

《向量数据库指南》——Milvus Cloud是如何从 0 到 1 做一款向量数据库的?经过了哪些升级和迭代?

这实际上是一个颇具曲折性和难得性的故事。由于我自己是在公司中间加入的,从 2.0 版本开始参与了 Milvus 的构建,而我们公司在向量数据库领域已经有大约 5 年的历史了。 最初,我们看到了这个机会,并意识到有诸如 Faiss 等引擎在处…

文件属性操作函数

1.access函数 #include <unistd.h> int access(const char *pathname, int mode); 作用&#xff1a;判断某个文件是否有某个权限&#xff0c;或者判断文件是否存在 参数: -pathname:判断的文件路径 -mode: R_OK&#xff1a;判断是否有读权限 W_OK X_OK F_OK&#xff1a;…

vue实现鼠标拖拽div左右移动的功能

直接代码&#xff1a; <template><div class"demo"><div class"third-part" id"发展历程"><div class"title">发展历程</div><div class"content" id"nav" v-if"dataList…

马斯克回应盖茨;谷歌反垄断案开庭;苹果发布 3nm 芯片的 iPhone 15丨RTE开发者日报 Vol.48

开发者朋友们大家好&#xff1a; 这里是「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

液压切管机配套用液压泵站比例阀放大器

液压切管机配套用液压泵站是液压系统的动力源&#xff0c;可按机械设备工况需要提供一定压力、流量和清洁度的工作介质。它由泵组、油箱组件、控温组件、滤油器组件及蓄能器组件等组合而成&#xff0c;液压泵站主要服务于大型管道工程。

L1-020 帅到没朋友 C++解法【全网最全】

一、题目再现 当芸芸众生忙着在朋友圈中发照片的时候&#xff0c;总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤100&#xff09;&#xff0c;是已知朋友圈的个数&#xff1b;随后N行…

Oracel ORA-22992 错误的解决方法

在oracle数据库中&#xff0c;可以使用DBLink 进行垮数据库访问。 今天在使用dblink 查询数据时&#xff0c;提示如下&#xff1a;ORA-22992&#xff1a;无法使用从远程表选择的LOB定位器。 无论是查询远程表还是视图&#xff0c;如果里面存在 CLOB类型的字段&#xff0c;就会…

99%的人都不知道的免费在线制作电子画册的网站

你是否曾经想过自己制作一本精美的电子画册&#xff1f; 现在&#xff0c;小编给大家分享一款免费在线制作电子画册的工具&#xff0c;可以帮助你轻松实现。这个网站不仅提供了丰富的模板和素材&#xff0c;还让你在制作过程中可以随时预览和编辑&#xff0c;无需任何排版设计…

fastadmin框架调用model层的方法

当使用FastAdmin框架进行Web应用程序开发时&#xff0c;经常需要与数据库交互以执行各种操作&#xff0c;如获取、创建、更新和删除数据。为了实现这些操作&#xff0c;FastAdmin采用了Model-View-Controller&#xff08;MVC&#xff09;模式&#xff0c;其中Model层负责处理数…

人机融合+学科

人机融合是指人类和机器之间的密切合作和相互补充&#xff0c;在各个学科领域都有广泛的应用&#xff0c;未来将会不断促进各个学科的快速发展&#xff0c;并因此会产生较大的突破。同时&#xff0c;人机融合与各个学科的关系是相辅相成的&#xff0c;其应用涵盖广泛&#xff0…