「MySQL」- 操作数据库 | Database | Schema

增 | 创建数据库

MySQL 5.7 Reference Manual / CREATE DATABASE Syntax

权限要求:创建数据库时需要 CREATE 权限。

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name

[create_specification] …

create_specification:

[DEFAULT] CHARACTER SET [=] charset_name

| [DEFAULT] COLLATE [=] collation_name

CREATE DATABASE 语句用于创建数据库,CREATE SCHEMA 与 CREATE DATABASE 意义相同。

没有指定 IF NOT EXISTS 的话,如果库已经存在则会产生错误。

在 MySQL 5.7 中,在具有活动的 LOCK TABLES 语句的 session 中,不允许使用 CREATE DATABASE。

create_specification用于指定数据库的一些特征。数据库的默认特征存储在数据库文件夹中的 db.opt 文件中:

  • CHARACTER SET 用于指定数据库默认的字符集。
  • COLLATE 用于指定数据库默认的校对规则。

Section 10.1, “Character Set Support”,中讨论了更多有关字符集和校对规则的内容。

MySQL 中,数据库被实现为包含与数据库中的表相对应的文件的目录。由于首次创建数据库时并没有表,所以 CREATE DATABASE 实际上只是在 data 目录下创建了一个文件夹和一个 db.opt 文件。数据库名的命名规则在Section 9.2, “Schema Object Names”中有描述。如果数据名中包含特殊字符,那么数据库文件夹的名字包含这些特殊字符的编码版本,相关的描述位于Section 9.2.3, “Mapping of Identifiers to File Names”

如果手动在 data 目录中创建一个文件夹(比如使用 mkdir 命令),MySQL 会将其视为一个数据目录,并在 SHOW DATABASES 中显示。

通过 mysqladmin 创建

mysqladmin 命令也可以用于创建数据库。

删 | 删除数据库

How to Delete a MySQL Database

DROP DATABASE Flowers;

改 | 修改数据库

数据库重命名

How to rename a MySQL database?

-- 没有直接重命名数据库的方法

-- 方法一、移动表表到新库
CREATE database new_db_name;

RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;

DROP DATABASE db_name;

-- 方法二、使用 mysqldump+mysql 导出后再导入

-- 方法三、如果是 MyISAM 引擎,可以重命名数据库的目录名

SHOW DATABASES Syntax

文档:https://dev.mysql.com/doc/refman/5.7/en/show-databases.html

SHOW {DATABASES | SCHEMAS}

[LIKE ‘pattern’ | WHERE expr]

SHOW DATABASES 用于列出 MySQL 服务器上的数据库。SHOW SCHEMAS 等价于 SHOW DATABASES。

如果存在 LIKE 子句,则暗示了要匹配的数据库名字。

WHERE 子句可以用于查找具有某些条件的行。详细的内容可以查看文档中第 24.34 节, “Extensions to SHOW Statements”

只能列出具有查看权限的库。如果没有权限,则相应的数据库也不会显示。mysqlshow 命令也可以获取数据库列表。

如果 MySQL Server 启动时附带了–skip-show-database 选项。除非由 SHOW DATABASES 的权限,否则无法查看数据库。

MySQL 将数据库实现为 data 目录中的目录,因此该语句只是列出 data 中的目录。但是,输出中可能包括与实际数据库不对应的目录的名称。

SHOW CREATE DATABASE Syntax

MySQL 5.7 Reference Manual / SHOW CREATE DATABASE Syntax:https://dev.mysql.com/doc/refman/5.7/en/show-create-database.html

SHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name

示例

mysql> SHOW CREATE DATABASE test\G
************************* 1. row *************************
	   Database: test
Create Database: CREATE DATABASE `test`
				 /*!40100 DEFAULT CHARACTER SET latin1 */

mysql> SHOW CREATE SCHEMA test\G
************************* 1. row *************************
	   Database: test
Create Database: CREATE DATABASE `test`
				 /*!40100 DEFAULT CHARACTER SET latin1 */

SHOW CREATE DATABASE 根据 sql_quote_show_create 选项的值来引用表和列名称。参见:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_quote_show_create