MySQL的基本操作(針對小白2)

MySQL的基本操作(針對小白2)

前言

內容有點多,建議收藏起來再看。

這次學習和分享的部分是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,上正文。也可以直接通過目錄進行跳轉哦

創建和使用數據庫

創建,查看,選擇和刪除數據庫

創建數據庫:CREATE DATABASE XXX;

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

查看數據庫:SHOW DATABASES;

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

使用數據庫:USE XXX

mysql> USE menagerie
Database changed

刪除數據庫:DROP DATABASE XXX

mysql> DROP DATABASE menagerie;
Query OK, 0 rows affected (0.00 sec)

展示,創建和刪除表格

在上面的USE menagerie之後哈
展示庫裏的表:SHOW TABLES;

mysql> SHOW TABLES;
Empty set (0.00 sec)

創建表: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)

上面代碼的意思是:表被命名爲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)

展示的信息即爲每一列的信息
刪除那個表:DROP TABLE XXX;

mysql> DROP TABLE pet;
Query OK, 0 rows affected (0.01 sec)

將數據加載到表中,表中數據全清空和特定行的清空

將新行插入到現有表中:INSERT

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

意思是往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)

說明(‘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)

清空表中某行數據: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)

從表中檢索信息

檢索用的是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);

從而使得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)

選擇所有數據

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)

選擇特定行

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)
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)

使用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)

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)

選擇特定列

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)

結合選取特定行的特定列

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)

排序行

使用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)

默認的排序順序是升序,先是最小值。要以倒序(降序)排序,請將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)

日期計算

請使用該 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)

模式匹配

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)

查找以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)

查找包含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)

查找正好包含五個字符的名稱,使用_

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)

計數行

COUNT(*)計算行數
計算pet表中有多少行

mysql> SELECT COUNT(*) FROM pet;
+----------+
| COUNT(*) |
+----------+
|        8 |
+----------+
1 row in set (0.01 sec)

如果要找出每個主人有多少隻寵物

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)

每個動物的種類的數量:

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)

每個動物和性別組合的數量:

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)

僅對狗和貓執行的前一個查詢(每個動物和性別組合的數量)

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)

獲取有關數據庫和表的信息

使用
SHOWSELECTDESCRIBE
SHOW DATABASES;

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

SELECT DATABASE();

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

SHOW TABLES;

mysql> SHOW TABLES;
+---------------------+
| Tables_in_menagerie |
+---------------------+
| pet                 |
+---------------------+
1 row in set (0.01 sec)

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)

結束語

身爲一個菜雞程序員,目前對自己的要求是博客周更。每週學習新的技能,然後再分享技能。這周學習MySQL並通過這個博客分享和鞏固自己學到的知識。
這篇博客內容可能有點多,但其實只是原定內容的一半。下一半隻能留給下一篇博客了。這個MySQL的系列會寫得很細,歡迎收藏哦。如果我的分享對你有幫助,麻煩點個贊吧,謝謝各位。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章