二、 数据库的基本操作

时间:2024-04-03 10:04:01

命令使用注意事项

我们知道MySQL的基本运行过程就是:通过客户端程序发送命令给服务器程序,服务器程序按照接收的命令去操作实际的数据。在我们使用黑框框启动了MySQL客户端程序之后,界面上会一直显示一行mysql>的提示符,你可以在它后边输入我们的命令然后按一下回车键,在书写命令的时候需要注意下边这几点:

  1. 命令结束符号。

在书写完一个命令之后需要以下边这几个符号之一结尾:

;
\g
\G
比如说我们执行一个简单的查询当前时间的命令:

mysql> SELECT NOW();
±--------------------+
| NOW() |
±--------------------+
| 2018-02-06 17:50:55 |
±--------------------+
1 row in set (0.00 sec)
mysql>
其中的SELECT意味着这是一个查询命令,NOW()是MySQL内置的函数,用于返回当前时间。不过我们现在并不是深究具体的某个命令是什么意思,只是想介绍一下书写命令时需要注意的一些事情。结果中1 row in set (0.00 sec)的意思是结果只有1行数据,用时0.00秒。使用\g可以起到一样的效果:

mysql> SELECT NOW()\g
±--------------------+
| NOW() |
±--------------------+
| 2018-02-06 17:50:55 |
±--------------------+
1 row in set (0.00 sec)
mysql>
\G有一点特殊,它并不以表格的形式返回查询数据,而是以垂直的形式展现查询数据,这包含两个方面的意思:

如果查询结果中包含多个行的数据,各个行的数据之间会用一堆一星号*隔开。

每行中的每一个列的数据将按照列名: 列值的形式给出。

比如上边的查询用\G结尾的效果就是这样:

mysql> SELECT NOW()\G
*************************** 1. row ***************************
NOW(): 2018-02-06 17:51:51
1 row in set (0.00 sec)
mysql>
如果查询包含的列非常多的话,使用\G可以让我们看清结果。其实用哪个符号作为结束符号都是无所谓的,只是在展示结果的时候的格式不一样而已,所以一般我们平时都使用分号;作为命令结束符了~。

  1. 命令可以随意换行。

并不是按了回车键就提交命令了,只要按回车键的时候输入的语句里没有;、\g或者\G就算是语句没结束。比如上边查询当前时间的命令还可以这么写:

mysql> SELECT
-> NOW()
-> ;
±--------------------+
| NOW() |
±--------------------+
| 2018-02-06 17:57:15 |
±--------------------+
1 row in set (0.00 sec)
mysql>
3. 可以一次提交多个命令

我们可以在一条语句里写多个命令(命令之间用上面说的结束符分隔),比如这样:

mysql> SELECT NOW(); SELECT NOW(); SELECT NOW();
±--------------------+
| NOW() |
±--------------------+
| 2018-02-06 18:00:05 |
±--------------------+
1 row in set (0.00 sec)
±--------------------+
| NOW() |
±--------------------+
| 2018-02-06 18:00:05 |
±--------------------+
1 row in set (0.00 sec)
±--------------------+
| NOW() |
±--------------------+
| 2018-02-06 18:00:05 |
±--------------------+
1 row in set (0.00 sec)
mysql>
连着输入了3个查询当前时间的命令,只要没按回车键,就不会提交命令。

小贴士:

后边我们还会介绍把命令都写在文件里,然后再批量执行文件中的命令,那个感觉更爽!
4. 使用\c清除本次操作。

如果你想放弃本次编写的命令,可以使用\c来清除,比如这样:

mysql> SELECT NOW()\c
mysql>
如果不使用\c,那客户端会以为这是一个多行命令,还在一直傻傻的等你输入命令~

  1. 大小写问题。

MySQL默认对命令的大小写并没有限制,也就是说我们这样查询当前时间也是可以的:

