前言
内容有点多,建议收藏起来再看。
这次学习和分享的部分是MySQL8.0官方文档的第三章里的创建和使用数据库和常见查询示例,地址是:
https://dev.mysql.com/doc/refman/8.0/en/tutorial.html
如果关于MAC版本的MySQL的安装有不懂的,可以看我之前的这篇博客https://blog.csdn.net/qq_37924224/article/details/105288363。
OK,上正文。也可以直接通过目录进行跳转哦
目录
MySQL的基本操作(针对小白2)
前言
创建和使用数据库
创建,查看,选择和删除数据库
展示,创建和删除表格
将数据加载到表中,表中数据全清空和特定行的清空
从表中检索信息
选择所有数据
选择特定行
选择特定列
排序行
日期计算
模式匹配
计数行
获取有关数据库和表的信息
结束语
创建和使用数据库
创建,查看,选择和删除数据库
创建数据库:CREATE DATABASE XXX;
mysql> CREATE DATABASE menagerie;
Query OK, 1 row affected (0.01 sec)
1
2
查看数据库:SHOW DATABASES;
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| menagerie |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
使用数据库:USE XXX
mysql> USE menagerie
Database changed
1
2
删除数据库:DROP DATABASE XXX
mysql> DROP DATABASE menagerie;
Query OK, 0 rows affected (0.00 sec)
1
2
展示,创建和删除表格
在上面的USE menagerie之后哈
展示库里的表:SHOW TABLES;
mysql> SHOW TABLES;
Empty set (0.00 sec)
1
2
创建表:CREATE TABLE XXX(。。。)
如
CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
Query OK, 0 rows affected (0.00 sec)
1
2
3
上面代码的意思是:表被命名为pet,包含的列有六个,分别是name,owner,species,sex,birth,death。数据类型分别为VARCHAR(20),VARCHAR(20),VARCHAR(20),CHAR(1),DATE,DATE。
接着再次展示库里的表,结果如图
获取有关表结构或查询执行计划的信息:DESCRIBE XXX;
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)
1
2
3
4
5
6
7
8
9
10
11
12
展示的信息即为每一列的信息
删除那个表:DROP TABLE XXX;
mysql> DROP TABLE pet;
Query OK, 0 rows affected (0.01 sec)
1
2
将数据加载到表中,表中数据全清空和特定行的清空
将新行插入到现有表中:INSERT
INSERT INTO pet
VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
1
2
意思是往pet这个表里插入’Puffball’,‘Diane’,‘hamster’,‘f’,‘1999-03-30’,NULL数据。
检索这个表的全部信息:SELECT * FROM XXX;
mysql> select * from pet;
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
说明(‘Puffball’,‘Diane’,‘hamster’,‘f’,‘1999-03-30’,NULL)这个数据已经加载进pet这个表中。
表中数据清空:TRUNCATE TABLE XXX;
mysql> select * from pet;
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+
1 row in set (0.00 sec)
mysql> TRUNCATE TABLE pet;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from pet;
Empty set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
清空表中某行数据:DELETE FROM XXX where XXX = “XXX”;
mysql> select * from pet; +----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+
1 row in set (0.00 sec)
mysql> DELETE FROM pet where name = "Puffball";
Query OK, 1 row affected (0.01 sec)
mysql> select * from pet;
Empty set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
从表中检索信息
检索用的是SELECT
学习这步操作之前先输入以下命令
INSERT INTO pet VALUES ('Fluffy','Harold','cat','f','1993-02-04',NULL);
INSERT INTO pet VALUES ('Claws','Gwen','cat','m','1994-03-17', NULL);
INSERT INTO pet VALUES ('Buffy','Harold','dog','f','1989-05-13',NULL);
INSERT INTO pet VALUES ('Fang','Benny','dog','m','1990-08-27',NULL);
INSERT INTO pet VALUES ('Bowser','Diane','dog','m','1979-08-31','1995-07-29');
INSERT INTO pet VALUES ('Chirpy','Gwen','bird','f','1998-09-11',NULL);
INSERT INTO pet VALUES ('Slim','Benny','snake','m','1996-04-29',NULL);
INSERT INTO pet VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
1
2
3
4
5
6
7
8
从而使得pet这个表是这个样子
mysql> select * from pet; +----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+--------+---------+------+------------+------------+
8 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
选择所有数据
select * from XXX;
mysql> select * from pet; +----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+--------+---------+------+------------+------------+
8 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
选择特定行
mysql> SELECT * FROM pet WHERE name = 'Bowser';
+--------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
mysql> SELECT * FROM pet WHERE birth >= '1998-1-1';
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+
2 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
使用AND 逻辑运算符
mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
+--------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+--------+-------+---------+------+------------+-------+
2 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
AND和OR可以混合使用,尽管 AND优先级高于 OR。如果同时使用这两个运算符,则最好使用括号来明确指示应如何对条件进行分组
mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')
-> OR (species = 'dog' AND sex = 'f');
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
2 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
选择特定列
mysql> SELECT name, birth FROM pet;
+----------+------------+
| name | birth |
+----------+------------+
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Buffy | 1989-05-13 |
| Fang | 1990-08-27 |
| Bowser | 1979-08-31 |
| Chirpy | 1998-09-11 |
| Slim | 1996-04-29 |
| Puffball | 1999-03-30 |
+----------+------------+
8 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
结合选取特定行的特定列
mysql> SELECT name, species, birth FROM pet
-> WHERE species = 'dog' OR species = 'cat';
+--------+---------+------------+
| name | species | birth |
+--------+---------+------------+
| Fluffy | cat | 1993-02-04 |
| Claws | cat | 1994-03-17 |
| Buffy | dog | 1989-05-13 |
| Fang | dog | 1990-08-27 |
| Bowser | dog | 1979-08-31 |
+--------+---------+------------+
5 rows in set (0.01 sec)
1
2
3
4
5
6
7
8
9
10
11
12
排序行
使用ORDER BY子句
mysql> SELECT name, birth FROM pet ORDER BY birth;
+----------+------------+
| name | birth |
+----------+------------+
| Bowser | 1979-08-31 |
| Buffy | 1989-05-13 |
| Fang | 1990-08-27 |
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Slim | 1996-04-29 |
| Chirpy | 1998-09-11 |
| Puffball | 1999-03-30 |
+----------+------------+
8 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
默认的排序顺序是升序,先是最小值。要以倒序(降序)排序,请将DESC关键字添加到要排序的列的名称上
mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
+----------+------------+
| name | birth |
+----------+------------+
| Puffball | 1999-03-30 |
| Chirpy | 1998-09-11 |
| Slim | 1996-04-29 |
| Claws | 1994-03-17 |
| Fluffy | 1993-02-04 |
| Fang | 1990-08-27 |
| Buffy | 1989-05-13 |
| Bowser | 1979-08-31 |
+----------+------------+
8 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
日期计算
请使用该 TIMESTAMPDIFF()功能。它的参数是要表示结果的单位,以及两个日期之间的差值。
mysql> SELECT name, birth, CURDATE(),
-> TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
-> FROM pet;
+----------+------------+------------+------+
| name | birth | CURDATE() | age |
+----------+------------+------------+------+
| Fluffy | 1993-02-04 | 2020-04-15 | 27 |
| Claws | 1994-03-17 | 2020-04-15 | 26 |
| Buffy | 1989-05-13 | 2020-04-15 | 30 |
| Fang | 1990-08-27 | 2020-04-15 | 29 |
| Bowser | 1979-08-31 | 2020-04-15 | 40 |
| Chirpy | 1998-09-11 | 2020-04-15 | 21 |
| Slim | 1996-04-29 | 2020-04-15 | 23 |
| Puffball | 1999-03-30 | 2020-04-15 | 21 |
+----------+------------+------------+------+
8 rows in set (0.01 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
模式匹配
MySQL提供了标准的SQL模式匹配以及基于扩展的正则表达式的模式匹配形式,该正则表达式类似于vi,grep和 sed之类的Unix实用程序使用的扩展正则表达式 。
查找以b开头的name:
mysql> SELECT * FROM pet WHERE name LIKE 'b%';
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
2 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
查找以fy结尾的name
mysql> SELECT * FROM pet WHERE name LIKE '%fy';
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
2 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
查找包含w的name
mysql> SELECT * FROM pet WHERE name LIKE '%w%';
+--------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+
2 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
查找正好包含五个字符的名称,使用_
mysql> SELECT * FROM pet WHERE name LIKE '_____';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+
2 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
计数行
COUNT(*)计算行数
计算pet表中有多少行
mysql> SELECT COUNT(*) FROM pet;
+----------+
| COUNT(*) |
+----------+
| 8 |
+----------+
1 row in set (0.01 sec)
1
2
3
4
5
6
7
如果要找出每个主人有多少只宠物
mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
+--------+----------+
| owner | COUNT(*) |
+--------+----------+
| Harold | 2 |
| Gwen | 2 |
| Benny | 2 |
| Diane | 2 |
+--------+----------+
4 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
每个动物的种类的数量:
mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
+---------+----------+
| species | COUNT(*) |
+---------+----------+
| cat | 2 |
| dog | 3 |
| bird | 1 |
| snake | 1 |
| hamster | 1 |
+---------+----------+
5 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
每个动物和性别组合的数量:
mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| bird | f | 1 |
| snake | m | 1 |
| hamster | f | 1 |
+---------+------+----------+
7 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
仅对狗和猫执行的前一个查询(每个动物和性别组合的数量)
mysql> SELECT species, sex, COUNT(*) FROM pet
-> WHERE species = 'dog' OR species = 'cat'
-> GROUP BY species, sex;
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
+---------+------+----------+
4 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
获取有关数据库和表的信息
使用
SHOW或SELECT或DESCRIBE
SHOW DATABASES;
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| menagerie |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
SELECT DATABASE();
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| menagerie |
+------------+
1 row in set (0.00 sec)
1
2
3
4
5
6
7
SHOW TABLES;
mysql> SHOW TABLES;
+---------------------+
| Tables_in_menagerie |
+---------------------+
| pet |
+---------------------+
1 row in set (0.01 sec)
1
2
3
4
5
6
7
DESCRIBE pet;
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.01 sec)
1
2
3
4
5
6
7
8
9
10
11
12
结束语
身为一个菜鸡程序员,目前对自己的要求是博客周更。每周学习新的技能,然后再分享技能。这周学习MySQL并通过这个博客分享和巩固自己学到的知识。
这篇博客内容可能有点多,但其实只是原定内容的一半。下一半只能留给下一篇博客了。这个MySQL的系列会写得很细,欢迎收藏哦。如果我的分享对你有帮助,麻烦点个赞吧,谢谢各位。
————————————————
版权声明:本文为CSDN博主「西瓜6」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37924224/article/details/105510809