返回顶部
首页 > 资讯 > 数据库 >【MySQL】数据库的操作
  • 447
分享到

【MySQL】数据库的操作

数据库mysql 2023-09-14 12:09:20 447人浏览 八月长安
摘要

目录 前言 创建数据库 编码集和校验集 不同校验集的区别 删除数据库 确认当前数据库 查看数据库属性 修改数据库属性 备份与还原 数据库和表的备份 还原 创建表 查看列结构 查看表属性 修改表的列 修改表名称  修改列名称 删除表 前言

目录

前言

创建数据库

编码集和校验集

不同校验集的区别

删除数据库

确认当前数据库

查看数据库属性

修改数据库属性

备份与还原

数据库和表的备份

还原

创建表

查看列结构

查看表属性

修改表的列

修改表名称 

修改列名称

删除表


前言

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

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

创建数据库

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

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 changedmysql> 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 changedmysql> 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 changedQuery 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: 0Query 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: 0mysql> 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: 0mysql> 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: 0mysql> 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: 0mysql> 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】数据库的操作 的相关内容到这里就结束了,如果这篇文章对你有用的话还请留下你的三连加关注。

来源地址:https://blog.csdn.net/Lin_Alpaca/article/details/132780484

您可能感兴趣的文档:

--结束END--

本文标题: 【MySQL】数据库的操作

本文链接: https://www.lsjlt.com/news/407261.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作