第一:MySQL基礎語法

2020-08-14 21:08:14

MySQL基礎語法

學習目標

  1. 能夠使用SQL語句建庫、建表
  2. 能夠使用SQL語句進行數據的添刪改查操作
  3. 能夠使用SQL語句進行排序

學習內容

數據庫的基本知識

目標

  1. 學習數據庫的概念
  2. 瞭解常用的數據庫

什麼是數據庫

儲存數據的倉庫

數據的儲存方式

  1. 數據儲存在記憶體

    int[] arr = new int[]{1, 2, 3, 4};
    ArrayList<Integer>list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    

    new出來的物件儲存在堆中,堆是記憶體中的一小塊空間

    優點:記憶體速度快
    缺點:斷電/程式退出,數據就清除了,記憶體價格貴

  2. 數據儲存在普通檔案
    優點:永久儲存
    缺點:查詢,增加,修改,刪除數據比較麻煩,效率低

  3. 數據儲存在數據庫
    優點:永久儲存,通過SQL語句比較方便的操作數據庫,數據庫是對大量的資訊進行管理的高效的解決方案

常見數據庫

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-d4HOn8Gs-1597409228446)(/常見數據庫.PNG)]
Oracle:收費的大型數據庫,Oracle公司的產品。Oracle收購SUN公司,收購MYSQL。

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-xovJHaNi-1597409228451)(/1596868707747.png)]

MYSQL:開源免費的數據庫,小型的數據庫。已經被Oracle收購了。MySQL6.x版本也開始收費。

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-Bws9xpn1-1597409228474)(/1596868680479.png)]

DB2 :IBM公司的數據庫產品,收費的。常應用在銀行系統中。
SQLServer:MicroSoft 公司收費的中型的數據庫。C#、.net等語言常使用。
SyBase:已經淡出歷史舞臺。提供了一個非常專業數據建模的工具PowerDesigner。
SQLite: 嵌入式的小型數據庫,應用在手機端。

常用數據庫

MySQLOracle

在web應用中,使用的最多的就是MySQL數據庫,原因如下:

  1. 開源、免費
  2. 功能足夠強大,足以應付web應用開發(最高支援千萬級別的併發存取)

小結

  1. 說出數據庫的概念:儲存數據的倉庫
  2. 說出常用的數據庫:MySQL, Oracle

MySQL數據庫解除安裝

目標

瞭解MySQL數據庫解除安裝

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-qd3OJWzR-1597409228480)(unload.png)]

數據庫的安裝

目標

學習MySQL數據庫軟體的安裝

講解

安裝過程:

  1. 檔案複製的過程,解壓檔案到指定的目錄下

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-pSv7KnKh-1597409228487)(/1550408706301.png)]

  2. 伺服器的設定

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-V3cAtsbj-1597409228488)(/1550408729170.png)]

    埠號是:3306

    管理員名字叫:root

    可以遠端存取:[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-XSh4aU0e-1597409228490)(/1550408779650.png)]

小結

  1. MySQL安裝過程的兩個步驟:1.解壓複製 2.設定MySQL伺服器

  2. MySQL埠號是:3306, 選擇編碼utf8

  3. 管理員名字:root

MySQL目錄結構

目標

瞭解MySQL目錄結構

-- bin:mysql相關的可執行檔案*.exe-- MySQLInstanceConfig.exe mysql的設定程式-- data: mysql自帶的數據庫檔案(不用關注)-- include: c語言的標頭檔案(不用關注)-- lib: 存放mysql使用到的dll動態庫(相當於jar包,不用關注)-- my.ini mysql的組態檔,設定了mysql的相關資訊

命令列用戶端連線伺服器

目標

  1. 學習啓動和關閉mysql服務
  2. 學習登錄mysql

服務意味着沒有圖片介面

開啓和關閉mysql服務

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-TnrI9o08-1597409228491)(/1550408825267.png)]
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-nHhxMmd1-1597409228492)(/mysql啓動02.png)]

登錄mysql伺服器

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-xcleqKw1-1597409228495)(/1550289380140.png)]

​ MySQL是一個需要賬戶名密碼登錄的數據庫,登陸後使用,它提供了一個預設的root賬號,使用安裝時設定的密碼即可登錄

  1. 登錄格式1:在DOS命令列:mysql -u使用者名稱 -p密碼

