学习MySQL官方文档(一)

前提:看这篇文档之前我已经装了一台虚拟机,并在虚拟机上装好了mysql服务,还装了Navicat并连接上虚拟机的mysql服务

1、连接到服务器和从服务器断开连接

shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 25338 to server version: 5.7.29-standard

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

host是要连接的服务器的ip,如果是在运行MySQL的同一台计算机上登录,则可以省略主机,只需使用以下命令:

shell> mysql -u user -p

如果在尝试登录时收到诸如ERROR 2002(HY000)之类的错误消息 :无法通过套接字’/tmp/mysql.sock’(2)连接到本地MySQL服务器,则意味着该MySQL服务器守护程序(Unix)或服务(Windows)未运行。

从服务器断开连接

mysql> QUIT
Bye

2、使用几种查询来熟悉mysql的工作方式

mysql> SELECT VERSION(), CURRENT_DATE;
+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 5.7.28    | 2019-10-22   |
+-----------+--------------+
1 row in set (0.01 sec)
mysql> SELECT SIN(PI()/4), (4+1)*5;
+--------------------+---------+
| SIN(PI()/4)        | (4+1)*5 |
+--------------------+---------+
| 0.7071067811865475 |      25 |
+--------------------+---------+
1 row in set (0.00 sec)

3、创建和使用数据库
查询服务器上有哪些数据库:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| menagerie          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

切换数据库

mysql> use menagerie
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

如果没有权限访问数据库,则需要向管理员申请,管理员需要执行语句:

mysql> GRANT ALL ON menagerie.* TO 'your_mysql_name'@'your_client_host';

其中your_mysql_name是分配给你的MySQL用户名,your_client_host是连接服务器的主机。

创建数据库:

mysql> CREATE DATABASE menagerie;

每次登陆mysql服务器之后都需要切换到需要使用的数据库,也可以在登录语句中直接添加库:

shell> mysql -h host -u user -p menagerie
Enter password: ********

查看当前选择的数据库:

mysql>  SELECT DATABASE()
    -> ;
+------------+
| DATABASE() |
+------------+
| menagerie  |
+------------+
1 row in set (0.00 sec)

4、查看数据库中的表:

mysql> SHOW TABLES;
+---------------------+
| Tables_in_menagerie |
+---------------------+
| pet                 |
+---------------------+
1 row in 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;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| NAME    | varchar(20) | YES  |     | NULL    |       |
| OWNER   | varchar(20) | YES  |     | NULL    |       |
| species | varchar(20) | YES  |     | NULL    |       |
| sex     | char(1)     | YES  |     | NULL    |       |
| birth   | date        | YES  |     | NULL    |       |
| death   | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

5、向表中添加数据: LOAD DATA和 INSERT两种方式
方式一:创建一个文本文件pet.txt ,每行包含一个记录,其值由制表符分隔,并按CREATE TABLE语句中列的列出顺序给出,然后将文本文件加载pet.txt到 pet表中:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;

方式二:使用如下INSERT语句添加新记录 :

mysql> INSERT INTO pet
       VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

6、从表中检索数据
SELECT语句用于从表中提取信息。该语句的一般形式为:

SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy;

what_to_select指示您要查看的内容(列表,也可以用 * 可以表示“ 所有列”)。which_table表示表名。WHERE 子句是可选的。如果存在,则 conditions_to_satisfy指定行必须满足的一个或多个条件才有资格进行检索。

查询所有数据:

mysql> SELECT * FROM pet;

UPDATE语句修复错误的记录 :

mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';

带条件的基本查询:

mysql> SELECT * FROM pet WHERE name = 'Bowser';

字符串比较通常不区分大小写,因此您可以将名称指定为’bowser’, 'BOWSER’等等。查询结果相同

使用AND 逻辑运算符组合条件查询:

mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';

使用OR 逻辑运算符组合条件查询:

mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';

AND并且 OR可以混合使用,AND优先级高于 OR。如果同时使用这两个运算符,则最好使用括号来明确指示应如何对条件进行分组:

mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')
       OR (species = 'dog' AND sex = 'f');

