MySQL數據庫學習

雖然筆者從事的是Android客戶端的開發,平時和數據庫打的交道並不多,但是我們對於數據庫這一塊的學習還是很重要的,今天筆者想總結下MySQL關係型數據庫的一些常用知識點

數據庫概述

一、常見的概念

數據庫(DataBase):數據庫是按照數據結構來組織、存儲和管理數據的倉庫。數據庫管理系統(Database Management SystemDBMS):是專門用於管理數據庫的計算機系統軟件。數據庫管理系統能夠爲數據庫提供數據的定義、建立、維護、查詢和統計等操作功能,並完成對數據完整性、安全性進行控制的功能。

二、發展歷程

我們一般說的數據庫,就是指的DBMS: 數據庫服務器。數據庫技術發展歷程如下:

  • 層次數據庫和網狀數據庫技術階段:使用指針來表示數據之間的聯繫。
  • 關係數據庫技術階段:經典的里程碑階段。代表DBMS有Oracle、DB2、MySQL、SQL Server等。
  • 後關係數據庫技術階段:關係型數據庫存在數據模型,性能,拓展伸縮性的缺點,出現了:
    • ORDBMS:面向對象數據庫技術。
    • NoSQL :結構化數據庫技術。

隨着大數據的不斷髮展,非關係型的數據庫現在成了一個極其熱門的新領域,非關係數據庫產品的發展非常迅速,產生了一系列出色的NoSQL數據庫。

常見的NoSQL數據庫分爲四大類

  • 鍵值存儲數據庫:Oracle BDB,Redis,BeansDB
  • 列式儲數數據庫:HBase,Cassandra,Riak
  • 文檔型數據庫:MongoDB,CouchDB
  • 圖形數據庫:Neo4J,InfoGrid,Infinite Graph

常見的關係數據庫:

數據庫系 所屬公司
Oracle Oracle
DB2 IBM
SQL Server MS
MySQL AB–>SUN–>Oracle

特點比較:

  • Oracle:運行穩定,可移植性高,功能齊全,性能超羣!適用於大型企業領域,但是價格昂貴。
  • DB2:速度快、可靠性好,適於海量數據,恢復性極強。適用於大中型企業領域,但是價格昂貴。
  • SQL Server:全面,效率高,界面友好,操作容易,但是不跨平臺。適用於中小型企業領域。
  • MySQL:開源,體積小,速度快。適用於中小型企業領域。

三、SQL:結構化查詢語言(Structured Query Language)。

結構化查詢語言是關係型數據庫標準語言。特點:簡單,靈活,功能強大。

SQL包含6個部分:

  • 數據查詢語言(DQL):
    其語句,也稱爲“數據檢索語句”,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其他類型的SQL語句一起使用。
  • 數據操作語言(DML):
    其語句包括動詞INSERT,UPDATE和DELETE。它們分別用於添加,修改和刪除表中的行。也稱爲動作查詢語言。
  • 事務處理語言(TPL):
    它的語句能確保被DML語句影響的表的所有行及時得以更新。TPL語句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
  • 數據控制語言(DCL):
    它的語句通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數據庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對錶單個列的訪問。
  • 數據定義語言(DDL):
    其語句包括動詞CREATE和DROP。在數據庫中創建新表或刪除表(CREAT TABLE 或 DROP TABLE);爲表加入索引等。DDL包括許多與人數據庫目錄中獲得數據有關的保留字。它也是動作查詢的一部分。
  • 指針控制語言(CCL):
    它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作。

四、書寫規則

1.數據庫中,SQL語句大小寫不敏感
2.SQL語句可單行或多行書寫
3.在SQL語句中,關鍵字不能跨多行或縮寫
4.爲了提高可讀性,一般關鍵字大寫,其他小寫
5.空格和縮進使程序易讀

五、表的理解

什麼是表?表是用來幹嘛的?表又叫二維表(有行和列) ,用來存儲數據,
表具有固定的列數和任意的行數,在數學上稱爲“關係”。
二維表是同類實體的各種屬性的集合,每個實體對應於表中的一行,在關係中稱爲一條記錄
表中的列表示屬性,稱爲Field,相當於通常記錄中的一個數據項,也叫列、字段。
解釋表結構和麪向對象的關係
能不能使用面向對象的方式來操作數據庫呢?

