首页 > MySQL > MySQL 数据库的创建选择与删除
2009七月8

MySQL 数据库的创建选择与删除

SQL规范分为三大部分:数据库定义语言(DDL),数据操纵语言(DML)和数据控制语言(DCL),今天我们终于开始接触这个数据库定义语言DDL了。本篇日志主要介绍一下MySQL关于数据库的创建,选择数据库,与删除数据库的一些操作。因为我主要记录的是命令方式,所以基于界面操作的就不讲了,大家用的可视化工具也不尽相同,请大家自己移动鼠标,点击创建,选择或删除。

MySQL 数据库的创建选择与删除

创建数据库:

MySQL的任何事情都是以数据库开始的,数据库我们可以理解为“书架”,表则可以理解为“书架上的书”,而表中的数据则可以理解为“书中的内容”。也就是说数据库是容器。当我们输入完用户名密码连接到MySQL后,可以使用CREATEDATABASE命令来创建一个新的MySQL数据库。例如:

create database xiaoxiaozi;
/*
Query OK, 1 row affected (0.06 sec)
*/

这样就创建了一个数据库,数据库名为”xiaoxiaozi”。在文件系统中,MySQL的数据存储区将以目录方式表示MySQL数据库。也就是说其实数据库在文件系统中的表现为”文件夹”。所以说我们在给数据库命名的时候一定要小心,再小心。其命名规范与操作系统的红豆目录名字的规范相一致。

例如:在Windows系统中不允许文件和目录名中有”\,/,:,*,?,<,>,|”这些字符,在MySQL数据库名字中这些字母会被自动删除。且数据库的名字不能太长(不能超过64个字符),一般除非故意搞破坏,没有人建这么长名字的数据库,也不好记不是。且包含特殊字符的名字或者是全部由数字或保留字组成的名字必须用反引号包起来

create database xiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozi;
/*
数据库名过长
ERROR 1102 (42000): Incorrect database name 'xiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozixiaoxiaozi'
*/


create database 123456;
/*
数据库名为纯数字,需要用反引号包起来
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123456' at line 1
*/


create database `123456`;
/*
正确创建数据库名,用反引号将纯数字包起来
Query OK, 1 row affected (0.00 sec)
*/

且数据库的名字不能相同,如果创建一个库名与现有数据库名重复,系统会提示该数据库已经存在,创建失败。

create database `123456`;
/*
第一次创建,创建成功
Query OK, 1 row affected (0.01 sec)
*/

create database `123456`;
/*
第二次创建,创建失败
ERROR 1007 (HY000): Can't create database '123456'; database exists
*/

那我们创建数据库的时候,怎么样避免库名已经存在这个错误信息呢?有两种方式:

  • 在创建数据库之前先用 show databases;语句查询现有数据库名都有哪些,避免建立失败。
  • 在创建数据库时,使用if not exists语句指明,只有当数据库不存在时才创建。
/*if not exists*/
create database `123456`;
/*
第一次创建数据库,成功
Query OK, 1 row affected (0.00 sec)
*/

create database if not exists `123456`;
/*
如果数据库不存在才创建,执行SQL成功,有一个警告
Query OK, 0 rows affected, 1 warning (0.00 sec)
*/


/*show databases示例*/
show databases;
/*
+------------+
| Database   |
+------------+
| 123456     |
| log        |
| manager    |
| mysql      |
| qhcms      |
| test       |
| xiaoxiaozi |
+------------+
7 rows in set (0.00 sec)
*/

选择需要的数据库:

使用USE语句将会选择一个数据库,使它成为所有事务的当前数据库。

use xiaoxiaozi;
/*
提示数据库已改变
Database changed
*/

同时,我们也可以在查询表的时候再告诉MySQL我们这些表是哪些数据库里的表。

select Host, Db, User From mysql.db;
/*
指明,在mysql数据库的db表中查询Host,Db,User字段
+----------------------------+---------+-------+
| Host                       | Db      | User  |
+----------------------------+---------+-------+
| %                          | test    |       |
| %                          | test\_% |       |
| 192.168.0.133              | qhcms   | cms   |
| apt2-j3.dev.corp.qihoo.net | qhcms   | cms   |
| localhost                  | log     | log   |
| localhost                  | manager | mambo |
| localhost                  | qhcms   | cms   |
+----------------------------+---------+-------+
7 rows in set (0.05 sec)
*/