mysql> select now();
±--------------------+
| now() |
±--------------------+
| 2018-02-06 18:23:01 |
±--------------------+
1 row in set (0.00 sec)
mysql>
不过按照习俗,这些命令、函数什么的都是要大写的,而一些名称类的东西,比如数据库名,表名、列名啥的都是要小写的,更多具体的书写规范等我们遇着再详细介绍。

  1. 字符串的表示。

在命令里有时会使用到字符串,我们可以使用单引号’'或者双引号""把字符串内容引起来,比如这样:

mysql> SELECT ‘aaa’;
±----+
| aaa |
±----+
| aaa |
±----+
1 row in set (0.00 sec)
mysql> SELECT “aaa”;
±----+
| aaa |
±----+
| aaa |
±----+
1 row in set (0.00 sec)
mysql>
这个语句只是简单的把字符串’aaa’又输出来了而已。但是一定要在字符串内容上加上引号,不然的话MySQL服务器会把它当作列名,比如这样就会返回一个错误:

mysql> SELECT aaa;
ERROR 1054 (42S22): Unknown column ‘aaa’ in ‘field list’
mysql>
但是MySQL中有一种叫ANSI_QUOTES的模式,如果开启了这种模式,双引号就有其他特殊的用途了,可能你并不能看懂我在说什么,但是这都不重要,重要的是建议你最好使用单引号来表示字符串~

当一条命令发送给了MySQL服务器之后,服务器处理完后就会给你发送回来响应的结果,然后显示到界面上。然后你就可以接着输入下一条命令了。

数据库相关操作

MySQL中把某种类型的表的集合称为一个数据库,MySQL服务器管理着若干个数据库,每个数据库下都可以有若干个表,画个图就是这样:
二、 数据库的基本操作

image_1c4jjlck0101k1lbq100u1ggd4ml46.png-7
展示数据库

在我们刚刚安装好MySQL的时候,它已经内建了许多数据库和表了,我们可以使用下边这个命令来看一下都有哪些数据库:

SHOW DATABASES;
我自己的电脑上安装的MySQL版本是5.7.21,看一下在这个版本里内建了哪些数据库(启动客户端软件,用你的用户名和密码登录后输入命令):

mysql> SHOW DATABASES;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
±-------------------+
4 rows in set (0.01 sec)
mysql>
可以看到,这一版本的MySQL已经为我们内建了4个数据库,这些数据库都是给MySQL自己使用的,如果我们想使用MySQL存放自己的数据的话,首先需要创建一个属于自己的数据库。

创建数据库

创建数据库的语法贼简单:

CREATE DATABASE 数据库名;
来实际操作一下:

mysql> CREATE DATABASE xiaohaizi;
Query OK, 1 row affected (0.00 sec)

mysql>
我把我的名字xiaohaizi作为了数据库名称,敲完命令回车之后提示了一个Query OK, 1 row affected (0.00 sec)说明数据库创建成功了。然后我们再用SHOW DATABASES的命令查看一下现在有哪些数据库:

mysql> SHOW DATABASES;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| xiaohaizi |
±-------------------+
5 rows in set (0.00 sec)
mysql>
看到我们自己创建的数据库xiaohaizi就已经在列表里了。

IF NOT EXISTS

我们在一个数据库已经存在的情况下再使用CREATE DATABASE去创建这个数据库会产生错误:

mysql> CREATE DATABASE xiaohaizi;
ERROR 1007 (HY000): Can’t create database ‘xiaohaizi’; database exists
mysql>
执行结果提示了一个ERROR,意思是数据库xiaohaizi已经存在!所以如果我们并不清楚数据库是否存在,可以使用下边的语句来创建数据库:

CREATE DATABASE IF NOT EXISTS 数据库名;
这个命令的意思是如果指定的数据库不存在的话就创建它,否则什么都不做。我们试一试:

mysql> CREATE DATABASE IF NOT EXISTS xiaohaizi;
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql>
可以看到语句执行成功了,报的ERROR错误也没有了,只是结果中有1个warning而已。这个warning只是MySQL善意的提醒我们数据库xiaohaizi不存在而已,并不会影响语句的执行。