u和p後面沒有空格

例如:

mysql -uroot -proot

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-AIxYuSsy-1597409228498)(/MYSQL登錄01.png)]

後輸入密碼方式:

mysql -uroot -p回車
下一行輸入密碼
  1. 登錄格式2:mysql -hip地址 -u使用者名稱 -p密碼
    例如:

    mysql -h127.0.0.1 -uroot -proot
    
  2. 退出MySQL:exitquit

小結

  1. 連線到本機的mysql

    mysql -u賬號 -p密碼
    
  2. 連線到指定主機的mysql

    mysql -hIP地址 -u賬號 -p密碼
    

圖形介面SQLyog用戶端

目標

  1. 學習SQLyog的安裝
  2. 學習使用SQLyog連線mysql

講解

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-JZqjeB4u-1597409228501)(/1550289366973.png)]

​ SQLyog是業界著名的Webyog公司出品的一款簡潔高效、功能強大的圖形化MySQL數據庫管理工具。使用SQLyog可以快速直觀地讓您從世界的任何角落通過網路來維護遠端的MySQL數據庫

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-smAHyDUk-1597409228503)(/SQLYog介紹.png)]

  1. 雙擊[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-TjDoPavP-1597409228505)(/SQLYog程式.png)]
  2. 一直下一步,直到出現下面 下麪對話方塊
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-vlKKJhgv-1597409228509)(/SQLYog註冊.png)]
  3. 輸入名稱和祕鑰
  4. 重新啓動SQLyog即可
  5. 使用SQLyog登錄數據庫
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-IkrKcUYv-1597409228511)(/SQLyog使用01.png)]

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-9QkWuj3Q-1597409228513)(/1597196571164.png)]

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-dbgyS5Cl-1597409228516)(/1597196642007.png)]

小結

  1. SQLyog的安裝?

    一直下一步

  2. 使用SQLyog連線mysql?

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-ClitsWbs-1597409228517)(/SQLyog使用01.png)]

伺服器與數據庫、表、記錄的關係

目標

學習MySQL伺服器與數據庫、表、記錄的關係

講解

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-wVB7FsCt-1597409228518)(/1550409365086.png)]

關係型數據庫的核心單元是表,有行有列

小結

MySQL伺服器與數據庫、表、記錄的關係?

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-JOIjaxlI-1597409228520)(/1597196947400.png)]

SQL語句的分類和語法

目標

學習SQL的概念和作用

什麼是SQL

(Structured Query Language) 結構化查詢語言,簡稱SQL。

SQL作用

通過SQL語句我們可以方便的操作數據庫、表、數據。
SQL是數據庫管理系統都需要遵循的規範。不同的數據庫生產廠商都支援SQL語句,但都有特有內容。
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-dfXjqoW5-1597409228523)(/SQL規範.png)]

SQL語句分類

  1. DDL(Data Definition Language) 數據定義語言
    用來定義數據庫物件:數據庫,表,列等。關鍵字:create,drop,alter等

  2. DML(Data Manipulation Language) 數據操作語言
    用來對數據庫中表的數據進行增刪改。關鍵字:insert,delete,update等

  3. DQL(Data Query Language) 數據查詢語言
    對數據庫進行數據查詢,關鍵字select

  4. DCL(Data Control Language)數據控制語言(瞭解)

    是用來設定或更改數據庫使用者或角色許可權的語句,這個比較少用到

SQL通用語法

  1. SQL語句可以單行或多行書寫,以分號結尾。

  2. 可使用空格和縮排來增強語句的可讀性。

  3. MySQL數據庫的SQL語句不區分大小寫,關鍵字建議使用大寫。

    SELECT
    *
    FROM
    user;
    
  4. 3種註釋
    單行註釋: – 註釋
    多行註釋: /*註釋*/
    MySQL特有的單行註釋:# 註釋

小結

  1. SQL的作用?

    通過SQL語句可以非常方便的操作數據庫,表,記錄
    
  2. SQL的分類?

    DDL: 數據定義語言,操作數據庫,表
    DML: 數據操作語言,操作數據增刪改
    DQL: 數據查詢語言,查詢數據
    DCL: 操作數據的使用者角色的
    

