1. 程式人生 > 其它 >MySQL基礎&SQL入門

MySQL基礎&SQL入門


MySQL基礎&SQL入門

1. 資料庫的基本概念

1.1 什麼是資料庫

  • 1. 資料庫(DataBase) 就是儲存和管理資料的倉庫
  • 2. 其本質是一個檔案系統, 還是以檔案的方式,將資料儲存在電腦上

1.2 為什麼使用資料庫

資料儲存方式的比較

通過上面的比較,我們可以看出,使用資料庫儲存資料, 使用者可以非常方便對資料庫中的資料進行增加, 刪除, 修改及查詢操作。

1.3 常見的資料庫軟體排行榜

2020年資料庫排行

開發中常見的資料庫

為什麼選擇MySQL ?

  • 1. 功能強大,足以應付web應用開發
  • 2. 開源, 免費

2. MySQL的安裝及配置

2.1 安裝MySQL

  • 詳見 MySQL安裝文件

2.2 解除安裝MySQL

  • 詳見 MySQL解除安裝文件

2.3 MySQL環境變數配置

  • 詳見 MySQL環境變數配置文件

2.4 MySQL的啟動與關閉

2.4.1 方式一 : window服務啟動 MySQL

1) 右鍵此電腦 --> 管理

2) 選擇服務--> 找到MysQL服務

3) 右鍵選擇 --> 啟動或停止

2.4.2 方式二: DOS 命令方式啟動

1) 首先以管理員身份 開啟命令列視窗

2) 啟動MySql

3) 關閉MySql

2.5 命令列登入資料庫

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

命令演示:

退出命令

2.6 SqlYog的使用

1) 簡介

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

2) 具體安裝教程 請檢視

  • SQLyog安裝教程

  

2.7 MySql的目錄結構

1) MySQL安裝目錄

MySql的預設安裝目錄在 C:\Program Files\MySQL\MySQL Server 5.7

2) MySQL配置檔案 與 資料庫及 資料表所在目錄

  • my.ini 檔案 是 mysql 的配置檔案,一般不建議去修改
  • data<目錄> Mysql管理的資料庫檔案所在的目錄
  • 幾個概念
  • 資料庫: 資料夾
  • 表: 檔案
  • 資料: 檔案中的記錄

2.8 資料庫管理系統

1) 什麼是資料庫管理系統 ?

  資料庫管理系統(DataBase Management System,DBMS):指一種操作和管理維護資料庫的大型軟體。
  MySQL就是一個 資料庫管理系統軟體, 安裝了Mysql的電腦,我們叫它資料庫伺服器.

2) 資料庫管理系統的作用

  用於建立、使用和維護資料庫,對資料庫進行統一的管理。

3)資料庫管理系統、資料庫 和表之間的關係

  MySQL中管理著很多資料庫,在實際開發環境中 一個數據庫一般對應了一個的應用,資料庫當中儲存著多張表,每一張表對應著不同的業務,表中儲存著對應業務的資料。

2.9 資料庫表

  • 資料庫中以表為組織單位儲存資料
  • 表類似我們Java中的類,每個欄位都有對應的資料型別

那麼我們使用熟悉的Java程式來與關係型資料對比,就會發現以下關係:

3. SQL(重點)

3.1 SQL的概念

1) 什麼是SQL ?

  結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的程式語言,是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關係資料庫系統。

2) SQL 的作用

  • 是所有關係型資料庫的統一查詢規範,不同的關係型資料庫都支援SQL
  • 所有的關係型資料庫都可以使用SQL
  • 不同資料庫之間的SQL 有一些區別 方言

3.2 SQL通用語法

1) SQL語句可以單行 或者 多行書寫,以分號 結尾 ; (Sqlyog中可以不用寫分號)
2) 可以使用空格和縮排來增加語句的可讀性。
3) MySql中使用SQL不區分大小寫,一般關鍵字大寫,資料庫名 表名列名 小寫。
4) 註釋方式

3.3 SQL的分類

注: 我們重點學習 DML 與 DQL!

3.4 DDL操作 資料庫

3.4.1 建立資料庫

3.4.2 檢視/選擇資料庫

3.4.3 修改資料庫

3.4.4 刪除資料庫

3.5 DDL 操作 資料表

3.5.1 MySQL常見的資料型別

1)常用的資料型別:

2) 詳細的資料型別(瞭解即可)

