3.1. 连接与断开服务器
- 连接服务器
shell> mysql -h host -u user -p
Enter password: ********
shell> mysql -h host -u user -pyourpwd dbname
- 断开服务器,QUIT (或\q)
mysql> QUIT
Bye
- unix断开服务器:
control-D
3.2. 输入查询
了解几个mysql如何工作的查询语句(连接服务器后)
- 查询服务器的版本号和当前日期:
mysql> SELECT VERSION(),CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 5.5.53 | 2018-05-08 |
+-----------+--------------+
1 row in set (0.02 sec)
一个命令通常由SQL语句组成,随后跟着一个分号。(有一些例外不需要分号。比如QUIT。)
能够以大小写输入关键词,以下命令等价:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;
- mysql用作一个简单的计算器:
mysql> select sin(pi()/4),(4+1)*5;
+--------------------+---------+
| sin(pi()/4) | (4+1)*5 |
+--------------------+---------+
| 0.7071067811865475 | 25 |
+--------------------+---------+
1 row in set (0.12 sec)
- 在一行上输入多条语句,只需要以一个分号间隔开各语句:
mysql> SELECT VERSION();SELECT NOW();
+-----------+
| VERSION() |
+-----------+
| 5.5.53 |
+-----------+
1 row in set (0.00 sec)
+---------------------+
| NOW() |
+---------------------+
| 2018-05-08 10:46:43 |
+---------------------+
1 row in set (0.02 sec)
- 不必在一个行内给出全部命令,mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束。(换句话说,mysql接受自由格式的输入:它收集输入行但直到看见分号才执行。)
mysql> SELECT USER()
-> ,CURRENT_DATE;
+----------------+--------------+
| USER() | CURRENT_DATE |
+----------------+--------------+
| root@localhost | 2018-05-08 |
+----------------+--------------+
1 row in set (0.02 sec)
注意提示符如何从mysql>变为->,这正是mysql如何指出它没见到完整的语句并且正在等待剩余的部分。
如果你决定不想执行正在输入过程中的一个命令,输入\c取消它:
mysql> SELECT
-> USER()
-> \c
mysql>
- 下表显示出可以看见的各个提示符并简述它们所表示的mysql的状态:
提示符 | 含义 |
---|---|
mysql> | 准备好接受新命令。 |
‘> | 等待下一行,等待以单引号(“’”)开始的字符串的结束。 |
“> | 等待下一行,等待以双引号(“””)开始的字符串的结束。 |
`> | 等待下一行,等待以双引号(“`”)开始的字符串的结束。 |
/*> | 等待下一行,等待以/*开始的注释的结束。 |
mysql> '
'> '
-> "
"> "
-> `
`> `
-> /*
/*> */
->
示例:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'> '\c
mysql>
出现以上问题时,不能只是输入\c,因为mysql作为它正在收集的字符串的一部分来解释它!相反,应输入关闭的引号字符(这样mysql知道你完成了字符串),然后输入\c
如果你错误地输入一个未终止的字符串,任何后面输入的行将要被mysql忽略(意味着断连或取消命令将不起作用):
mysql> `
`> \c
`> QUIT
3.3. 创建并使用数据库
- 查询数据库
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
数据库列表可能不同;mysql是必需的,描述用户访问权限;test数据库经常作为用户试身手的工作区。
如果没有SHOW DATABASES权限,则不能看见所有数据库
- 访问数据库
mysql> USE TEST
Database changed
USE类似QUIT不需要分号。(给分号也无碍)
USE语句必须在一个单行上给出:
mysql> USE
ERROR:
USE must be followed by a database name
- 创建数据库
mysql> CREATE DATABASE dbname;
- 创建表
查询表
mysql> SHOW TABLES;
Empty set (0.00 sec)
创建表
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
查询表结构
mysql> DESCRIBE pet;
将数据装入表中
创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,使用\N(反斜线,字母N)表示NULL值
Whistler Gwen bird \N 1997-12-09 \N
要想将文本文件“pet.txt”装载到pet表中,使用这个命令:
mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
-> LINES TERMINATED BY '\r\n'; //如果用Windows中的编辑器(使用\r\n做为行的结束符)创建文件
示例:
mysql> LOAD DATA LOCAL INFILE 'D:\pet.txt' INTO TABLE PET
-> LINES TERMINATED BY '\r\n';
mysql> select * from pet;
+----------------------+--------+---------+------+------------+-------+
| name | owner | SPECIES | sex | birth | death |
+----------------------+--------+---------+------+------------+-------+
| "whistler" | "Gwen" | "bird" | NULL | 1997-12-09 | NULL |
+----------------------+--------+---------+------+------------+-------+
3.3.4. 从表检索信息
- 去重:增加关键字DISTINCT检索出每个唯一的输出记录:
mysql> SELECT DISTINCT owner FROM pet;
- 排序:多个字段排序
mysql> SELECT * FROM tbname ORDER BY col1,col2 DESC,BINARY col3 DESC;
按字母大小写排序:ORDER BY BINARY col_name
,默认大写为顺序,小写为倒叙
mysql> select * from orders order by order_no,user_id desc,binary word desc;
+----+---------+----------+------+
| id | user_id | order_no | word |
+----+---------+----------+------+
| 47 | 1 | 1 | |
| 50 | 4 | 2 | |
| 49 | 3 | 3 | |
| 48 | 2 | 3 | a |
| 51 | 2 | 3 | A |
+----+---------+----------+------+