DDL建立數據庫(重要)

目標

學習建立數據庫的三種語法

講解

建立數據庫

  1. 直接建立數據庫

    CREATE DATABASE 數據庫名;
    
  2. 判斷是否存在並建立數據庫

    CREATE DATABASE IF NOT EXISTS 數據庫名;
    
  3. 建立數據庫並指定字元集(編碼表)

    CREATE DATABASE 數據名 DEFAULT CHARACTER SET 字元集;
    
  4. 具體操作:

  • 直接建立數據庫db1

    CREATE DATABASE db1;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-P6uI3acf-1597409228525)(/直接建立數據庫.png)]

  • 判斷是否存在並建立數據庫db2

    CREATE DATABASE IF NOT EXISTS db2;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-jttgITaL-1597409228527)(/判斷是否存在並建立數據庫.png)]

  • 建立數據庫db3並指定字元集爲gbk

    CREATE DATABASE db2 CHARACTER SET gbk;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-Awmm0QHR-1597409228529)(/建立數據庫並指定字元集.png)]

檢視數據庫

  1. 檢視所有的數據庫
SHOW DATABASES;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-gQQKlzt2-1597409228533)(/檢視所有數據庫.png)]
2. 檢視某個數據庫的定義資訊

SHOW CREATE DATABASE 數據名;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-2bbgey1I-1597409228535)(/檢視某個數據庫的定義資訊.png)]

小結

  1. 建立數據庫語法

    CREATE DATABASE 數據庫名;
    
  2. 檢視有哪些數據庫

    SHOW DATABASES;
    

DDL修改和刪除數據庫(重要)

目標

  1. 學習修改數據庫的字元集
  2. 學習刪除數據庫

修改數據庫字元集

ALTER DATABASE 數據庫名 DEFAULT CHARACTER SET 字元集;

具體操作:

  • 將db3數據庫的字元集改成utf8
    ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
    
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-uNUn2Smx-1597409228538)(/修改數據庫字元集.png)]

刪除數據庫

DROP DATBASE 數據庫名;

具體操作:

  • 刪除db2數據庫
    DROP DATABASE db2;
    
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-ws5EjHYS-1597409228540)(/刪除數據庫.png)]

小結

  1. 修改數據庫的字元集格式?

    ALTER DATABASE 數據庫名 DEFAULT CHARACTER SET 字元集;
    
  2. 刪除數據庫格式?

    DROP DATABASE 數據庫名;
    

DDL使用數據庫

目標

  1. 學習切換數據庫語法
  2. 檢視正在使用的數據庫

講解

  1. 檢視正在使用的數據庫

    SELECT DATABASE();
    
  2. 使用/切換數據庫

    USE 數據庫名;
    

具體操作:

  • 檢視正在使用的數據庫
    SELECT DATABASE();
    
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-eULxVMUZ-1597409228542)(/檢視正在使用的數據庫.png)]
  • 使用db1數據庫
    USE db1;
    
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-84PlxF1k-1597409228544)(/使用db1數據庫.png)]

小結

DDL語句操作數據庫 關鍵字
建立
修改
檢視
刪除

DDL建立表(重要)

目標

學習DDL建立表

前提先使用某個數據庫(db1)

建立表

CREATE TABLE 表名 (欄位名1 欄位型別1, 欄位名2 欄位型別2);

建議寫成如下格式:

CREATE TABLE 表名 (
    欄位名1 欄位型別1, 
    欄位名2 欄位型別2
);

MySQL數據型別

MySQL中的我們常使用的數據型別如下:
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-uv5EHwUz-1597409228547)(/MYSQL常用數據型別.png)]

詳細的數據型別如下(不建議詳細閱讀!)

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-7jdEuss1-1597409228548)(/1550410505421.png)]

具體操作:

建立student表包含id,name,birthday欄位

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE
);

小結

  1. 建立表語句

    CREATE TABLE 表名 (
    	欄位名 欄位型別,
        欄位名 欄位型別
    );
    
  2. 常用數據型別

    int
    double
    

varchar(數量)
date




## DDL檢視錶(重要)

### 目標

1. 學習檢視某個數據庫中的所有表
2. 學習檢視錶結構

### 講解

1. 檢視某個數據庫中的所有表

