MySQL数据库(九)——MySQL创建数据库

数据库可以看作是一个专门存储数据对象的容器,这里的数据对象包括表、视图、触发器、存储过程等,其中表是最基本的数据对象。在 MySQL 数据库中创建数据对象之前,先要创建好数据库。

一、 CREATE DATABASE   创建数据库

语法格式如下:

CREATE DATABASE [IF NOT EXISTS] <数据库名>

[[DEFAULT] CHARACTER SET <字符集名>] [[DEFAULT] COLLATE <校对规则名>];

[ ]中的内容是可选的。语法说明如下:

<数据库名>:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,注意在 MySQL 中不区分大小写。

IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。

[DEFAULT] CHARACTER SET:指定数据库的默认字符集。

[DEFAULT] COLLATE:指定字符集的默认校对规则。

MySQL 的字符集(CHARACTER)和校对规则(COLLATION)两个不同的概念:字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式,解决排序和字符分组的问题。

字符集和校对规则是一对多的关系,每个字符集至少对应一个校对规则,MySQL 支持 39 种字符集的将近 200 种校对规则。

实例1:最简单的创建 MySQL 数据库的语句

在 MySQL 中创建一个名为 test_db 的数据库。在 MySQL 命令行客户端输入 SQL 语句CREATE DATABASE test_db;即可创建一个数据库,输入的 SQL 语句与执行结果如下。

mysql> CREATE DATABASE test_db;

Query OK, 1 row affected (0.12 sec)

若再次输入上述语句,则系统会给出错误提示信息,如下所示:

mysql> CREATE DATABASE test_db;

ERROR 1007 (HY000): Can't create database 'test_db'; database exists

MySQL 不允许在同一系统创建两个相同名称的数据库。

如果加上IF NOT EXISTS从句,则可以避免类似错误,如下所示:

mysql> CREATE DATABASE IF NOT EXISTS test_db;

Query OK, 1 row affected (0.12 sec)

实例2:创建 MySQL 数据库时指定字符集和校对规则

使用 MySQL 命令行工具创建一个测试数据库,命名为 test_db_char,指定其默认字符集为 utf8,默认校对规则为 utf8_chinese_ci(简体中文,不区分大小写),输入的 SQL 语句与执行结果如下所示:

mysql> CREATE DATABASE IF NOT EXISTS test_db_char

-> DEFAULT CHARACTER SET utf8

-> DEFAULT COLLATE utf8_chinese_ci;

Query OK, 1 row affected (0.03 sec)

这时,可以使用SHOW CREATE DATABASE查看 test_db_char 数据库的定义声明,发现该数据库的指定字符集为 utf8,运行结果如下所示:

mysql> SHOW CREATE DATABASE test_db_char;

+--------------+-----------------------------------------------------+

| Database    | Create Database                                    |

+--------------+-----------------------------------------------------+

| test_db_char | CREATE DATABASE `test_db_char` /*!40100 DEFAULT CHARACTER SET utf8 */ |

+--------------+-----------------------------------------------------+

1 row in set (0.05 sec)

为防止字符混乱的情况发生,MySQL 有时需要在创建数据库时明确指定字符集;在中国大陆地区,常用的字符集有 utf8 和 gbk。

utf8 能够存储全球的所有字符,在任何国家都可以使用,默认的校对规则为 utf8_general_ci,对于中文可以使用 utf8_general_ci。

gbk 只能存储汉语涉及到的字符,不具有全球通用性,默认的校对规则为 gbk_chinese_ci。


二、 SHOW DATABASES   查看或显示当前用户权限范围以内的数据库

查看数据库的语法格式为:

SHOW DATABASES [LIKE '数据库名'];

语法说明如下:

LIKE 从句是可选项,用于匹配指定的数据库名称。LIKE 从句可以部分匹配,也可以完全匹配。

数据库名由单引号' '包围。

实例1:查看所有数据库

列出当前用户可查看的所有数据库:

mysql> SHOW DATABASES;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sakila            |

| sys                |

| world              |

+--------------------+

6 row in set (0.22 sec)

实例2:创建并查看数据库

先创建一个名为 test_db 的数据库:

mysql> CREATE DATABASE test_db;

Query OK, 1 row affected (0.12 sec)

再使用 SHOW DATABASES 语句显示权限范围内的所有数据库名,如下所示:

mysql> SHOW DATABASES;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sakila            |

| sys                |

| test_db            |

| world              |

+--------------------+

7 row in set (0.22 sec)

你看,刚才创建的数据库已经被显示出来了。

实例3:使用 LIKE 从句

先创建三个数据库,名字分别为 test_db、db_test、db_test_db。

1) 使用 LIKE 从句,查看与 test_db 完全匹配的数据库:

mysql> SHOW DATABASES LIKE 'test_db';

+--------------------+

| Database (test_db) |

+--------------------+

| test_db            |

+--------------------+

1 row in set (0.03 sec)

2) 使用 LIKE 从句,查看名字中包含 test 的数据库:

mysql> SHOW DATABASES LIKE '%test%';

+--------------------+

| Database (%test%)  |