MySQL安裝和配置

一、MySQL安裝過程中注意:

  • MySQL的默認端口是:3306
  • 數據庫默認字符集就是utf8
  • 設置密碼:(儘量簡單能記住,忘記後很麻煩)
  • MySQL的運行要基於 .Net framework 4和VC++庫
  • 如果沒有安裝以上兩個庫則在安裝過程中會出錯,必須先安裝以上程序
  • 解決MySQL佔內存的問題:
  • 找到:my.ini文件:
  • table_definition_cache=400
  • table_open_cache=200

二、操作數據庫的流程

  • 建立連接(認證身份)
  • 客戶端向服務器端發送SQL命令
  • 服務器端執行SQL,並返回執行的結果
  • 客戶端接收結果(並顯示)
  • 斷開連接

三、啓動和連接MySQL

1.啓動MySQL服務:打開數據庫連接之前:一定要保證MySQL服務已經開啓了.在服務中找到MySQL的服務,查看是否處於正在運行的狀態

在Windows中使用命令控制服務的狀態(必須使用管理員身份開啓命令行)
開啓服務: net start 服務名 如: net start mysql
關閉服務: net stop 服務名 如: net stop mysql

2.連接MySQL數據庫:

  • 方式1:進入MySQL, 在命令行中輸入密碼;
  • 方式2:在命令行中:找到安裝目錄下的bin錄製中有個mysql的命令
    格式:mysql -u賬戶 -p密碼 -h數據庫服務器安裝的主機 -P數據庫端口
    mysql -uroot -padmin -hlocalhost -P 3306
    若連接的數據庫服務器在本機上,並且端口是3306。
    則可以

四、MySQL圖形化管理軟件Navicat:

  • Navicat for MySQL是一款強大的 MySQL 數據庫管理和開發工具,它爲專業開發者提供了一套強大的足夠尖端的工具,但對於新用戶仍然易於學習。
  • Navicat for MySQL 基於Windows平臺,爲 MySQL 量身訂作,提供類似於 MySQL 的用管理界面工具。此解決方案的出現,將解放 PHP、J2EE 等程序員以及數據庫設計者、管理者的大腦,降低開發成本,爲用戶帶來更高的開發效率。

MySQL數據庫操作

一、數據庫操作和存儲引擎

1.數據庫和數據庫對象

一般來說我們說的數據庫(MySQL/Oracle等)指的都是數據庫服務器(DBMS)
數據庫:存儲數據庫對象的容器。
數據庫對象:存儲,管理和使用數據的不同結構形式,如:表、視圖、存儲過程、函數、觸發器、事件等。
數據庫分兩種:

  • 系統數據庫(系統自帶的數據庫):不能修改

    information_schema:存儲數據庫對象信息,如:用戶表信息,列信息,權限,字符,分區等信息
    performance_schema:存儲數據庫服務器性能參數信息。
    mysql:存儲數據庫用戶權限信息。
    sys:系統配置信息。
  • 用戶數據庫(用戶自定義的數據庫):一般的,一個項目一個用戶數據庫。
2.數據庫操作命令
(1)查看和選擇數據庫
  • 查看數據庫服務器存在哪些數據庫: SHOW DATABASES;
  • 使用指定的數據庫:USE database_name;
  • 查看指定的數據庫中有哪些數據表: SHOW TABLES;
(2)創建和刪除數據庫
  • 創建指定名稱的數據庫: CREATE DATABASE database_name;
  • 刪除數據庫:DROP DATABASE database_name;
3.數據庫存儲引擎

數據庫存儲引擎.png

二、MySQL常用列類型

1.整數類型

最常用的整數類型:

MySQL列類型 Java數據類型
INT int/Integer
BIGINT long/Long

整數類型.png

