《MySQL必知必會》學習筆記(1-8)

《MySQL必知必會》學習筆記 目錄

http://www.itdecent.cn/p/97bab08c6755

本篇內容

了解SQL、MySQL簡介、使用MySQL、檢索數(shù)據(jù) 、排序檢索數(shù)據(jù)、過濾數(shù)據(jù)、用通配符進行過濾

MySQL安裝 自行谷歌

《MySQL 必知必會》創(chuàng)建樣例表

mysql_scripts.zip 下載 下面鏈接
鏈接:https://pan.baidu.com/s/1y-OZG9fbdKFP3r-XlIjeMA
提取碼:ehg5

(1)創(chuàng)建一個新的數(shù)據(jù)源

create database crashcourse; (這里使用書中的數(shù)據(jù)源名稱)

(2)選擇新的數(shù)據(jù)源

use crashcourse;

(3)執(zhí)行creat.sql腳本

  source create.sql;   (使用mysql命令行使用程序的方法,source+文件路徑 如有必要可能為絕對路徑)

(4)用populate.sql文件填充各個新表

source populate.sql; 

檢測樣例創(chuàng)建是否成功

image.png

更多可參看:
https://www.runoob.com/mysql/mysql-tutorial.html

第一章 了解SQL

介紹數(shù)據(jù)庫和SQL,它們是學習MySQL的先決條件。

1.1 數(shù)據(jù)庫基礎

1.1.1 什么是數(shù)據(jù)庫

數(shù)據(jù)庫是一個以某種有組織的方式存儲的數(shù)據(jù)集合。理解數(shù)據(jù)庫的一種最簡單的辦法是將其想象為一個文件柜。此文件柜是一個存放數(shù)據(jù)的物理位置,不管數(shù)據(jù)是什么以及如何組織的。

數(shù)據(jù)庫(database)
保存有組織的數(shù)據(jù)的容器(通常是一個文件或一組文件)。

1.1.2 表

表是一種結構化的文件,可用來存儲某種特定類型的數(shù)據(jù)。表可以保存顧客清單、產(chǎn)品目錄,或者其他信息清單。

表(table)
某種特定類型數(shù)據(jù)的結構化清單。

關鍵的一點在于,存儲在表中的數(shù)據(jù)是一種類型的數(shù)據(jù)或一個清單。

數(shù)據(jù)庫中的每個表都有一個名字,用來標識自己。此名字是唯一的,這表示數(shù)據(jù)庫中沒有其他表具有相同的名字。

表名
表名的唯一性取決于多個因素,如數(shù)據(jù)庫名和表名等的結合。這表示,雖然在相同數(shù)據(jù)庫中不能兩次使用相同的表名,但在不同的數(shù)據(jù)庫中卻可以使用相同的表名。

模式(schema)
關于數(shù)據(jù)庫和表的布局及特性的信息。

1.1.3 列和數(shù)據(jù)類型

表由列組成。列中存儲著表中某部分的信息。

列(column)
表中的一個字段。所有表都是由一個或多個列組成的

數(shù)據(jù)庫中每個列都有相應的數(shù)據(jù)類型。數(shù)據(jù)類型定義列可以存儲的數(shù)據(jù)種類。

數(shù)據(jù)類型(datatype)
所容許的數(shù)據(jù)的類型。每個表列都有相應的數(shù)據(jù)類型,它限制(或容許)該列中存儲的數(shù)據(jù)。

1.1.4 行

表中的數(shù)據(jù)是按行存儲的,所保存的每個記錄存儲在自己的行內。

行(row) 表中的一個記錄。

1.1.5 主鍵

表中每一行都應該有可以唯一標識自己的一列(或一組列)。

主鍵(primary key)
一列(或一組列),其值能夠唯一區(qū)分表中每個行。
唯一標識表中每行的這個列(或這組列)稱為主鍵。主鍵用來表示一個特定的行。沒有主鍵,更新或刪除表中特定行很困難,因為沒有安全的方法保證只涉及相關的行。

1.2 什么是SQL

SQL(發(fā)音為字母S-Q-L或sequel)是結構化查詢語言(Structured Query Language)的縮寫。 SQL是一種專門用來與數(shù)據(jù)庫通信的語言。

第 2 章MySQL簡介

介紹什么是MySQL,以及在MySQL中可以應用什么工具。

2.1 什么是MySQL