+--------------------+

| db_test            |

+--------------------+

| db_test_db        |

+--------------------+

| test_db            |

+--------------------+

3 row in set (0.03 sec)

3) 使用 LIKE 从句,查看名字以 db 开头的数据库:

mysql> SHOW DATABASES LIKE 'db%';

+----------------+

| Database (db%) |

+----------------+

| db_test        |

+----------------+

| db_test_db    |

+----------------+

2 row in set (0.03 sec)

4) 使用 LIKE 从句,查看名字以 db 结尾的数据库:

mysql> SHOW DATABASES LIKE '%db';

+----------------+

| Database (%db) |

+----------------+

| db_test_db    |

+----------------+

| test_db        |

+----------------+

2 row in set (0.03 sec)


三、 ALTER DATABASE 或 ALTER SCHEMA   修改数据库的相关参数

修改数据库的语法格式为:

ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> |

[ DEFAULT ] COLLATE <校对规则名>}

语法说明如下:

ALTER DATABASE 用于更改数据库的全局特性。这些特性存储在数据库目录的 db.opt 文件中。

使用 ALTER DATABASE 需要获得数据库 ALTER 权限。

数据库名称可以忽略,此时语句对应于默认数据库。

CHARACTER SET 子句用于更改默认的数据库字符集。

修改数据库的字符集

查看 test_db 数据库的定义声明的执行结果如下所示:

mysql> SHOW CREATE DATABASE test_db;

+----------+--------------------------------------------------------+

| Database | Create Database                                        |

+----------+--------------------------------------------------------+

| test_db  | CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET utf8 */|

+----------+--------------------------------------------------------+

1 row in set (0.05 sec)

【例 1】使用命令行工具将数据库 test_db 的指定字符集修改为 gb2312,默认校对规则修改为 utf8_unicode_ci,输入 SQL 语句与执行结果如下所示:

mysql> CREATE DATABASE test_db

    -> DEFAULT CHARACTER SET gb2312

    -> DEFAULT COLLATE gb2312_chinese_ci;

mysql> SHOW CREATE DATABASE test_db;

+----------+--------------------------------------------------------+

| Database | Create Database                                        |

+----------+--------------------------------------------------------+

| test_db  | CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET gb2312 */|

+----------+--------------------------------------------------------+

1 row in set (0.00 sec)


四、 DROP DATABASE 或 DROP SCHEMA   删除数据库的相关参数

语法格式为:

DROP DATABASE [ IF EXISTS ] <数据库名>

语法说明如下:

<数据库名>:指定要删除的数据库名。

IF EXISTS:用于防止当数据库不存在时发生错误。

DROP DATABASE:删除数据库中的所有表格并同时删除数据库。使用此语句时要非常小心,以免错误删除。如果要使用 DROP DATABASE,需要获得数据库 DROP 权限。

注意:MySQL 安装后,系统会自动创建名为 information_schema 和 mysql 的两个系统数据库,系统数据库存放一些和数据库相关的信息,如果删除了这两个数据库,MySQL 将不能正常工作。

MySQL删除数据库实例

下面在 MySQL 中创建一个测试数据库 test_db_del。

mysql> CREATE DATABASE test_db_del;

Query OK, 1 row affected (0.08 sec)

mysql> SHOW DATABASES;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sakila            |

| sys                |

| test_db            |

| test_db_char      |

| test_db_del        |

| world              |

+--------------------+

9 rows in set (0.00 sec)

使用命令行工具将数据库 test_db_del 从数据库列表中删除,输入的 SQL 语句与执行结果如下所示:

mysql> DROP DATABASE test_db_del;

Query OK, 0 rows affected (0.57 sec)

mysql> SHOW DATABASES;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sakila            |

| sys                |

| test_db            |

| test_db_char      |

| world              |

+--------------------+

8 rows in set (0.00 sec)

此时数据库 test_db_del 不存在。再次执行相同的命令,直接使用 DROP DATABASE test_db_del,系统会报错,如下所示:

mysql> DROP DATABASE test_db_del;

ERROR 1008 (HY000): Can't drop database 'test_db_del'; database doesn't exist

如果使用IF EXISTS从句,可以防止系统报此类错误,如下所示:

mysql> DROP DATABASE IF EXISTS test_db_del;

Query OK, 0 rows affected, 1 warning (0.00 sec)


五、USE   完成一个数据库到另一个数据库的跳转。

当用 CREATE DATABASE 语句创建数据库之后,该数据库不会自动成为当前数据库,需要用 USE 来指定当前数据库。其语法格式为:

USE <数据库名>

该语句可以通知 MySQL 把<数据库名>所指示的数据库作为当前数据库。该数据库保持为默认数据库,直到语段的结尾,或者直到遇见一个不同的 USE 语句。

只有使用 USE 语句来指定某个数据库作为当前数据库之后,才能对该数据库及其存储的数据对象执行操作。

【实例】使用命令行工具将数据库 test_db 设置为默认数据库,输入的 SQL 语句与执行结果如下所示:

mysql> USE test_db;

Database changed

原文地址

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容