7 个MySQL MariaDB 创建、更改、删​​除数据库命令示例

举报
Tiamo_T 发表于 2021/11/25 21:46:22 2021/11/25
【摘要】 安装和配置 MySQL 或 MariaDB 后,第一步是创建数据库。 只有在创建数据库后,才能创建表和插入记录。

安装和配置 MySQL 或 MariaDB 后,第一步是创建数据库。

只有在创建数据库后,才能创建表和插入记录。

本教程解释了以下用于创建和操作 MySQL 数据库的示例:

  1. 创建新的 MySQL 数据库
  2. 使用特定字符集 (UTF8) 创建 MySQL 数据库
  3. 删除现有的 MySQL 数据库
  4. 仅当 MySQL 数据库不存在时才创建它
  5. 仅当 MySQL 数据库存在时才删除它
  6. 更改 db.opt 的数据库特征
  7. 升级用于迁移和编码的数据目录选项


1. 创建新的 MySQL 数据库

要创建 MariaDB 数据库,请使用如下所示的 create database 命令。

下面将创建一个名为“thegeekstuff”的数据库。

MariaDB [(none)]> CREATE DATABASE tiamo;
Query OK, 1 row affected (0.00 sec)

如果您有 Oracle 数据库方面的背景,请不要在此处混淆“数据库”一词。

当我们在 MySQL 中创建“数据库”时,我们实际上是在创建一个“模式”。但是在 MySQL 和 MariaDB 世界中,它实际上被称为“数据库”而不是“模式”。

但出于某种原因,如果您愿意,也可以使用以下“create schema”命令来创建数据库。Create schema 只不过是 Create database 的同义词。

下面的命令和上面的create database完全一样。

MariaDB [(none)]> CREATE SCHEMA tiamo;

请注意,只有对数据库具有 CREATE 权限的用户才能执行上述命令。

在典型情况下,您将以 root 身份登录 mysql 并执行上面的 create database 命令。

# mysql -u root -pMySecretPWD

CREATE DATABASE 创建具有给定名称的数据库。要使用此语句,您需要对数据库具有 CREATE 权限。CREATE SCHEMA 是 CREATE DATABASE 的同义词。

2. 使用特定字符集 (UTF8) 创建 MySQL 数据库

创建数据库将在创建新数据库时使用系统中的任何默认字符集。

但是,如果您确切地知道所需的字符集,则可以在创建数据库时指定它们,如下所示。

在以下示例中,我们将创建一个名为“tgs”的带有“utf8”字符集的 mariadb 数据库。在这里,我们还指定了排序规则和字符集。

MariaDB [(none)]> CREATE DATABASE tgs CHARACTER SET = utf8 COLLATE = utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

如果您想查看系统上所有可用的字符集,请使用以下 show character set 命令。

MariaDB [(none)]> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
| cp850    | DOS West European           | cp850_general_ci    |      1 |
| hp8      | HP West European            | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
..
..
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |

在创建数据库期间指定字符集时,此信息将存储在该特定数据库的 db.opt 文件中。

例如,对于“tgs”数据库,这个 db.opt 文件将在 /var/lib/mysql/tgs 目录下,如下所示。

# cat /var/lib/mysql/tgs/db.opt 
default-character-set=utf8
default-collation=utf8_general_ci

3. 删除现有的 MySQL 数据库

要从系统中删除现有的 mysql 数据库,请使用如下所示的 drop database 命令。

以下将删除“thegeekstuff”数据库。

MariaDB [(none)]> DROP DATABASE tiamo;

需要记住的几件事:
正如您想象的那样,这是一个危险的命令,因为这会删除所有表以及数据库中的数据,然后删除数据库本身。
要执行此命令,您需要对数据库具有 DROP 权限。

此外,类似于 create database 和 create schema,您也可以使用 drop database 和 drop schema。

以下两个命令完全相同。

MariaDB [(none)]> DROP DATABASE tiamo;
MariaDB [(none)]> DROP SCHEMA tiamo;

删除数据库后,请执行 show databases 以确保不再列出该数据库。

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

删除数据库时,它还会删除数据库目录以及 /var/lib/mysql 文件夹中的所有文件,包括 db.opt,如下所示。

# ls -l /var/lib/mysql/tiamo/
ls: cannot access /var/lib/mysql/tiamo/: No such file or directory

要记住的一件事是,如果您在数据库目录(即 /var/lib/mysql/thegeekstuff)下手动创建了一些文件,那么上面的 drop database 命令将不会删除您的自定义文件或数据库目录本身。但是,它将删除由 mysql 服务器本身创建的所有其他文件,包括表文件等。