數(shù)據(jù)的所有存儲、檢索、管理和處理實際上是由數(shù)據(jù)庫軟件——DBMS(數(shù)據(jù)庫管理系統(tǒng))完成的。 MySQL是一種DBMS,即它是一種數(shù)據(jù)庫軟件

MySQL、 Oracle以及Microsoft SQL Server等數(shù)據(jù)庫是基于客戶機—服務器的數(shù)據(jù)庫??蛻魴C—服務器應用分為兩個不同的部分。 服務器部分是負責所有數(shù)據(jù)訪問和處理的一個軟件。這個軟件運行在稱為數(shù)據(jù)庫服務器的計算機上。

與數(shù)據(jù)文件打交道的只有服務器軟件。關于數(shù)據(jù)、數(shù)據(jù)添加、刪除和數(shù)據(jù)更新的所有請求都由服務器軟件完成。客戶機是與用戶打交道的軟件。

2.2 MySQL工具

MySQL是一個客戶機—服務器DBMS,因此,為了使用MySQL,需要有一個客戶機,即你需要用來與MySQL打交道(給MySQL提供要執(zhí)行的命令)的一個應用。

2.2.1 mysql命令行實用程序

在操作系統(tǒng)命令提示符下輸入mysql -u root -p,提示輸入密碼

MySQL選項和參數(shù)

如果僅輸入mysql, 可能會出現(xiàn)一個錯誤消息。mysql接受你可以(和可能需要)使用的一組命令行參數(shù)。例如,為了指定用戶登錄名ben,應該使用mysql -u ben。為了給出用戶名、主機名、端口和口令,應該使用mysql -u ben -p -h myserver -P 9999。 mysql -u root -p

請注意:

  • 命令輸入在mysql>之后;
  • 命令用;或\g結束,換句話說,僅按Enter不執(zhí)行命令;
  • 輸入help或\h獲得幫助,也可以輸入更多的文本獲得特定命令的幫助(如,輸入help select獲得使用SELECT語句的幫助);
  • 輸入quit或exit退出命令行實用程序。
MySQL.png

2.2.2 MySQL Administrator

MySQL Administrator(MySQL管理器)是一個圖形交互客戶機,用來簡化MySQL服務器的管理。

獲得MySQL Administrator MySQL Administrator不作為核心MySQL 的 組 成 部 分 安 裝 。 必 須 從 http://dev.mysql.com/downloads/下載它

Ubuntu 中 mysql數(shù)據(jù)庫路徑
/var/lib/mysql 日志文件,數(shù)據(jù)庫 [重點要知道這個]

現(xiàn)使用MySQL Workbench

2.2.3 MySQL Query Browser

MySQL Query Browser為一個圖形交互客戶機,用來編寫和執(zhí)行MySQL命令。

第3章 使用MySQL

學習如何連接和登錄到MySQL,如何執(zhí)行MySQL語句,以及如何獲得數(shù)據(jù)庫和表的信息。

3.1 連接

MySQL與所有客戶機—服務器DBMS一樣,要求在能執(zhí)行命令之前登錄到DBMS。

3.2 選擇數(shù)據(jù)庫

在你最初連接到MySQL時,沒有任何數(shù)據(jù)庫打開供你使用。在你能執(zhí)行任意數(shù)據(jù)庫操作前,需要選擇一個數(shù)據(jù)庫。為此,可使用USE關鍵字。

關鍵字(key word) 作為MySQL語言組成部分的一個保留字。決不要用關鍵字命名一個表或列。附錄E列出了MySQL的關鍵字。

USE.png

3.3 了解數(shù)據(jù)庫和表

內部的表一般不直接訪問??捎肕ySQL的SHOW命令來顯示這些信息(MySQL從內部表中提取這些信息)。

SHOW DATABASES;
3.3DATABASES.png

SHOW DATABASES;返回可用數(shù)據(jù)庫的一個列表。包含在這個列表中的可能是MySQL內部使用的數(shù)據(jù)庫

SHOW TABLES;
3.3TABLES.png

SHOW TABLES;返回當前選擇的數(shù)據(jù)庫內可用表的列表。

SHOW COLUMNS FROM customer;
3.3COLUMNS .png

SHOW COLUMNS 要 求 給 出 一 個 表 名 ( 這 個 例 子 中 的 FROMcustomers),它對每個字段返回一行,行中包含字段名、數(shù)據(jù)類型、是否允許NULL、鍵信息、默認值以及其他信息(如字段cust_id的auto_increment)