注意:MySQL中的 char型別與 varchar型別,都對應了 Java中的字串型別,區別在於:

  • char型別是固定長度的: 根據定義的字串長度分配足夠的空間。
  • varchar型別是可變長度的: 只使用字串長度所需的空間

比如:儲存字串 "abc"

適用場景:

  • char型別適合儲存 固定長度的字串,比如 密碼 ,性別一類
  • varchar型別適合儲存 在一定範圍內,有長度變化的字串

3.5.2 建立表

語法格式:

  • 需求1: 建立商品分類表
  • SQL實現
  • 需求2: 建立測試表
  • SQL實現
  • 需求3: 快速建立一個表結構相同的表(複製表結構)
  • 語法格式:
  • 程式碼示例:

3.5.3 查看錶

程式碼示例:

3.5.4 刪除表

程式碼示例:

3.5.5 修改表

1)修改表名

語法格式:

需求: 將category表 改為 category1

2) 修改表的字符集

語法格式:

需求: 將category表的字符集 修改為gbk

3)向表中新增列, 關鍵字 ADD

  • 語法格式:
  • 需求: 為分類表新增一個新的欄位為 分類描述 cdesc varchar(20)

4)修改表中列的 資料型別或長度 , 關鍵字 MODIFY

  • 語法格式:
  • 需求:對分類表的描述欄位進行修改,型別varchar(50)

5)修改列名稱 , 關鍵字 CHANGE

  • 語法格式
  • 需求: 對分類表中的 desc欄位進行更換, 更換為 description varchar(30)

6)刪除列 ,關鍵字 DROP

  • 語法格式
  • 需求: 刪除分類表中description這列

3.6 DML 操作表中資料

  • SQL中的DML 用於對錶中的資料進行增刪改操作

3.6.1 插入資料

  • 語法格式:

1)程式碼準備,建立一個學生表:

2)向學生表中新增資料,3種方式

  • 方式1: 插入全部欄位, 將所有欄位名都寫出來
  • 方式2: 插入全部欄位,不寫欄位名
  • 方式3:插入指定欄位的值

注意:
  1) 值與欄位必須要對應,個數相同&資料型別相同
  2)值的資料大小,必須在欄位指定的長度範圍內
  3)varchar char date型別的值必須使用單引號,或者雙引號 包裹。
  4)如果要插入空值,可以忽略不寫,或者插入null
  5) 如果插入指定欄位的值,必須要上寫列名
  

3.6.2 更改資料

語法格式1:不帶條件的修改

語法格式2:帶條件的修改

1)不帶條件修改,將所有的性別改為女(慎用!!)

2)帶條件的修改,將sid 為3的學生,性別改為男

3)一次修改多個列, 將sid為 2 的學員,年齡改為 20,地址改為 北京

3.6.3 刪除資料

語法格式1:刪除所有資料

語法格式2: 指定條件 刪除資料

1)刪除 sid 為 1 的資料

2) 刪除所有資料

3) 如果要刪除表中的所有資料,有兩種做法
  1. delete from 表名; 不推薦. 有多少條記錄 就執行多少次刪除操作. 效率低
  2. truncate table 表名: 推薦. 先刪除整張表, 然後再重新建立一張一模一樣的表. 效率高

3.7 DQL 查詢表中資料

3.7.1 準備資料

#建立員工表
表名 emp
表中欄位:
eid 員工id,int
ename 姓名,varchar
sex 性別,char
salary 薪資,double
hire_date 入職時間,date
dept_name 部門名稱,varchar
#建立員工表
CREATE TABLE emp(
eid INT,
ename VARCHAR(20),
sex CHAR(1),
salary DOUBLE,
hire_date DATE,
dept_name VARCHAR(20)
);
#新增資料
INSERT INTO emp VALUES(1,'孫悟空','男',7200,'2013-02-04','教學部');
INSERT INTO emp VALUES(2,'豬八戒','男',3600,'2010-12-02','教學部');
INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教學部');
INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市場部');
INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市場部');
INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市場部');
INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-10-07','財務部');
INSERT INTO emp VALUES(8,'黃蓉','女',3500,'2011-09-14','財務部');
INSERT INTO emp VALUES(9,'吳承恩','男',20000,'2000-03-14',NULL);
INSERT INTO emp VALUES(10,'孫悟飯','男', 10,'2020-03-14',財務部);
INSERT INTO emp VALUES(11,'兔八哥','女', 300,'2010-03-14',財務部);