```sql
SHOW TABLES;
  1. 檢視錶結構

    DESC 表名;
    
  2. 檢視建立表的SQL語句

    SHOW CREATE TABLE 表名;
    

具體操作:

  • 檢視MySQL數據庫中的所有表

    SHOW TABLES;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-MadhvyMs-1597409228550)(/檢視某個數據庫中的所有表.png)]

  • 檢視student表的結構

    DESC student;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-voc1yDUv-1597409228551)(/檢視student表的結構.png)]

  • 檢視student的建立表SQL語句

    SHOW CREATE TABLE student;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-sHBJt0m1-1597409228554)(/檢視student的建立表SQL語句.png)]

小結

  1. 檢視某個數據庫中的所有表

    SHOW TABLES;
    
  2. 檢視錶結構

    DESC 表名;
    
  3. 檢視建立表的SQL語句

    SHOW CREATE TABLE 表名;
    

DDL刪除表(重要)

目標

  1. 學習刪除表語法
  2. 學習快速建立一個表結構相同的表

講解

快速建立一個表結構相同的表(複製表)

CREATE TABLE 表名 LIKE 其他表;

具體操作:

  • 建立s1表,s1表結構和student表結構相同

    CREATE TABLE s1 LIKE student;
    

刪除表

  1. 直接刪除表

    DROP TABLE 表名;
    
  2. 判斷表是否存在並刪除表

    DROP TABLE IF EXISTS 表名;
    

具體操作:

  • 直接刪除表s1表
    DROP TABLE s1;
    
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-IfQ2xZUk-1597409228556)(/直接刪除表.png)]
  • 判斷表是否存在並刪除s1表
    DROP TABLE IF EXISTS s1;
    
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-d6g8MMYF-1597409228559)(/判斷表存在並刪除.png)]

小結

  1. 快速建立一個表結構相同的表

    CREATE TABLE 表名 LIKE 其他表;
    
  2. 刪除表語法

    DROP TABLE 表名;
    

DDL修改表結構

目標

學習修改表結構的語法

講解

所有的修改表結構的語句都是: ALTER TABLE 表名 XXX;

修改表結構使用不是很頻繁,只需要瞭解,等需要使用的時候再回來查即可

  1. 新增表一列

    ALTER TABLE 表名 ADD 欄位名 欄位型別;
    

    具體操作:

    • 爲學生表新增一個新的欄位remark,型別爲varchar(20)
      ALTER TABLE student ADD remark VARCHAR(20);
      
      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-WqKLqpfJ-1597409228564)(/新增欄位.png)]
  2. 修改欄位型別

    ALTER TABLE 表名 MODIFY 欄位名 新型別;
    

    具體操作:

    • 將student表中的remark欄位的改成varchar(100)
      ALTER TABLE student MODIFY remark VARCHAR(100);
      
      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-RByASkSw-1597409228566)(/修改欄位型別.png)]
  3. 修改欄位名

    ALTER TABLE 表名 CHANGE 老欄位名 新欄位名 型別;
    

    具體操作:

    • 將student表中的remark欄位名改成intro,型別varchar(30)
      ALTER TABLE student CHANGE remark intro varchar(30);
      
      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-DXHrsOu6-1597409228567)(/修改表欄位名稱.png)]
  4. 刪除欄位

    ALTER TABLE 表名 DROP 欄位名;
    

    具體操作:

    • 刪除student表中的欄位intro
      ALTER TABLE student DROP intro;
      
      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-LLaYW9jE-1597409228569)(/刪除欄位.png)]
  5. 修改表名

    RENAME TABLE 表名 TO 新表名;
    

具體操作:

  • 將學生表student改名成student2,再刪除student2表
     RENAME TABLE student TO student2;
     DROP TABLE student2;
    
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-InHt42PN-1597409228571)(/修改表名.png)]
  1. 修改表的字元集

    ALTER TABLE 表名 DEFAULT CHARACTER SET 新字元集;
    

    具體操作:

    • 將sutden2表的編碼修改成gbk
      ALTER TABLE student2 character set gbk;
      
      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-vaoayG1a-1597409228572)(/修改字元集.png)]

小結

  1. 所有修改表前面的語法都是相同的?

    ALTER TABLE 表名 xxx;
    
  2. 新增欄位:

    ALTER TABLE 表名 ADD 欄位名 欄位型別;
    
  3. 修改欄位型別:

    ALTER TABLE 表名 MODIFY 欄位名 新型別;
    
  4. 修改欄位名和型別:

    ALTER TABLE 表名 CHANGE 老欄位名 新欄位名 型別; 
    
  5. 刪除一列:

    ALTER TABLE 表名 DROP 欄位名
    

DML插入記錄(重點)

目標

學習DML往表中新增記錄

講解

DML是對錶中的數據進行增刪改

建立student表包含id,name,birthday,sex,address欄位。

CREATE TABLE student (
      id INT,
      name VARCHAR(20),
      birthday DATE,
      sex char(2),
      address varchar(50)
);

插入全部欄位

  • 所有的欄位名都寫出來

    INSERT INTO 表名 (欄位名1, 欄位名2, 欄位名3, ...) VALUES (1,2,3, ...);
    
  • 不寫欄位名

    INSERT INTO 表名 VALUES (1,2,3, ...);
    

插入部分數據

只需要指定要插入數據的欄位
INSERT INTO 表名 (欄位名1, 欄位名2...) VALUES (欄位值1, 欄位值2);

沒有新增數據的欄位會使用NULL

  1. 具體操作:

    • 插入部分數據,往學生表中新增 id, name, age, sex數據
    INSERT INTO student (id, NAME, age, sex) VALUES (1, '張三', 20, '男');
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-ARVmwqzt-1597409228575)(/新增部分數據.png)]

    • 向表中插入所有欄位

      • 所有的欄位名都寫出來
      INSERT INTO student (NAME, id, age, sex, address) VALUES ('李四', 2, 23, '女', '廣州');
      

      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-PK9DrILx-1597409228577)(/所有欄位都新增數據.png)]

      • 不寫欄位名
      INSERT INTO student VALUES (3, '王五', 18, '男', '北京');
      

      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-nqfGCApw-1597409228578)(/新增所有欄位數據.png)]

注意

  • 值與欄位必須對應,個數相同,型別相同
  • 值的數據大小必須在欄位的長度範圍內
  • 除了數值型別外,其它的欄位型別的值必須使用引號引起。(建議單引號)
  • 如果要插入空值,可以不寫欄位,或者插入NULL

小結

  1. 向表中新增一條完整記錄:

    所有的欄位都寫出來
    INSERT INTO 表名 (欄位1, 欄位2, 欄位3) VALEUS (1,2,3);
    
    不寫欄位名
    INSERT INTO 表名 VALEUS (1,2,3);
    

DOS命令視窗操作數據亂碼問題

目標

學習解決DOS命令列中文亂碼

講解

當我們使用DOS命令列進行SQL語句操作如有有中文會出現亂碼,導致SQL執行失敗
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-puImblse-1597409228579)(/DOS中文亂碼01.png)]
錯誤原因:因爲MySQL的用戶端設定編碼是utf8,而系統的DOS命令列編碼是gbk,編碼不一致導致的亂碼
[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-IYeEsnIj-1597409228581)(/1551157215427.png)]

解決方案:

  1. 快捷設定
    在DOS命令列輸入:
    set names gbk;
    

注意:以上方式爲臨時方案,退出DOS命令列就失效了,需要每次都設定

  1. 修改MySQL安裝目錄下的my.ini檔案,重新啓動服務所有地方生效。此方案將所有編碼都修改了[不建議]
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-mqJ4Z3kv-1597409228582)(/DOS中文亂碼04.png)]

小結

如何解決DOS命令列亂碼

在DOS命令列輸入:
SET NAMES gbk;

DML更新表記錄(重要)

目標

學習DML更新表記錄

講解

  1. 不帶條件修改數據

    UPDATE 表名 SET 欄位名=欄位值;
    
  2. 帶條件修改數據

    UPDATE 表名 SET 欄位名=欄位值 WHERE 條件;
    
  3. 具體操作:

    • 不帶條件修改數據,將所有的性別改成女

      UPDATE student SET sex='女';
      

      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-IwaBerOv-1597409228583)(/修改所有數據.png)]

    • 帶條件修改數據,將id號爲2的學生性別改成男

      UPDATE student SET sex='男' WHERE id=2;
      

      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-zaRCKf4H-1597409228584)(/帶條件修改.png)]

    • 一次修改多個列,把id爲3的學生,年齡改成26歲,address改成北京

      UPDATE student SET age=26, address='北京' WHERE id=3;
      

      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-CA4LSWDf-1597409228586)(/一次性修改2個欄位.png)]

小結

  1. 不帶條件的更新數據庫記錄

    UPDATE 表名 SET 欄位名=新的值;
    
  2. 帶條件更新數據庫記錄

    UPDATE 表名 SET 欄位名=新的值 WHERE 條件;
    

DML刪除表記錄(重要)

目標

學習DML刪除表記錄

講解

  1. 帶條件刪除數據

    DELETE FROM 表名 WHERE 條件;
    
  2. 不帶條件刪除數據

    DELETE FROM 表名;
    
  3. 具體操作:

    • 帶條件刪除數據,刪除id爲3的記錄

      DELETE FROM student WHERE id=3;
      

      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-c443sCud-1597409228588)(/刪除滿足條件的記錄.png)]

    • 不帶條件刪除數據,刪除表中的所有數據

      DELETE FROM student;
      

      [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-cUkj5XaU-1597409228589)(/刪除所有記錄.png)]

小結

  1. 指定條件刪除

    DELETE FROM 表名 WHERE 條件;
    
  2. 沒有條件刪除所有的記錄

    DELETE FROM 表名;
    

DQL沒有條件的簡單查詢(重要)

目標

學習DQL簡單查詢

講解

注意:查詢不會對數據庫中的數據進行修改,只是一種顯示數據的方式。

查詢表中所有列數據

  1. 寫出查詢每列的名稱
SELECT 欄位名1, 欄位名2, 欄位名3 FROM 表名;

具體操作:

SELECT id, NAME ,age, sex, address FROM student;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-HYnVn2QA-1597409228591)(/查詢所有列.png)]

  1. 使用*表示所有列

    SELECT * FROM 表名;
    

    具體操作:

    SELECT * FROM student;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-8dZlNcTG-1597409228592)(/查詢所有列.png)]

查詢student表中的name 和 age 列

SELECT NAME, age FROM student;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-v6yRB0uu-1597409228593)(/查詢指定欄位.png)]

別名查詢

  1. 查詢時給列、表指定別名需要使用AS關鍵字

  2. 使用別名的好處是方便觀看和處理查詢到的數據

    SELECT 欄位名1 AS 別名, 欄位名2 AS 別名... FROM 表名;
    

注意: AS關鍵字可以省略

  1. 具體操作:
    • 查詢sudent表中name 和 age 列,name列的別名爲」姓名」,age列的別名爲」年齡」
    SELECT NAME AS 姓名, age AS 年齡 FROM student;
    
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-TkPz2v92-1597409228594)(/查詢欄位別名.png)]

清除重複值

  1. 查詢指定列並且結果不出現重複數據

    SELECT DISTINCT 欄位名 FROM 表名;
    
  2. 具體操作:

    • 查詢address列並且結果不出現重複的address
    SELECT DISTINCT address 城市 FROM student;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-wgXhps49-1597409228596)(/1550289641391.png)]

查詢結果參與運算

  1. 某列數據和固定值運算

    SELECT 欄位名 +FROM 表名;
    
  2. 某列數據和其他列數據參與運算

    SELECT 欄位1 + 欄位2 FROM 表名;
    

    注意: 參與運算的必須是數值型別

  3. 需求:

    • 新增數學,英語成績列,給每條記錄新增對應的數學和英語成績
    • 查詢的時候將數學和英語的成績相加
  4. 實現:

  • 修改student表結構,新增數學和英語成績列

    ALTER TABLE student ADD math INT;
    ALTER TABLE student ADD english INT;
    
  • 給每條記錄新增對應的數學和英語成績
    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-YcQ84mTH-1597409228597)(/新增數學和英語成績.png)]

  • 查詢math + english的和

    SELECT math + english FROM student;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-VDlZhZTN-1597409228599)(/查詢math和english的和.png)]

    結果確實將每條記錄的math和english相加,但是效果不好看

  • 查詢math + english的和使用別名」總成績」

    SELECT math + english 總成績 FROM student;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-iU2VD6gf-1597409228600)(/組合查詢結果取別名.png)]

  • 查詢所有列與math + english的和並使用別名」總成績」

    SELECT *, math + english 總成績 FROM student;
    

    [外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-qtWsANEg-1597409228601)(/查詢所有列數據和參與運算.png)]

  • 查詢姓名、年齡,將每個人的數學增加10分

    SELECT name, math + 10 FROM student;
    

小結

  1. 簡單查詢格式

    SELECT 欄位名1, 欄位名2 FROM 表名;
    
  2. 定義別名

    AS
    SELECT 欄位名1 AS 別名, 欄位名2 FROM 表名;
    
    可以省略AS
    SELECT 欄位名1 別名, 欄位名2 FROM 表名;
    
  3. 去除重複行

    SELECT DISTINCT 欄位名 FROM 表名;
    

DML_DQL小結

DML語句操作 關鍵字
新增 INSERT INTO 表名 (欄位名, 欄位名) VALUES (值1, 值2);
修改 UPDATE 表名 SET 欄位名=新的值;
刪除 DELETE FROM 表名;
查詢 SELECT * FROM 表名;

DQL查詢語句-條件查詢(重要)

前面我們的查詢都是將所有數據都查詢出來,但是有時候我們只想獲取到滿足條件的數據

目標

學習條件查詢語法格式

講解

語法格式:

SELECT * FROM 表名 WHERE 條件;

流程:取出表中滿足條件的記錄

準備數據

CREATE TABLE student3 (
  id int,
  name varchar(20),
  age int,
  sex varchar(5),
  address varchar(100),
  math int,
  english int
);

INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'馬雲',55,'男','杭州',66,78),(2,'馬化騰',45,'女','深圳',98,87),(3,'馬景濤',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'劉德華',57,'男','香港',99,99),(7,'馬德',22,'女','香港',99,99),(8,'德瑪西亞',18,'男','南京',56,65);

比較運算子

>大於
<小於
<=小於等於
>=大於等於
=等於
<>!=不等於

具體操作:

  • 查詢math分數大於80分的學生
SELECT * FROM student3 WHERE math>80;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-C5XVEfHL-1597409228602)(/where查詢01.png)]

  • 查詢english分數小於或等於80分的學生
SELECT * FROM student3 WHERE english<=80;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-XhihVGej-1597409228604)(/where查詢02.png)]

  • 查詢age等於20歲的學生
SELECT * FROM student3 WHERE age=20;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-V2FCcDDY-1597409228605)(/where查詢03.png)]

  • 查詢age不等於20歲的學生
SELECT * FROM student3 WHERE age!=20;
SELECT * FROM student3 WHERE age<>20;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-J5TJHXDG-1597409228606)(/where查詢04.png)]

邏輯運算子

and(&&) 多個條件同時滿足
or(||) 多個條件其中一個滿足
not(!) 不滿足

具體操作:

  • 查詢age大於35且性別爲男的學生(兩個條件同時滿足)
SELECT * FROM student3 WHERE  age>35 AND sex='男';

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-rwiWulK7-1597409228607)(/where查詢05.png)]

  • 查詢age大於35或性別爲男的學生(兩個條件其中一個滿足)
SELECT * FROM student333 WHERE age>35 OR sex='男';

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-s88dFCwp-1597409228608)(/where查詢06.png)]

  • 查詢id是1或3或5的學生
SELECT * FROM student3 WHERE id=1 OR id=3 OR id=5;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-zRKZjZMC-1597409228609)(/where查詢08.png)]

in關鍵字
語法格式:

SELECT * FROM 表名 WHERE 欄位名 IN (1,2);

in裏面的每個數據都會作爲一次條件,只要滿足條件的就會顯示

具體操作:

  • 查詢id是1或3或5的學生
SELECT * FROM student3 WHERE id IN (1,3,5);

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-bubn7xmB-1597409228611)(/where查詢08.png)]

  • 查詢id不是1或3或5的學生
SELECT * FROM student3 WHERE id NOT IN (1,3,5);

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-6pqr7ZPt-1597409228613)(/where查詢07.png)]

範圍

SELECT * FROM 表名 WHERE 欄位名 BETWEEN1 AND2;

比如:age BETWEEN 80 AND 100
相當於: age>=80 && age<=100

具體操作:

  • 查詢english成績大於等於75,且小於等於90的學生
SELECT * FROM student3 WHERE english>=75 AND english<=90;
SELECT * FROM student3 WHERE english BETWEEN 75 AND 90;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-QT8Qd9j0-1597409228614)(/where查詢09.png)]

小結

比較運算子

>
<
>=
<=
=
!=, <> 不等於

邏輯運算子

&& AND
|| OR
! NOT

IN

SELECT * FROM 表名 WHERE 欄位名 IN (值1, 值2, ...);

BETWEEN AND

SELECT * FROM 表名 WHERE 欄位名 BETWEEN 小值 AND 大值;  包頭又包尾

模糊查詢like(重要)

目標

學習模糊查詢語法格式

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-BqxNQtg1-1597409228615)(/where查詢11.png)]

講解

LIKE 像什麼什麼一樣

SELECT * FROM 表名 WHERE 欄位名 LIKE '萬用字元字串';

滿足萬用字元字串規則的數據就會顯示出來

MySQL萬用字元有兩個:
%: 表示任意多個字元
_: 表示一個字元

具體操作:

  • 查詢姓馬的學生
SELECT * FROM student3 WHERE NAME LIKE '馬%';

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-0cniQIaJ-1597409228617)(/where查詢10.png)]

  • 查詢姓名中包含’德’字的學生
SELECT * FROM student3 WHERE NAME LIKE '%德%';

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-TUXknov0-1597409228618)(/where查詢11.png)]

  • 查詢姓馬,且姓名有三個字的學生
SELECT * FROM student3 WHERE NAME LIKE '馬__';

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-WqY72K3G-1597409228620)(/where查詢12.png)]

小結

模糊查詢格式

SELECT * FROM 表名 WHERE 欄位名 LIKE '萬用字元字串';

%: 表示任意多個字元
_: 表示一個字元

DQL查詢語句-排序(重要)

目標

學習對查詢的數據進行排序

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-TiF0nMOp-1597409228621)(/orderby01.png)]

講解

通過ORDER BY子句,可以將查詢出的結果進行排序(排序只是顯示方式,不會影響數據庫中數據的順序)

SELECT * FROM 表名 ORDER BY 欄位名 ASC|DESC;

ASC: 升序
DESC: 降序

1.2.1 單列排序

單列排序就是使用一個欄位排序

具體操作:

  • 查詢所有數據,使用年齡降序排序
select * FROM student3 order by age DESC;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-7YYMdfjE-1597409228622)(/orderby01.png)]

1.2.2 組合排序

組合排序就是先按第一個欄位進行排序,如果第一個欄位相同,才按第二個欄位進行排序,依次類推。
上面的例子中,年齡是有相同的。當年齡相同再使用math進行排序

SELECT * FROM 表名 WHERE 條件 ORDER BY 欄位名 [ASC|DESC], 欄位名 [ASC|DESC];

具體操作:

  • 查詢所有數據,在年齡降序排序的基礎上,如果年齡相同再以數學成績降序排序
SELECT * FROM student3 ORDER BY age DESC, math DESC;

[外連圖片轉存失敗,源站可能有防盜鏈機制 機製,建議將圖片儲存下來直接上傳(img-ms7uuehc-1597409228626)(/orderby02.png)]

小結

  1. 排序的關鍵字

    ORDER BY 欄位名 [ASC|DESC];
    []: 表示可有可無
    
  2. 升序:ASC

  3. 降序:DESC

總結

  1. 能夠使用SQL語句建庫、建表
    建庫: CREATE DATABASE 數據庫名;
    建表: CREATE TABLE 表名 (欄位名 欄位型別, 欄位名 欄位型別);

  2. 能夠使用SQL語句進行數據的添刪改查操作

    新增: INSERT INTO 表名 (欄位名1, 欄位名2) VALUES (值1, 值2);

    刪: DELETE FROM 表名;

    改: UPDATE 表名 SET 欄位名=值;

    查: SELECT * FROM 表名;

  3. 能夠使用SQL語句進行排序

    SELECT * FROM 表名 ORDER BY 欄位名 [ASC|DESC];

在这里插入图片描述