• 【MySQL】数据库的操作


    目录

    前言

    创建数据库

    编码集和校验集

    不同校验集的区别

    删除数据库

    确认当前数据库

    查看数据库属性

    修改数据库属性

    备份与还原

    数据库和表的备份

    还原

    创建表

    查看列结构

    查看表属性

    修改表的列

    修改表名称 

    修改列名称

    删除表


    前言

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

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

    创建数据库

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

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

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

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

      

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

    编码集和校验集

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

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

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

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

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

      

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

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

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

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

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

    不同校验集的区别

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

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

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

     

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

    1. mysql> use d1;
    2. Database changed
    3. mysql> create table t1 ( c varchar(10) );
    4. Query OK, 0 rows affected (0.03 sec)
    5. mysql> insert into t1 value('a');
    6. Query OK, 1 row affected (0.00 sec)
    7. mysql> insert into t1 value('b');
    8. Query OK, 1 row affected (0.01 sec)
    9. mysql> insert into t1 value('A');
    10. Query OK, 1 row affected (0.00 sec)
    11. mysql> insert into t1 value('B');
    12. Query OK, 1 row affected (0.01 sec)
    13. mysql> use d2;
    14. Database changed
    15. mysql> create table t1 (c varchar(10));
    16. Query OK, 0 rows affected (0.03 sec)
    17. mysql> insert into t1 value('a');
    18. Query OK, 1 row affected (0.00 sec)
    19. mysql> insert into t1 value('b');
    20. Query OK, 1 row affected (0.01 sec)
    21. mysql> insert into t1 value('A');
    22. Query OK, 1 row affected (0.00 sec)
    23. mysql> insert into t1 value('B');
    24. 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 命令行。

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

     

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

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

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

    还原

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

    source 备份文件的路径
    1. mysql> drop database d1;
    2. Query OK, 1 row affected (0.01 sec)
    3. mysql> show databases;
    4. +--------------------+
    5. | Database |
    6. +--------------------+
    7. | information_schema |
    8. | alpaca |
    9. | d2 |
    10. | mysql |
    11. | performance_schema |
    12. | sys |
    13. +--------------------+
    14. 6 rows in set (0.00 sec)
    15. mysql> source /root/MySQL/d1.sql;
    16. Query OK, 0 rows affected (0.00 sec)
    17. Query OK, 0 rows affected (0.00 sec)
    18. Query OK, 0 rows affected (0.00 sec)
    19. Query OK, 0 rows affected (0.00 sec)
    20. Query OK, 0 rows affected (0.00 sec)
    21. Query OK, 0 rows affected (0.00 sec)
    22. Query OK, 0 rows affected (0.00 sec)
    23. Query OK, 0 rows affected (0.00 sec)
    24. Query OK, 0 rows affected, 1 warning (0.00 sec)
    25. Query OK, 0 rows affected (0.00 sec)
    26. Query OK, 1 row affected (0.00 sec)
    27. Database changed
    28. Query OK, 0 rows affected (0.00 sec)
    29. Query OK, 0 rows affected (0.00 sec)
    30. Query OK, 0 rows affected (0.00 sec)
    31. Query OK, 0 rows affected (0.03 sec)
    32. Query OK, 0 rows affected (0.00 sec)
    33. Query OK, 0 rows affected (0.00 sec)
    34. Query OK, 0 rows affected (0.00 sec)
    35. Query OK, 4 rows affected (0.00 sec)
    36. Records: 4 Duplicates: 0 Warnings: 0
    37. Query OK, 0 rows affected (0.00 sec)
    38. Query OK, 0 rows affected (0.01 sec)
    39. Query OK, 0 rows affected (0.00 sec)
    40. Query OK, 0 rows affected, 1 warning (0.00 sec)
    41. Query OK, 0 rows affected (0.00 sec)
    42. Query OK, 0 rows affected (0.00 sec)
    43. Query OK, 0 rows affected (0.00 sec)
    44. Query OK, 0 rows affected (0.00 sec)
    45. Query OK, 0 rows affected (0.00 sec)
    46. Query OK, 0 rows affected (0.00 sec)
    47. mysql> show databases;
    48. +--------------------+
    49. | Database |
    50. +--------------------+
    51. | information_schema |
    52. | alpaca |
    53. | d1 |
    54. | d2 |
    55. | mysql |
    56. | performance_schema |
    57. | sys |
    58. +--------------------+
    59. 7 rows in set (0.00 sec)

    创建表

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

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

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

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

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

    查看列结构

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

    desc 表名

     

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

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

    查看表属性

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

    show create table 表名

     

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

    修改表的列

    1. alter table 表名 add (datatype ... comment ...) //添加列
    2. alter table 表名 modify 列名 ... (与 add 相同) //修改列
    3. alter table 表名 drop 列名 //删除列

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

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

    1. mysql> alter table t1 add hobby varchar(20);
    2. Query OK, 0 rows affected (0.04 sec)
    3. Records: 0 Duplicates: 0 Warnings: 0
    4. mysql> desc t1;
    5. +-------+-------------+------+-----+---------+-------+
    6. | Field | Type | Null | Key | Default | Extra |
    7. +-------+-------------+------+-----+---------+-------+
    8. | name | varchar(20) | YES | | NULL | |
    9. | id | int(11) | YES | | NULL | |
    10. | hobby | varchar(20) | YES | | NULL | |
    11. +-------+-------------+------+-----+---------+-------+
    12. 3 rows in set (0.00 sec)
    13. mysql> alter table t1 modify hobby int ;
    14. Query OK, 0 rows affected (0.05 sec)
    15. Records: 0 Duplicates: 0 Warnings: 0
    16. mysql> desc t1;
    17. +-------+-------------+------+-----+---------+-------+
    18. | Field | Type | Null | Key | Default | Extra |
    19. +-------+-------------+------+-----+---------+-------+
    20. | name | varchar(20) | YES | | NULL | |
    21. | id | int(11) | YES | | NULL | |
    22. | hobby | int(11) | YES | | NULL | |
    23. +-------+-------------+------+-----+---------+-------+
    24. 3 rows in set (0.00 sec)
    25. mysql> alter table t1 drop hobby;
    26. Query OK, 0 rows affected (0.04 sec)
    27. Records: 0 Duplicates: 0 Warnings: 0
    28. mysql> desc t1;
    29. +-------+-------------+------+-----+---------+-------+
    30. | Field | Type | Null | Key | Default | Extra |
    31. +-------+-------------+------+-----+---------+-------+
    32. | name | varchar(20) | YES | | NULL | |
    33. | id | int(11) | YES | | NULL | |
    34. +-------+-------------+------+-----+---------+-------+
    35. 2 rows in set (0.00 sec)

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

    修改表名称 

    alter table 旧名称 rename to 新名称

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

     

    修改列名称

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

    alter table 表名 change 旧名称 新名称 ...(数据类型)
    1. mysql> desc t1;
    2. +-------+-------------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+-------------+------+-----+---------+-------+
    5. | name | varchar(20) | YES | | NULL | |
    6. | id | int(11) | YES | | NULL | |
    7. +-------+-------------+------+-----+---------+-------+
    8. 2 rows in set (0.00 sec)
    9. mysql> alter table t1 change id id1 int;
    10. Query OK, 0 rows affected (0.00 sec)
    11. Records: 0 Duplicates: 0 Warnings: 0
    12. mysql> desc t1;
    13. +-------+-------------+------+-----+---------+-------+
    14. | Field | Type | Null | Key | Default | Extra |
    15. +-------+-------------+------+-----+---------+-------+
    16. | name | varchar(20) | YES | | NULL | |
    17. | id1 | int(11) | YES | | NULL | |
    18. +-------+-------------+------+-----+---------+-------+
    19. 2 rows in set (0.00 sec)

    删除表

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

    drop table 表名

     


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

  • 相关阅读:
    Redis命令集合
    基于SqlSugar的开发框架循序渐进介绍(3)-- 实现代码生成工具Database2Sharp的整合开发
    Spring Cloud版本,Spring Boot版本详细对应关系
    T1 卡牌选取
    PHP交流管理系统wamp运行定制开发mysql数据库html网页算机软件工程
    Sality 病毒的驱动模块分析报告
    计算机毕业设计Java永川区自行车在线租赁管理系统(系统+程序+mysql数据库+Lw文档)
    单调栈的常见用法
    基于vue实现的资金管理系统(带权限)
    【JavaEE】网络原理: HTTP协议相关内容
  • 原文地址:https://blog.csdn.net/Lin_Alpaca/article/details/132780484