MySQL學習從這裏出發!

MySQL數據庫

開發學習中,想知足一些需求,無疑須要常常與數據打交道,例如,咱們在使用IO的一些技術的時候,經常須要將一些數據存儲到外部文件,可能你們會問,咱們初學的時候經常會簡單的保存一些數據到 .txt 文件中,爲何還須要數據庫呢?

(一) 爲何使用數據庫?

(1) 查詢速度

假定咱們將數據所有存儲在一個普通文件中(data.txt)_(以逗號間隔)mysql

......
"Eminem",male,1972,"USA"
"Rihanna",female,1988,"Barbados"
"Taylor Swift",1989,female,"USA"
"Aavril Lavigne",1984,female,"Canada"
......

若是在咱們的數據極爲龐大的狀況下,咱們須要查詢其中的一些數據,例如,查詢Eminem的國籍,咱們通常會使用遍歷,可是毫無疑問,這個響應時間會變得極其緩慢,可是使用數據庫後,它所提供的一些索引技術等就能夠解決這樣的問題redis

(2) 保證數據完整有效

"Rihanna",female,1988,"Barbados"
"Rihanna",female,1995,"USA"

若是數據中出現了重名的狀況,又如何判斷是否是同一我的呢?sql

若是data.txt文件中的數據被錯誤的修改,例如出生年份被修改成其餘類型字符串這種無效表達怎麼辦?數據庫

或許你能夠在程序中寫一些邏輯判斷語句進而篩選處理這些問題,可是仍舊在數據較爲龐大的狀況下,會出現各類各樣的問題,增長了開發者的開發難度,而數據庫自己就制定了一些約束,從而保證了數據的完整且,有效,從而使開發者只須要更加註重於程序自己的設計,而不用花費過多的時間去處理數據上的一些細節問題安全

(3) 數據共享

經常使用來簡單存儲數據的 txt/excel 等均屬於單一文件,而且都是沒法共享的,只支持當前用戶使用而且修改併發

數據庫容許用戶共享,不一樣的用戶能夠同時存取數據庫中的數據,用戶也能夠用各類方式經過接口使用數據庫,並提供數據共享函數

(4) 數據的安全性

在咱們前者中,數據的修改是很隨意的
可是在實際開發中,咱們有時候須要面臨,多個用戶檢索、修改同一文件中的數據,或者在併發狀況下,寫同一文件或者記錄,而數據庫基於鎖等的一些技術即可以幫助咱們解決這些問題學習

(5) 故障恢復

因爲邏輯或者物理上的錯誤,致使了系統的錯誤操做,從而使得數據被皮懷,如何快速恢復數據,咱們上面的單一文件系統顯然沒法幫助咱們解決問題,而數據庫卻有相關機制去彌補、處理相關問題網站

上面咱們僅僅從幾個常見的點分析了爲何使用數據庫,固然遠遠不止這些,因此總的來講就是數據庫其特殊的存儲以及管理方式,既提升了效率,也極大的減小了開發人員的負擔ui

(二) 數據庫的基本概念

(1) 概述

數據庫(DateBase,簡稱DB)是一種用於存儲和管理數據的倉庫,簡單的說就是一個容器內,內部按照必定方式存儲着一些數據

(2) 特色

  1. 持久化存儲數據的。其實數據庫就是一個文件系統
  2. 數據獨立存儲,且集中控制,方便存儲和管理數據
  3. 使用了統一的方式操做數據庫 -- SQL
  4. 實現數據共享
  5. 數據一致性和可維護性,保證數據安全可靠

(三) MySQL數據庫的基本操做

MySQL服務啓動(兩種方式)
    1. cmd--> services.msc 打開服務的窗口
    2. 使用管理員打開cmd
            A: net start mysql : 啓動mysql的服務
            B: net stop mysql : 關閉mysql服務