查询指定列:

mysql> SELECT name, birth FROM pet;

去重查询列

mysql> SELECT DISTINCT owner FROM pet;

带条件查询列:

mysql> SELECT name, species, birth FROM pet
       WHERE species = 'dog' OR species = 'cat';

排序查询:

mysql> SELECT name, birth FROM pet ORDER BY birth;

注意:在字符类型列上的排序通常以不区分大小写的方式执行,所以如果想区分大小写排序,可以这样:ORDER BY BINARY col_name
默认的排序顺序是升序,如果要降序排序,请将DESC关键字添加到要排序 的列的名称上:

mysql> SELECT name, birth FROM pet ORDER BY birth DESC;

对多个列进行排序,同时也可以对不同的列采用不同的排序方式(升或降),比如:

mysql> SELECT name, species, birth FROM pet
       ORDER BY species, birth DESC;

DESC关键字仅适用于列名紧接其前(birth); 它不会影响species列的排序顺序(没写默认是ASC)。

日期计算:
TIMESTAMPDIFF()功能:求两个日期的差值。它的参数是要表示结果的单位,以及两个日期。以下查询为每只宠物显示出生日期,当前日期和年龄(以岁为单位)。 别名(age)是用来表示输出列标签。CURDATE()表示当前日期。

mysql> SELECT name, birth, CURDATE(),
       TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
       FROM pet;

还可以添加排序:

mysql> SELECT name, birth, CURDATE(),
       TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
       FROM pet ORDER BY name;

查询使用death IS NOT NULL而不是,death <> NULL,因为NULL是一个特殊值,无法使用常规比较运算符进行比较:

mysql> SELECT name, birth, death,
       TIMESTAMPDIFF(YEAR,birth,death) AS age
       FROM pet WHERE death IS NOT NULL ORDER BY age;

MySQL提供了用于提取日期的很多函数,如 YEAR(), MONTH()和 DAYOFMONTH()。这里先看下MONTH()是怎么做的

mysql> SELECT name, birth, MONTH(birth) FROM pet;
+----------+------------+--------------+
| name     | birth      | MONTH(birth) |
+----------+------------+--------------+
| Fluffy   | 1993-02-04 |            2 |
| Claws    | 1994-03-17 |            3 |
| Buffy    | 1989-05-13 |            5 |
| Fang     | 1990-08-27 |            8 |
| Bowser   | 1989-08-31 |            8 |
| Chirpy   | 1998-09-11 |            9 |
| Whistler | 1997-12-09 |           12 |
| Slim     | 1996-04-29 |            4 |
| Puffball | 1999-03-30 |            3 |
+----------+------------+--------------+

查询5月出生的宠物:

mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
+-------+------------+
| name  | birth      |
+-------+------------+
| Buffy | 1989-05-13 |
+-------+------------+

如果当前月份为十二月,查出下个月生日的宠物,不能仅在月份号(12)上加上一个,可以编写一个函数查询无论当前月份是什么都可以使用的语句, DATE_ADD()函数可以将时间间隔(参数1)添加到给定的日期(参数2),所以sql可以写成:

mysql> SELECT name, birth FROM pet
       WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));

另一种方法: MOD()取余,MOD(MONTH(CURDATE()), 12)返回的是0~11的值,所以要+1,比如当前月是12,算出来余数为0,+1就是一月,是当月的下个月

mysql> SELECT name, birth FROM pet
       WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;

如果使用日期无效,则计算将失败并产生警告:

mysql> SELECT '2018-10-31' + INTERVAL 1 DAY;
+-------------------------------+
| '2018-10-31' + INTERVAL 1 DAY |
+-------------------------------+
| 2018-11-01                    |
+-------------------------------+
mysql> SELECT '2018-10-32' + INTERVAL 1 DAY;
+-------------------------------+
| '2018-10-32' + INTERVAL 1 DAY |
+-------------------------------+
| NULL                          |
+-------------------------------+
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2018-10-32' |
+---------+------+----------------------------------------+
发布了86 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43365369/article/details/102686687