在相关说明中,如果您创建了任何 TEMPORARY 表,它们将不会被删除。但是,只要创建它的特定会话结束,它们就会被自动删除。

4. 仅当 MySQL 数据库不存在时才创建它

如下所示,当您尝试创建已存在的数据库时,默认情况下 create database 命令将失败。

MariaDB [(none)]> CREATE DATABASE tiamo;
ERROR 1007 (HY000): Can't create database 'tiamo'; database exists

如果您只是在命令行上执行此操作,那可能没问题,因为您可以暗示忽略并继续。

但是,如果您在脚本中执行此操作,该脚本会检查来自 SQL 命令的任何错误消息并存在该脚本,那么我们就会遇到问题。

在这种情况下,使用“if not exists”子句和 create database,如下所示。

仅当它不存在时才会创建数据库。但是,当数据库存在时,它不会抛出任何错误消息。

MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS tiamo;
Query OK, 1 row affected, 1 warning (0.00 sec)

与 create database 类似,您也可以执行 drop database if exists 子句,如下所示。

DROP DATABASE IF EXISTS tiamo;
DROP SCHEMA IF EXISTS tiamo;

5. 仅当 MySQL 数据库存在时才删除它

当您尝试删除不存在的数据库时,您将收到以下错误消息。

MariaDB [none]> DROP DATABASE tiamo;
ERROR 1008 (HY000): Can't drop database 'tiamo'; database doesn't exist

当您从命令行以交互方式执行此操作时,这可能没问题。但是,如果从自动化脚本执行 drop 命令,并且您没有看到错误消息,这可能会停止脚本,然后使用 IF EXISTS 子句,如下所示。

与上述命令的行为相同,但不返回任何错误消息。

MariaDB [none]> DROP DATABASE IF EXISTS tiamo;
Query OK, 0 rows affected, 1 warning (0.00 sec)

6. 改变 db.opt 的数据库特征

使用alter database 命令,您可以更改数据库的某些特征。

通常,您将使用它来更改在 db.opt 文件中设置的数据库选项。

例如,这里我们将 db.opt 中的 geekstuff 数据库的字符集定义为 LATIN

# cat /var/lib/mysql/tiamo/db.opt 
default-character-set=latin1
default-collation=latin1_swedish_ci
..

现在,要将其更改为 UTF8,我们可以使用如下所示的 alter database 命令。

MariaDB [(none)]> ALTER DATABASE tiamo CHARACTER SET = utf8 COLLATE = utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

每当您执行 ALTER 数据库命令时,您都会看到您更新的值反映在 db.opt 文件中,如下所示。

# cat /var/lib/mysql/tiamo/db.opt 
default-character-set=utf8
default-collation=utf8_general_ci

要执行 alter database 命令,您将看到对数据库的 ALTER 权限。

就像创建和删除一样,您也可以使用“模式”。以下两者完全相同,因为 ALTER SCHEMA 只是 alter database 的同义词。

ALTER DATABASE tiamo CHARACTER SET = utf8 COLLATE = utf8_general_ci;

ALTER SCHEMA tiamo CHARACTER SET = utf8 COLLATE = utf8_general_ci;

另外,请注意,当您已经在数据库中时,您可以在“ALTER”命令中省略数据库名称,如下所示。

正如您在此处看到的,我确实使用了 USE 来更改数据库。因此,在我的 ALTER DATABASE 中,我不必指定数据库名称。

MariaDB [(none)]> USE tiamo;

MariaDB [tiamo]> ALTER DATABASE CHARACTER SET = utf8 COLLATE = utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

7. 升级用于迁移和编码的数据目录选项

如果您正在运行 MySQL 数据库的更改版本(5.1 之前),并尝试升级到 5.1 或更高版本的 MySQL/MariaDB,那么您需要执行此操作。

以下带有“升级数据目录名称”选项的命令将使用与 MySQL 5.1 或更高版本匹配的适当编码实现更新数据库目录的名称。这将确保正确映射数据库名称和数据库目录,名称中没有任何编码问题。

同样,只有当您从旧版本的 MySQL 升级到 5.1 或更高版本时,并且当您的数据库名称中有特殊字符时才使用它,如下所示,数据库名称中带有连字符(即 -geek-东西)。

另外,请注意“#mysql50#”是应该使用的关键字,因为它后跟数据库名称。

ALTER DATABASE `#mysql50#the-geek-stuff` UPGRADE DATA DIRECTORY NAME;

在这个例子中,上面的命令会将数据库名称正确编码为“the@002dgeek@002dstuff”,其中它将使用@002d 作为数据库名称中的破折号特殊字符。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。