小贴士:

前边说过MySQL的命令可以多条一起执行,可以在黑框框中一次输入多个命令,也可以把好多命令放到一个文件中执行。如果某一条命令的执行结果是产生了一个ERROR,MySQL会停止执行该命令之后的命令,但是如果仅仅是在执行结果中有warning的话,是不会中断执行的。
切换当前数据库

对于每一个连接到MySQL服务器的客户端,都有一个当前数据库的概念,我们创建的表默认都会被放到当前数据库中,切换当前数据库的命令也贼简单:

USE 数据库名称;
所以在介绍创建表之前,我们应该把当前数据库切换到刚刚创建的数据库xiaohaizi上:

mysql> USE xiaohaizi;
Database changed
mysql>
看到显示了Database changed说明当前数据库已经切换成功了。需要注意的是,在退出当前客户端之后,也就是你输入了exit或者quit命令之后或者直接把当前的黑框框页面关掉,当你再次调用mysql -h 主机名 -u 用户名 -p 密码的时候,相当于重新开启了一个客户端,需要重新调用USE 数据库名称的命令来选择一下当前数据库。

删除数据库

如果你创建的数据库没用了,我们还可以把它删掉,语法如下:

DROP DATABASE 数据库名;
在真实的工作环境里,在删除数据库之前你需要先拿体温计量量是不是发高烧了,然后再找至少两个人核实一下自己是不是发烧了,然后你才敢执行删除数据库的命令。删除数据库意味着里边的表就都被删除了,也就意味着你的数据都没了,所以是个极其危险的操作,使用时需要极其谨慎。不过我们这是学习环境,而且刚刚创建了xiaohaizi数据库,什么表都没往里头放,删了就删了吧:

mysql> DROP DATABASE xiaohaizi;
Query OK, 0 rows affected (0.01 sec)

mysql>
然后看一下现在还有哪些数据库:

mysql> SHOW DATABASES;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
±-------------------+
4 rows in set (0.01 sec)
mysql>
可以看到我们前边创建的xiaohaizi数据库就没有啦。

IF EXISTS

如果某个数据库并不存在,我们仍旧调用DROP TABLE语句去删除它,会报错的:

mysql> DROP DATABASE xiaohaizi;
ERROR 1008 (HY000): Can’t drop database ‘xiaohaizi’; database doesn’t exist
mysql>
如果想避免这种报错,可以使用这种形式的语句来删除数据库:

DROP DATABASE IF EXISTS 表名;
再次删除一下xiaohaizi:

mysql> DROP DATABASE IF EXISTS xiaohaizi;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>
这回就不会报错啦!演示完删除数据库的流程之后还是把xiaohaizi数据库创建出来并且切换到当前数据库吧,毕竟我们之后还要在这个数据库里创建各种表呢:

mysql> CREATE DATABASE xiaohaizi;
Query OK, 1 row affected (0.01 sec)

mysql>
总结

MySQL的基本运行过程是:客户端程序发送命令给服务器程序,服务器程序按照接收的命令去操作实际的数据,然后把结果返回到客户端。

在MySQL客户端输入命令时有一些注意事项:

;、\g、\G都可以作为命令结束符号。

只要按回车键的时候输入的语句里没有;、\g或者\G就算是语句没结束,可以换行后继续输入命令。

可以一次提交多个命令。

使用\c清除本次操作。

MySQL默认对命令的大小写并没有限制。

字符串可以被单引号’或者双引号"引起来,但是我们推荐使用单引号’。

MySQL服务器可以包含若干数据库,每个数据库中可以包含若干个表。

数据库相关操作如下:

展示数据库:SHOW DATABASES;
创建数据库:CREATE DATABASE 数据库名;
切换当前数据库:USE 数据库名
删除数据库:DROP DATABASE 数据库名
IF EXISTS 和 IF NOT EXISTS在创建和删除数据库时使用可以避免ERROR产生。