DESCRIBE語句 MySQL支持用DESCRIBE作為SHOW COLUMNS FROM的一種快捷方式。換句話說, DESCRIBE customers;是SHOW COLUMNS FROM customers;的一種快捷方式。

3.3DESCRIBE.png

所支持的其他SHOW語句還有:

  • SHOW STATUS,用于顯示廣泛的服務器狀態(tài)信息;

  • SHOW CREATE DATABASE和SHOW CREATE TABLE,分別用來顯示創(chuàng)建特定數(shù)據(jù)庫或表的MySQL語句;

  • SHOW GRANTS,用來顯示授予用戶(所有用戶或特定用戶)的安全權限;

  • SHOW ERRORS和SHOW WARNINGS, 用來顯示服務器錯誤或警告消息。

HELP SHOW; 顯示允許的SHOW語句。

第 4 章 檢 索 數(shù) 據(jù)

介紹如何使用SELECT語句從表中檢索一個或多個數(shù)據(jù)列。

4.1 SELECT語句

SQL語句是由簡單的英語單詞構成的。這些單詞稱為關鍵字,每個SQL語句都是由一個或多個關鍵字構成的。

最經(jīng)常使用的SQL語句就是SELECT語句了。它的用途是從一個或多個表中檢索信息

使用SELECT檢索表數(shù)據(jù),必須至少給出兩條信息——想選擇什么,以及從什么地方選擇

4.2 檢索單個列

SELECT prod_name FROM products;
4.2SELECT.png

4.3 檢索多個列

要想從一個表中檢索多個列,使用相同的SELECT語句。唯一的不同是必須在SELECT關鍵字后給出多個列名,列名之間必須以逗號分隔。

SELECT   prod_id, prod_name, prod_price FROM products;
4.3SELECT.png

4.4 檢索所有列

除了指定所需的列外, SELECT語句還可以檢索所有的列而不必逐個列出它們。這可以通過在實際列名的位置使用星號(*)通配符來達到

SELECT * FROM products;
4.4SELECT.png

4.5 檢索不同的行

DISTINCT關鍵字指示MySQL只返回不同的值。

SELECT DISTINCT vend_id FROM products;
4.5DISTINCT.png

SELECT DISTINCT vend_id告訴MySQL只返回不同(唯一)的vend_id行,因此只返回4行

4.6 限制結果

SELECT語句返回所有匹配的行,它們可能是指定表中的每個行。為了返回第一行或前幾行,可使用LIMIT子句。

SELECT prod_name FROM products LIMIT 5;
4.6LIMIT.png

此語句使用SELECT語句檢索單個列。 LIMIT 5指示MySQL返回不多于5行。

可指定要檢索的開始行和行數(shù)

SELECT prod_name FROM products LIMIT 7,5;
4.6LIMIT2.png

LIMIT 7, 5指示MySQL返回從行7開始的5行。第一個數(shù)為開始位置,第二個數(shù)為要檢索的行數(shù)。

行0 檢索出來的第一行為行0而不是行1。因此, LIMIT 1, 1將檢索出第二行而不是第一行。

MySQL 5的LIMIT語法 MySQL 5支持LIMIT的另一種替代語法。 LIMIT 4 OFFSET 3意為從行3開始取4行,就像LIMIT 3, 4一樣。

SELECT prod_name FROM products LIMIT 7 OFFSET 5;
4.6OFFSET.png

4.7 使用完全限定的表名

可能會使用完全限定的名字來引用列(同時使用表名和列字)。

SELECT products.prod_name FROM products;

表名也可以是完全限定的

SELECT products.prod_name FROM crashcourse.products;

第5章 排序檢索數(shù)據(jù)

如何使用SELECT語句的ORDER BY子句,根據(jù)需要排序檢索出的數(shù)據(jù)

5.1 排序數(shù)據(jù)

子句(clause) SQL語句由子句構成,有些子句是必需的,而有的是可選的。一個子句通常由一個關鍵字和所提供的數(shù)據(jù)組成。

為了明確地排序用SELECT語句檢索出的數(shù)據(jù),可使用ORDER BY子句。ORDER BY子句取一個或多個列的名字,據(jù)此對輸出進行排序。

SELECT prod_name FROM products ORDER BY prod_name;

5.2 按多個列排序