MySQL登陸
        1. 點擊 MySQL 5.7 Command Line Client,輸入密碼便可
        2. 命令行登陸(配置好環境變量)
            A: mysql -uroot -p密碼 //root爲用戶名
            B: mysql -hip -uroot -p鏈接目標的密碼
            C: mysql --host=ip --user=root --password=鏈接目標的密碼
MySQL退出
        1. exit
        2. quit

(四) SQL簡單認識

(1) 什麼是SQL?

Structured Query Language:結構化查詢語言

SQL就是訪問和處理關係數據庫的計算機標準語言,它定義了操做全部關係型數據庫的規則

大部分數據庫在SQL的標準上進行了擴展。而每一種數據庫操做的方式存在不同的地方,稱爲方言

但凡涉及到關係型數據庫就離不開SQL,例如在電商網站中存入商品信息,遊戲中存儲裝備道具信息等

補充

常見的關係型數據庫Oracle、DB二、Microsoft SQL Server、Microsoft AccessMySQL

商用:Oracle、DB二、Microsoft SQL Server

開源:MySQL

桌面:Microsoft Access

常見的非關係型數據庫:NoSql、Cloudant、MongoDb、redis、HBase

(2) SQL通用語法

1. SQL語句 單行或多行書寫,以分號結尾,而且可使用空格和縮進來加強語句的可讀性
2. MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫
3. 3 種註釋
        A: 單行註釋: -- 註釋內容 或 # 註釋內容(mysql 特有) 
        B: 多行註釋: /* 註釋 */

(五) SQL分類

數據定義語言——DDL(Data Definition Language)

容許用戶定義 (建立) 數據庫對象:數據庫,表,列等

數據操做語言——DML(Data Manipulation Language)

容許用戶對數據庫中表的數據進行增刪改

數據查詢語言——DQL(Data Query Language)

容許用戶查詢數據庫中表的記錄(數據)

數據控制語言——DCL(Data Control Language)

用來定義數據庫的訪問權限和安全級別,及建立用戶

(1) DDL:操做數據庫、表

1. 操做數據庫 —— CRUE
-- CURE --->  C(Create):建立 + R(Retrieve):查詢 + U(Update):修改 + D(Delete):刪除

1. C(Create):建立
    -- 建立數據庫
        CREATE DATABASE 數據庫名稱;
    -- 建立數據庫,判斷不存在,再建立
        CREATE DATABASE IF NOT EXISTS 數據庫名稱;
    -- 建立數據庫,而且制定字符集
        CREATE DATABASE 數據庫名稱 CHARACTER SET 字符集名;
        
2. R(Retrieve):查詢
    -- 查詢全部數據庫名稱
        SHOW DATABASES
    -- 查詢某個數據庫的字符集 : 查詢某個數據庫的建立語句
        SHOW CREATE DATABASE 數據庫名稱;

3. U(Update):修改
    -- 修改數據庫的字符集
        ALTER DATABASE 數據庫名稱 CHARACTER SET 字符集名稱;

4. D(Delete):刪除    
    -- 刪除數據庫
        DROP DATABASE 數據庫名稱;
    -- 判斷數據庫存在,存在再刪除
        DROP DATABASE IF EXISTS 數據庫名稱;

5. 使用數據庫
    -- 查詢當前正在使用的數據庫名稱
        SELECT DATABASE();
    -- 使用數據庫
        USE 數據庫名稱;
2. 操做表
1. C(Create):建立
    -- 語法 * 注意最後一行不須要加逗號(,)
        CREATE TABLE 表名(
            列名1 數據類型1,
            列名2 數據類型2,
            ......
            列名n 數據類型n
        );

    -- 數據類型
        1. INT:整數類型
        2. DOUBLE:小數類型
        3. DATE:日期,只包含年月日,yyyy-MM-dd
        4. DATETIME:日期,包含年月日時分秒     yyyy-MM-dd HH:mm:ss
        5. TIMESTAMP:時間錯類型    包含年月日時分秒     yyyy-MM-dd HH:mm:ss    
        6. VARCHAR:字符串
    -- 注意:time若是未來不給這個字段賦值,或賦值爲null,則默認使用當前的系統時間來自動賦值
    -- DOUBLE(6,3) 表明共保留6位數字,小數點後保留3位
    
    -- 複製表
        CREATE TABLE 表名 LIKE 被複制的表名;
        