MySQL 以一個可選的顯示寬度指示器的形式對 SQL 標準進行擴展,這樣當從數據庫檢索一個值時,可以把這個值加長到指定的長度。例如,指定一個字段的類型爲 INT(6),就可以保證所包含數字少於 6 個的值從數據庫中檢索出來時能夠自動地用空格填充。需要注意的是,使用一個寬度指示器不會影響字段的大小和它可以存儲的值的範圍。一般不用指定位寬。

2.小數類型

FLOAT[(s,p)] :
DOUBLE[(s,p)] : 小數類型,可存放實型和整型 ,精度(p)和範圍(s)
money double(5,2): 整數和小數一共佔5位.其中小數佔2位.
都不夠精確。
定點數據類型: DECIMAL,高精度類型,金額貨幣優先選擇。

MySQL列類型 Java數據類型
FLOAT float/Float
DOUBLE double/Double
DECIMAL(s,p) BigDecimal

小數類型.png

3.字符類型

char(size) 定長字符,0 - 255字節,size指N個字符數,若插入字符數超過設定長度,會被截取並警告。
varchar(size) 變長字符,0 - 255字節,從MySQL5開始支持65535個字節,若插入字符數超過設定長度,會被截取並警告。
一般存儲大量的字符串,比如文章的純文本,可以選用TEXT系列類型,這個系列都是變長的。

注意:在MySQL中,字符類型必須指定長度,值要使用單引號引起來。 相當於Java中字符串(String,StringBuilder/StringBuffer);

字符類型.png

對比char(4)和varchar(4)佔用空間的問題?

4.日期和時間類型

日期和時間類型爲DATETIME、DATE、TIMESTAMP、TIME和YEAR。
注意:在MySQL中,日期時間值使用單引號引起來。 相當於Java中Date,Calender。

日期時間類型.png

5.二進制類型

存放圖形、聲音和影像,二進制對象,0-4GB。
開發中,我們一般存儲二進制文件保存路徑。
BIT:我們一般存儲0或1,存儲是Java中的boolean/Boolean類型的值。
其他的大二進制類型,開發中一般都不用

二進制類型.png

三、MySQL表的操作

1.創建表

步驟:
1. 先進入某一個數據庫
2. 輸入建表的命令

CREATE TABLE 表名(
   列名1    列的類型   [約束],
   列名2    列的類型   [約束],
   ....
   列名N    列的類型   [約束]   
);

注意:最後一行沒有逗號

