游乐游手机版
首页/数据库/文章详情

PHP中CREATE DATABASE语句详解

时间:2026-06-29 07:08
本文翻译自 MariaDB 官方技术文档,全面解析 CREATE DATABASE 语句的语法与使用场景。以下为详细说明。 语法结构 CREATE [OR REPLACE] {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specificati

本文翻译自 MariaDB 官方技术文档,全面解析 CREATE DATABASE 语句的语法与使用场景。以下为详细说明。

php create database,CREATE DATABASE语句解释

语法结构

CREATE [OR REPLACE] {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_specification] ...

create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

语句说明

CREATE DATABASE 用于创建一个指定名称的数据库。执行该命令需要拥有 database 对象的 CREATE 权限。注意,CREATE SCHEMACREATE DATABASE 的完全等价同义词,二者功能一致。

若在语句中使用了 IF NOT EXISTS 子句,当目标数据库已存在时,MariaDB 不会抛出错误,而是仅返回一条 warning(警告)信息,避免脚本中断。

OR REPLACE 选项

从 MariaDB 10.1.3 版本起,引入了 OR REPLACE 子句。该选项本质是语法糖,相当于先执行 DROP DATABASE IF EXISTS db_name;,再执行 CREATE DATABASE db_name ...;,即先删除已存在的数据库再重新创建。

IF NOT EXISTS 选项

当使用 IF NOT EXISTS 时,如果数据库已经存在,MariaDB 仅生成一条 warning,而不会报错。这一特性在自动化脚本中非常实用,能有效防止因重复建库导致的流程中断。

实际示例

以下通过几个直观案例展示不同场景下的执行结果:

CREATE DATABASE db1;
Query OK, 1 row affected (0.18 sec)

CREATE DATABASE db1;
ERROR 1007 (HY000): Can't create database 'db1'; database exists

CREATE OR REPLACE DATABASE db1;
Query OK, 2 rows affected (0.00 sec)

CREATE DATABASE IF NOT EXISTS db1;
Query OK, 1 row affected, 1 warning (0.01 sec)

SHOW WARNINGS;
+-------+------+----------------------------------------------+
| Level | Code | Message                                      |
+-------+------+----------------------------------------------+
| Note  | 1007 | Can't create database 'db1'; database exists |
+-------+------+----------------------------------------------+

第一条命令成功创建数据库;第二次尝试因数据库已存在而报错;使用 OR REPLACE 后,先删除旧库再创建新库,因此返回 2 rows affected;最后使用 IF NOT EXISTS,数据库已存在但不报错,仅返回一行受影响记录及一条 warning。

指定字符集与排序规则

创建数据库时可以同时自定义默认字符集和排序规则。详细配置可参考“设置字符集和排序规则”相关章节。例如:

CREATE DATABASE czech_slovak_names
    CHARACTER SET = 'keybcs2'
    COLLATE = 'keybcs2_bin';

以上命令创建的数据库将采用 keybcs2 字符集和二进制排序规则,适用于处理捷克语、斯洛伐克语等特殊字符。

总结:CREATE DATABASE 是数据库创建的基础语句,结合 IF NOT EXISTSOR REPLACE 选项,能够更灵活地控制建库行为,避免因重复创建导致的错误,省去手动先删后建的繁琐步骤。

来源:https://blog.csdn.net/weixin_36073392/article/details/115452430
上一篇MySQL创建数据库的CREATE DATABASE语句完整使用教程与实例详解 下一篇数据仓库Hive编程HiveQL数据定义修改数据库操作教程
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
金仓数据库逻辑备份实战:全库导出与模式替换全流程
数据库 · 2026-07-03

金仓数据库逻辑备份实战:全库导出与模式替换全流程

在长期的运维实践中,我越来越体会到,备份就像一份保险——平时看似无用,但关键时刻却是唯一的救命稻草。逻辑备份看似简单,可真正执行恢复时,各种陷阱接连浮现:表名大小写不一致、Schema 未正确切换、Owner 属性未同步修改……任何一个环节处理不当,最终恢复出的数据库就会与预期相去甚远。 本文将深入

金仓数据库sys_rman物理备份全流程演练与误覆盖恢复
数据库 · 2026-07-03

金仓数据库sys_rman物理备份全流程演练与误覆盖恢复

干运维这行,逻辑备份和物理备份我都接触过,但说句实在话,真正能在生产环境里扛住事儿的,还得是物理备份。逻辑备份导出的是 SQL 语句,数据量一大,那速度慢得让人抓狂,而且最关键的是,它没法做时间点恢复。物理备份不一样,它直接拷贝数据文件,再配上 WAL 归档日志,想恢复到过去哪一秒都行,这是它最硬核

Windows下将MySQL注册为系统自启服务教程
数据库 · 2026-07-03

Windows下将MySQL注册为系统自启服务教程

先说一个关键前提:务必以管理员身份运行终端,否则 mysqld --install 这条命令几乎不可能成功。问题不在于命令写错,而是 Windows 系统的用户账户控制(UAC)机制会在中途拦截——在普通 CMD 或 PowerShell 窗口执行这条命令,要么直接提示 Access is deni

Mac版Navicat中快速对比两个数据库的表结构异同
数据库 · 2026-07-03

Mac版Navicat中快速对比两个数据库的表结构异同

直接说结论:Mac 版 Navicat 和 Windows 版在表结构比对逻辑上完全一致。但默认配置下,它确实无法承受“全库一键比对上万张表”的压力。要想避免卡死、内存溢出、进度条永远停在 0%,你必须手动将表分批处理,或者利用前缀过滤来控制扫描范围。 为什么 Mac 上点击「结构同步」后界面会卡住

MySQL中UNION操作推荐用UNION ALL的原因
数据库 · 2026-07-03

MySQL中UNION操作推荐用UNION ALL的原因

MySQL中UNION与UNION ALL性能对比:别再被“保险”迷惑,差距远超预期 先给出核心结论:UNION ALL 的性能通常比 UNION 高出不止一个数量级。原因在于,UNION 在合并结果集后会自动触发去重操作,这往往伴随着隐式排序,进而产生临时表和文件排序。而 UNION ALL 则直