2. R(Retrieve):查詢
    -- 查詢某個數據庫中全部的表名
        SHOW TABLES;
    -- 查詢表結構
        DESC 表名;
        
3. U(Update):修改
    -- 修改表名
        ALTER TABLE 表名 RENAME TO 新表名
    -- 修改表的字符集
        ALTER TABLE 表名 CHARACTER SET 字符集名稱;
    -- 添加一列
        ALTER TABLE 表名 ADD 列名 數據類型
    -- 修改列名稱 類型
        ALTER TABLE 表名 CHANGE 列名 新列名 新數據類型;
        ALTER TABLE 表名 MODIFY 列名 新數據類型;
    -- 刪除列
        DROP TABLE 表名;
        DROP TABLE IF EXISTS 表名;
4. D(Delete):刪除    
        DROP TABLE 表名;
        Drop TABLE IF EXISTS 表名;

(2) DML:增刪改表中的數據

1. 表中添加數據
    -- 語法:
        INSERT INTO 表名(列名1,列名2,...列名n) VALUES(值1,值2,...值n);
    -- 注意:
        A: 列名和值要一一對應。
        B: 若是表名後,不定義列名,則默認給全部列添加值
            Eg:INSERT INTO 表名 Values(值1,值2,...值n);
        C: 除了數字類型,其餘類型須要使用引號(單雙均可以)引發來

2. 刪除表中數據
    -- 語法:
        DELETE FROM 表名 [WHERE 條件]
    -- 注意:
        若不加條件,則刪除表中全部記錄
    -- 刪除全部記錄的兩種方式
        A: DELETE FROM 表名; -- 不推薦使用,有多少條記錄就會執行多少次刪除操做
        B: TRUNCATE TABLE 表名; -- 推薦使用,先刪除表,而後再建立一張同樣的表,效率更高
        
3. 修改表中數據
    -- 語法:
        UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2,... [WHERE 條件];
    -- 注意:
        若不限定條件,則會修改表中的全部記錄

(3) DQL:查詢表中的記錄

SELECT * FROM 表名;

1. 語法:
    SELECT
        字段列表
    FROM
        表名列表
    WHERE
        條件列表
    GROUP BY
        分組字段
    HAVING
        分組以後的條件
    ORDER BY
        排序
    LIMIT
        分頁限定
2. 基礎查詢
    -- 多個字段的查詢
        SELECT 字段名1,字段名2... FROM 表名;
        注意:
            若是查詢全部字段,則可使用*來替代字段列表。
    -- 去除重複:
        DISTINCT
    -- 計算列
        通常可使用四則運算計算一些列的值。(通常只會進行數值型的計算)
        IFNULL(表達式1,表達式2):null參與的運算,計算結果都爲null
            表達式1:哪一個字段須要判斷是否爲null
            若是該字段爲null後的替換值。
    -- 起別名:
        as:as也能夠省略