為了按多個列排序,只要指定列名,列名之間用逗號分開即可

下面的代碼檢索3個列,并按其中兩個列對結果進行排序——首先按價格,然后再按名稱排序。

SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;
5.2ORDER.png

5.3 指定排序方向

數(shù)據(jù)排序不限于升序排序(從A到Z)。這只是默認的排序順序,還可以使用ORDER BY子句以降序(從Z到A)順序排序。為了進行降序排序,必須指定DESC關鍵字。

SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC;
5.3DESC.png

在多個列上降序排序 如果想在多個列上進行降序排序, 必須對每個列指定DESC關鍵字。

使用ORDER BY和LIMIT的組合,能夠找出一個列中最高或最低的值。

SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;
5.3ORDER.png

第6章 過 濾 數(shù) 據(jù)

講授如何使用SELECT語句的WHERE子句指定搜索條件。

6.1 使用WHERE子句

數(shù)據(jù)庫表一般包含大量的數(shù)據(jù),很少需要檢索表中所有行。通常只會根據(jù)特定操作或報告的需要提取表數(shù)據(jù)的子集。只檢索所需數(shù)據(jù)需要指定搜索條件( search criteria) ,搜索條件也稱為過濾條件( filtercondition) 。

在SELECT語句中,數(shù)據(jù)根據(jù)WHERE子句中指定的搜索條件進行過濾。

SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50;
6.1WHERE.png

6.2 WHERE子句操作符

WHERE子句操作符

操 作 符 說 明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的兩個值之間

6.2.1 檢查單個值

SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses';
6.2.1WHERE1.png
SELECT prod_name, prod_price FROM products WHERE prod_price < 10;
6.2.1WHERE2.png

6.2.2 不匹配檢查

SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003;
6.2.2WHERE1.png
SELECT vend_id, prod_name FROM products WHERE vend_id != 1003;
6.2.2WHERE2.png

6.2.3 范圍值檢查

為了檢查某個范圍的值,可使用BETWEEN操作符。其語法與其他WHERE子句的操作符稍有不同,因為它需要兩個值,即范圍的開始值和結束值。

SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
6.2.3BETWEEN.png

6.2.4 空值檢查

在創(chuàng)建表時,表設計人員可以指定其中的列是否可以不包含值。在一個列不包含值時,稱其為包含空值NULL。

NULL 無值(no value),它與字段包含0、空字符串或僅僅包含空格不同。

SELECT語句有一個特殊的WHERE子句,可用來檢查具有NULL值的列。這個WHERE子句就是IS NULL子句。

SELECT prod_name FROM products WHERE prod_price IS NULL;
6.2.4WHEREISNULL1.png
SELECT cust_id FROM customers WHERE cust_email IS NULL;
6.2.4WHEREISNULL2.png

第 7 章 數(shù) 據(jù) 過 濾

如何組合WHERE子句以建立功能更強的更高級的搜索條件。

7.1 組合WHERE子句

為了進行更強的過濾控制, MySQL允許給出多個WHERE子句。這些子句可以兩種方式使用:以AND子句的方式或OR子句的方式使用。

7.1.1 AND操作符

為了通過不止一個列進行過濾,可使用AND操作符給WHERE子句附加條件。

SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;
7.1.1WHEREAND.png

AND 用在WHERE子句中的關鍵字,用來指示檢索滿足所有給定條件的行。

7.1.2 OR操作符

OR操作符與AND操作符不同,它指示MySQL檢索匹配任一條件的行。

SELECT prod_price, prod_name FROM products WHERE vend_id = 1002 OR vend_id = 1003;
7.1.2WHEREOR.png

OR WHERE子句中使用的關鍵字,用來表示檢索匹配任一給定條件的行。

7.1.3 計算次序

WHERE可包含任意數(shù)目的AND和OR操作符。允許兩者結合以進行復雜和高級的過濾。
但是,組合AND和OR帶來了一個有趣的問題。SQL(像多數(shù)語言一樣)在處理OR操作符前,優(yōu)先處理AND操作符。此問題的解決方法是使用圓括號明確地分組相應的操作符。

SELECT prod_price, prod_name FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;
7.1.3WHERE.png

7.2 IN操作符

圓括號在WHERE子句中還有另外一種用法。 IN操作符用來指定條件范圍,范圍中的每個條件都可以進行匹配。