使用使用標識符時不要用SQL的關鍵字,如果用到的話怎麼辦呢?比如新建一張訂單表(order),但是order是數據庫中的關鍵字(排序使用).

  • 解決方案一:使用反引號`把自定義的標識符引起來.
  • 解決方案二:使用表名的前綴,一般的,習慣t_order.
2.查看錶結構和刪除表
  • 查看錶目錄:SHOW TABLES;
  • 查看錶結構: DESC table_name;
  • 查看DDL語句:SHOW CREATE TABLE table_name;
  • 刪除表:DROP TABLE table_name;
3.表的約束:表的約束(針對於某一列):
  • 非空約束:NOT NULL(NK),不允許某列的內容爲空。
  • 設置列的默認值:DEFAULT。
  • 唯一約束:UNIQUE(UK),在該表中,該列的內容必須唯一。
  • 主鍵約束:PRIMARY KEY(PK), 非空且唯一。
  • 主鍵自增長:AUTO_INCREMENT,從1開始,步長爲1。(MySQL特有)
  • 外鍵約束:FOREIGN KEY(FK),A表中的外鍵列的值必須參照於B表中的某一列(B表主鍵)。

主鍵設計:

1:單列主鍵,單列作爲主鍵,建議使用。
     複合主鍵,使用多列充當主鍵,不建議。
2:主鍵分爲兩種:
   1)自然主鍵:使用有業務含義的列作爲主鍵(不推薦使用);
   2)代理主鍵:使用沒有業務含義的列作爲主鍵(推薦使用);

單表查詢(DQL上)

一、簡單查詢

1.簡單數據查詢
語法:
SELECT  {*, column [alias],...}
FROM  table_name;

說明:
SELECT   選擇查詢列表
FROM   提供數據源(表、視圖或其他的數據源)
如果爲 * 和創建表時的順序一致。
可以自己調整順序,在select後邊加上要查詢的列名。
2.避免重複數據-DISTINCT
消除結果中重複的數據。
需求:查詢商品的分類編號。
語法:
SELECT DISTINCT 列名,...
FROM  table_name;
3.實現數學運算查詢
NUMBER型數據可以使用算數操作符創建表達式(+  -  *  /)
對DATE型數據可以使用部分算數操作符創建表達式 (+  -)
運算符優先級:
1、乘法和除法的優先級高於加法和減法
2、同級運算的順序是從左到右
3、表達式中使用"括號"可強行改變優先級的運算順序
4.設置列的別名
設置列名的別名。
1、改變列的標題頭;
2、用於表示計算結果的含義;
3、作爲列的別名;
4、如果別名中使用特殊字符,或者是強制大小寫敏感,或有空格時,都需加雙引號;

二、過濾查詢

1.比較運算符
比較運算符       含義

=               等於
>               大於
>=              大於或等於
<               小於
<=              小於或等於
!=(<>)       不等於

注意:字符串和日期要用單引號擴起來.
要讓MySQL查詢區分大小寫,可以:
SELECT * FROM table_name WHERE BINARY productName='g9x'
SELECT * FROM table_name WHERE BINARY productName='G9X'
2.邏輯運算符
邏輯運算符        含義

AND(&&)          如果組合的條件都是TRUE,返回TRUE
OR(||)           如果組合的條件之一是TRUE,返回TRUE
NOT(!)           如果下面的條件是FALSE,返回TRUE
3.優先級規則
運算優先級       運算符

1               所有比較運算符
2               NOT
3               AND
4               OR

注意:括號將跨越所有優先級規則

分析SQL:SELECT * FROM product WHERE (NOT productName LIKE '%M%'  AND salePrice > 100) OR (dir_id = 2)
4.範圍查詢 -BTEWEEN AND
使用BETWEEN運算符顯示某一值域範圍的記錄,這個操作符最常見的使用在數字類型數據的範圍上,但對於字符類型數據和日期類型數據同樣可用。
格式:
SELECT <columnList> FROM table_name
WHERE 列名 BETWEEN minvalue AND maxvalue:閉區間。
5.集合查詢 -IN
使用IN運算符,判斷列的值是否在指定的集合中。
格式: WHERE 列名 IN (值1,值2....);
6.空值查詢 -IS NULL
IS NULL:判斷列的值是否爲空。
格式:WHERE  列名 IS NULL;
7.模糊查詢
使用LIKE運算符執行通配查詢,查詢條件可包含文字字符或數字:
%通配符:可表示零或多個字符。
_通配符:可表示一個字符。
通配符:用來實現匹配部分值得特殊字符。

三、結果排序

排序通過ORDER BY 實現 ASC升序 DESC降序 默認是升序

1.排序語法和規則
2.按單列排序
3.按多列排序
4.列的別名排序

四、MySQL分頁查詢

分頁設計:
假分頁(內存分頁):所有數據已經存在內容中,只是顯示部分而已,
    優點:每次翻頁時都從內存中取數據,翻頁速度極快,簡單
    缺點:消耗內存大,容易內存溢出
真分頁(數據庫分頁):每次翻頁都去數據庫查詢數據
    優點:不會造成內存溢出
    缺點:翻頁比較慢,複雜
此時,我們講解MySQL特有的分頁方式(LIMIT,在Oracle12C中也提供類似的語法).
設置每頁最多3條記錄: 
語法: LIMIT ?, ?
參數1:
參數2:
第一頁: 
第二頁: 
第三頁: 
第四頁: 
第N頁:  
演示下公式的分頁查詢效果 LIMIT (currentPage-1) * pageSize, pageSize

五、聚合函數

什麼是聚合函數/統計函數:
聚合函數作用於一組數據,並對一組數據返回一條記錄。
COUNT:統計結果記錄數  
MAX:  統計計算最大值
MIN:  統計計算最小值
SUM:  統計計算求和
AVG:  統計計算平均值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章