3.7.2 簡單查詢

  • 查詢不會對資料庫中的資料進行修改.只是一種顯示資料的方式 SELECT
  • 語法格式
  • select 列名 from 表名
  • 需求1: 查詢emp中的 所有資料
  • SELECT * FROM emp; -- 使用 * 表示所有列
  • 需求2: 查詢emp表中的所有記錄,僅顯示id和name欄位
  • SELECT eid,ename FROM emp;
  • 需求3: 將所有的員工資訊查詢出來,並將列名改為中文
  • 別名查詢,使用關鍵字 as
  • # 使用 AS關鍵字,為列起別名
    SELECT
    eid AS '編號',
    ename AS '姓名' ,
    sex AS '性別',
    salary AS '薪資',
    hire_date '入職時間', -- AS 可以省略
    dept_name '部門名稱'
    FROM emp;
  • 需求4:查詢一共有幾個部門
  • 使用去重關鍵字 distinct
  • -- 使用distinct 關鍵字,去掉重複部門資訊
    SELECT DISTINCT dept_name FROM emp;
  • 需求5: 將所有員工的工資 +1000 元進行顯示
  • 運算查詢 (查詢結果參與運算)
  • SELECT ename , salary + 1000 FROM emp;

3.7.3 條件查詢

如果查詢語句中沒有設定條件,就會查詢所有的行資訊,在實際應用中,一定要指定查詢條件,對記錄進行過濾

語法格式

select 列名 from 表名 where 條件表示式
* 先取出表中的每條資料,滿足條件的資料就返回,不滿足的就過

運算子

1) 比較運算子

運算子 說明
> < <= >= = <> != 大於、小於、大於(小於)等於、不等於
BETWEEN ...AND...

顯示在某一區間的值
例如: 2000-10000之間: Between 2000 and 10000

IN(集合)

集合表示多個值,使用逗號分隔,例如: name in (悟空,八戒)
in中的每個資料都會作為一次條件,只要滿足條件就會顯示

LIKE '%張%' 模糊查詢
IS NULL 查詢某一列為NULL的值, 注: 不能寫 = NULL

2) 邏輯運算子

運算子 說明
And && 多個條件同時成立
Or || 多個條件任一成立
Not 不成立,取反。

需求1:

# 查詢員工姓名為黃蓉的員工資訊
# 查詢薪水價格為5000的員工資訊
# 查詢薪水價格不是5000的所有員工資訊
# 查詢薪水價格大於6000元的所有員工資訊
# 查詢薪水價格在5000到10000之間所有員工資訊
# 查詢薪水價格是3600或7200或者20000的所有員工資訊

程式碼實現

# 查詢員工姓名為黃蓉的員工資訊
SELECT * FROM emp WHERE ename = '黃蓉';
# 查詢薪水價格為5000的員工資訊
SELECT * FROM emp WHERE salary = 5000;
# 查詢薪水價格不是5000的所有員工資訊
SELECT * FROM emp WHERE salary != 5000;
SELECT * FROM emp WHERE salary <> 5000;
# 查詢薪水價格大於6000元的所有員工資訊
SELECT * FROM emp WH# 查詢薪水價格在5000到10000之間所有員工資訊
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;
# 查詢薪水價格是3600或7200或者20000的所有員工資訊
-- 方式1: or
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
-- 方式2: in() 匹配括號中指定的引數
SELECT * FROM emp WHERE salary IN(3600,7200,20000);ERE salary > 6000;

需求2:

# 查詢含有'精'字的所有員工資訊
# 查詢以'孫'開頭的所有員工資訊
# 查詢第二個字為'兔'的所有員工資訊
# 查詢沒有部門的員工資訊
# 查詢有部門的員工資訊

模糊查詢 萬用字元

萬用字元 說明
% 表示匹配任意多個字串
_ 表示匹配 一個字元
# 查詢含有'精'字的所有員工資訊
SELECT * FROM emp WHERE ename LIKE '%精%';
# 查詢以'孫'開頭的所有員工資訊
SELECT * FROM emp WHERE ename LIKE '孫%';
# 查詢第二個字為'兔'的所有員工資訊
SELECT * FROM emp WHERE ename LIKE '_兔%';
# 查詢沒有部門的員工資訊
SELECT * FROM emp WHERE dept_name IS NULL;
-- SELECT * FROM emp WHERE dept_name = NULL;
# 查詢有部門的員工資訊
SELECT * FROM emp WHERE dept_name IS NOT NULL;