上面这条语句,与如下两条语句组合的作用是相同的

use mysql;
/*
选择mysql数据库
Database changed
*/

select Host, Db, User From  db;    
/*
在db表里面选择Host, Db, User字段
+----------------------------+---------+-------+
| Host                       | Db      | User  |
+----------------------------+---------+-------+
| %                          | test    |       |
| %                          | test\_% |       |
| 192.168.0.133              | qhcms   | cms   |
| apt2-j3.dev.corp.qihoo.net | qhcms   | cms   |
| localhost                  | log     | log   |
| localhost                  | manager | mambo |
| localhost                  | qhcms   | cms   |
+----------------------------+---------+-------+
7 rows in set (0.00 sec)
*/

删除数据库:

这是一个危险的动作,如果大家要使用的话,一定要先确认这个数据库是自己的,并且是自己真的想删的,因为一旦删除数据库,是连其内部的表数据一起删除的。一旦删除就真的没了,所以一定要小心,再小心。

其实删除数据库的命令很是简单 drop database database_name; 不过要删一个数据库,如果其不存在的话,系统是会报错的,这个时候我们可以借助if exists来判断一下数据库是否存在。

drop database xiaoxiaozi;
/*
第一次删除xiaoxiaozi数据库
Query OK, 0 rows affected (0.00 sec)
*/

drop database xiaoxiaozi;
/*
第二次删除失败,因为此时该数据库已经不存在了
ERROR 1008 (HY000): Can't drop database 'xiaoxiaozi'; database doesn't exist
*/

drop database if exists xiaoxiaozi;
/*
删除的时候先判断存不存在,如果不存在执行删除
Query OK, 0 rows affected, 1 warning (0.00 sec)
*/

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/07/08/1096/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

12 Responses to “MySQL 数据库的创建选择与删除”

  1. #1 LAONB 回复 | 引用 Post:2009-07-09 09:54

    昨天看到你的公告说要写MYSQL,我就等啊等啊,终于等到了,只块知识我需要恶补 :arrow:

    [回复]

  2. #2 simaopig 回复 | 引用 Post:2009-07-09 10:11

    @LAONB
    呵呵,最近要一直写一些MySQL的东西了。否则越积越多就懒得写了。。

    [回复]

  3. #3 micogle 回复 | 引用 Post:2009-07-09 10:23

    基础教程~~~

    [回复]

  4. #4 micogle 回复 | 引用 Post:2009-07-09 10:24

    我换邮箱了~~估计评论得重新审核吧

    [回复]

  5. #5 simaopig 回复 | 引用 Post:2009-07-09 10:26

    @micogle
    基础很重要。我正在一点点的往深了看。现在还很浅。呵呵。 :)

    [回复]

  6. #6 simaopig 回复 | 引用 Post:2009-07-09 10:27

    @micogle
    是滴,曾经我也换邮箱来着。也到处告诉别人。呵呵。

    [回复]

  7. #7 bolo 回复 | 引用 Post:2009-07-09 20:48

    学习了,这个代码高亮插件很不错啊

    [回复]

  8. #8 LAONB 回复 | 引用 Post:2009-07-09 21:33

    @bolo
    我不发代码,又可以少装一个插件。

    [回复]

  9. #9 simaopig 回复 | 引用 Post:2009-07-09 21:45

    @bolo
    还是原来的那个插件。听LAONB的话,换了个样式。呵呵。

    [回复]

  10. #10 simaopig 回复 | 引用 Post:2009-07-09 21:45

    @LAONB
    是啊。我不发歌曲,和1t1g比,我也少个插件。呵呵 :D

    [回复]

  11. #11 Lxhome 回复 | 引用 Post:2009-07-09 23:00

    LAONB同学可以评选为2009年度,最勤劳的博主了

    [回复]

  12. #12 simaopig 回复 | 引用 Post:2009-07-09 23:21

    @Lxhome
    是啊,LaoNB很勤劳,很认真。值得大家学习啊。哈哈。

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)