3. 條件查詢
    1. where子句後跟條件
    2. 運算符
        > 、< 、<= 、>= 、= 、<>
        BETWEEN...AND  
        IN( 集合) 
        LIKE:模糊查詢
            佔位符:
                _:單個任意字符
                %:多個任意字符
        IS NULL  
        AND  或 &&
        OR  或 || 
        NOT  或 !
        
            
            -- 查詢年齡不等於20歲
            SELECT * FROM student WHERE age != 20;
            SELECT * FROM student WHERE age <> 20;
            
            -- 查詢年齡大於等於20 小於等於30(三種方式)
            SELECT * FROM student WHERE age >= 20 &&  age <=30;
            SELECT * FROM student WHERE age >= 20 AND  age <=30;
            SELECT * FROM student WHERE age BETWEEN 20 AND 30;
            
            -- 查詢年齡22歲,18歲,25歲的信息
            SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
            SELECT * FROM student WHERE age IN (22,18,25);
            
            -- 查詢英語成績爲null
            -- 下面第一句是錯誤的,null值不能使用 = 和(!=) 判斷
            SELECT * FROM student WHERE english = NULL; (×)
            SELECT * FROM student WHERE english IS NULL; (√)
            
            -- 查詢英語成績不爲null
            SELECT * FROM student WHERE english IS NOT NULL;
            
            -- 查詢姓張的有哪些? like
            SELECT * FROM student WHERE NAME LIKE '張%';
            
            -- 查詢姓名第二個是傑的人
            SELECT * FROM student WHERE NAME LIKE "_傑%";
            
            -- 查詢姓名是3個字的人
            SELECT * FROM student WHERE NAME LIKE '___';
            
            -- 查詢姓名中包含文的人
            SELECT * FROM student WHERE NAME LIKE '%文%';

DQL:查詢語句

1. 排序查詢
    -- 語法:
        ORDER BY 子句
        * ORDER BY 排序字段1 排序方式1 ,排序字段2 排序方式2...

    -- 排序方式:
        ASC:升序,默認的。
        DESC:降序

    -- 注意:若是有多個排序條件,則當前邊的條件值同樣時,纔會判斷第二條件。
2. 聚合函數:將一列數據做爲一個總體,進行縱向的計算。
    COUNT:計算個數
        -- 通常選擇非空的列:主鍵
        -- count(*)
    MAX:計算最大值
    MIN:計算最小值
    SUM:計算和
    AVG:計算平均值
    
    -- 注意:聚合函數的計算,排除null值。
        解決方案:
            1. 選擇不包含非空的列進行計算
            2. IFNULL函數
3. 分組查詢:
    -- 語法:
        group BY 分組字段;

    -- WHERE 和 HAVING 的區別?
        WHERE 在分組以前進行限定,不知足則不分組
        HAVING在分組以後進行限定,不知足則查不到
            
        WHERE 後不能夠跟聚合函數,having能夠進行聚合函數的判斷

    -- 常見舉例,鞏固一下語法

    -- 按照性別分組,分別查詢男、女同窗的平均分
        SELECT sex , AVG(math) FROM student GROUP BY sex;
        
    -- 按照性別分組,分別查詢男、女同窗的平均分,人數
        SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
        
    -- 按照性別分組,分別查詢男、女同窗的平均分,人數 要求:分數低於60分的人,不參與分組
        SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex;
        
    --  按照性別分組,分別查詢男、女同窗的平均分,人數 
    --  要求:分數低於60分的人,不參與分組或分組以後,人數要大於2我的
        SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex HAVING COUNT(id) > 2;
        
        SELECT sex , AVG(math),COUNT(id) 人數 FROM student WHERE math > 60 GROUP BY sex HAVING 人數 > 2;
4. 分頁查詢
    -- 語法:
        limit 開始的索引,每頁查詢的條數;
    -- 公式:
        開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
        每頁顯示5條記錄 

        SELECT * FROM student LIMIT 0,5; -- 第1頁
        SELECT * FROM student LIMIT 5,5; -- 第2頁
        SELECT * FROM student LIMIT 10,5;-- 第3頁

    -- LIMIT 是一個MySQL"方言"

結尾:

若是內容中有什麼不足,或者錯誤的地方,歡迎你們給我留言提出意見, 蟹蟹你們 !^_^

若是能幫到你的話,那就來關注我吧!(系列文章均會在公衆號第一時間更新)

在這裏的咱們素不相識,卻都在爲了本身的夢而努力 ❤

一個堅持推送原創Java技術的公衆號:理想二旬不止

相關文章
相關標籤/搜索