SELECT prod_price, prod_name FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;
7.2IN.png

為什么要使用IN操作符?其優(yōu)點具體如下

  • 在使用長的合法選項清單時, IN操作符的語法更清楚且更直觀。
  • 在使用IN時,計算的次序更容易管理(因為使用的操作符更少)。
  • IN操作符一般比OR操作符清單執(zhí)行更快。
  • IN的最大優(yōu)點是可以包含其他SELECT語句,使得能夠更動態(tài)地建立WHERE子句。第14章將對此進行詳細介紹

IN WHERE子句中用來指定要匹配值的清單的關鍵字,功能與OR相當。

7.3 NOT操作符

WHERE子句中的NOT操作符有且只有一個功能,那就是否定它之后所跟的任何條件。

NOT WHERE子句中用來否定后跟條件的關鍵字。

SELECT prod_price, prod_name FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
7.3NOT.png

MySQL中的 NOT MySQL 支 持 使 用 NOT 對 IN 、 BETWEEN 和EXISTS子句取反,這與多數(shù)其他DBMS允許使用NOT對各種條件取反有很大的差別。

第 8 章 用通配符進行過濾

介紹什么是通配符、如何使用通配符以及怎樣使用LIKE操作符進行通配搜索,以便對數(shù)據(jù)進行復雜過濾。

8.1 LIKE操作符

通配符(wildcard) 用來匹配值的一部分的特殊字符。

搜索模式(search pattern) 由字面值、通配符或兩者組合構成的搜索條件。

為在搜索子句中使用通配符,必須使用LIKE操作符。 LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較。

8.1.1 百分號(%)通配符

最常使用的通配符是百分號(%)。在搜索串中, %表示任何字符出現(xiàn)任意次數(shù)。

SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%';
8.1.1LIKE.png

區(qū)分大小寫 根據(jù)MySQL的配置方式,搜索可以是區(qū)分大小寫的。

8.1.2 下劃線(_)通配符

另一個有用的通配符是下劃線(_)。下劃線的用途與%一樣,但下劃線只匹配單個字符而不是多個字符。

SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '_ ton anvil';
8.1.2LIKE1.png

區(qū)別:

SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '% ton anvil';
8.1.2LIKE 2.png

8.2 使用通配符的技巧

MySQL的通配符很有用。但這種功能是有代價的:通配符搜索的處理一般要比前面討論的其他搜索所花時間更長。

  • 不要過度使用通配符。如果其他操作符能達到相同的目的,應該使用其他操作符。
  • 在確實需要使用通配符時,除非絕對有必要,否則不要把它們用在搜索模式的開始處。把通配符置于搜索模式的開始處,搜索起來是最慢的。
  • 仔細注意通配符的位置。如果放錯地方,可能不會返回想要的數(shù)據(jù)。

GitHub鏈接:
https://github.com/lichangke/LeetCode
知乎個人首頁:
https://www.zhihu.com/people/lichangke/
簡書個人首頁:
http://www.itdecent.cn/u/3e95c7555dc7
個人Blog:
https://lichangke.github.io/
歡迎大家來一起交流學習

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 這一篇最主要是記錄下命令,方便以后查找 使用Mysql 創(chuàng)建數(shù)據(jù)庫 create database mysql_t...
    Treehl閱讀 658評論 0 0
  • 數(shù)據(jù)庫入門 數(shù)據(jù)庫: 保存有組織的數(shù)據(jù)的容器(通常是一個文件或一組文件).數(shù)據(jù)庫軟件應該稱為 DBMS(DataB...
    Mjericho閱讀 571評論 0 0
  • 表 存儲在表中的數(shù)據(jù)是同一種類型的數(shù)據(jù)或清單。 數(shù)據(jù)庫中的表有為一個名字來標識自己。 表具有一些特性,這些特性定義...
    蛐蛐囍閱讀 1,460評論 0 7
  • 前言 一、基礎知識1.了解數(shù)據(jù)庫數(shù)據(jù)庫(database):保存有組織的數(shù)據(jù)的容器表(table):某種特定類型數(shù)...
    流水混帳閱讀 579評論 0 1
  • 1.簡介 mysql是一個快速的、多線程的、多用戶的、支持健壯SQL的數(shù)據(jù)庫管理系統(tǒng)(DBMS)。mysql可以應...
    at小宇閱讀 1,078評論 0 2

友情鏈接更多精彩內容