MySQL基礎和SQL入門【臨時】

黙塵發表於2020-12-05

1. MySQL基礎和SQL入門

1.1 MySQL資料庫的安裝

1.1.1 安裝

幾個頁面的詳細資訊:

image-20201204114502130

image-20201204114548103

image-20201204114611197

image-20201204114806259

1.1.2 配置環境變數

1.1.3 解除安裝:解除安裝後,並不會刪除配置和資料檔案,需要自行刪除。

1.1.4 啟動與關閉

  1. 管理->服務->還找到MySQL啟動或停止

  2. 命令列【管理員身份】

    net stop mysql服務名

    net startmysql服務名

1.1.5登入

  1. 啟動

    mysql -uroot -p

    mysql -hIP地址 -u使用者名稱 -p密碼

  2. 退出命令

    exit

    quit

1.1.6 目錄結構

  1. 安裝目錄

    預設:C:\Program Files\MySQL

  2. 配置資訊 和 資料庫資料

    預設:C:\ProgramData\MySQL

    image-20201204123325347

    Data:中存放資料庫的資料

    my.ini 是mysql的配置檔案

  3. 安裝器和下載的連線驅動

    預設:C:\Program Files (x86)\MySQL

1.2 資料庫管理系統

1.2.1 簡介

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

​ 資料庫管理系統(DataBase Management System,DBMS):指一種操作和管理維護資料庫的大 型軟體。

​ MySQL就是一個 資料庫管理系統軟體, 安裝了Mysql的電腦,我們叫它資料庫伺服器.

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

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

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

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

1.2.2 SQL

1. SQL簡介

**1. 什麼是SQL **

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

2. SQL 的作用

​ 是所有關係型資料庫的統一查詢規範。所有的關係型資料庫都可以使用SQL。但不同資料庫之間的SQL有一些區別。

2. 通用語法

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

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

  3. MySql中使用SQL不區分大小寫,一般關鍵字大寫,資料庫名 表名列名 小寫。

  4. 註釋方式

    • – xxxxx 單行註釋,注意空格不能丟。
    • /* xxxxxxx */ 多行註釋
    • #xxxxxxx 注意這是MySQL特有的,也是單行註釋

3. SQL的分類

分類說明
資料定義語言(DDL)簡稱DDL(Data Definition Language),用來定義資料庫物件:資料庫,表,列 等。
資料操作語言(DML)簡稱DML(Data Manipulation Language),用來對資料庫中表的記錄進行更新。
資料查詢語言(DQL)簡稱DQL(Data Query Language),用來查詢資料庫中表的記錄。
資料控制語言(DCL)簡稱DCL(Data Control Language),用來定義資料庫的訪問許可權和安全級別, 及建立使用者。(瞭解

4. DDL操作

1. CRUD

對資料庫的操作包括:

​ C create 建立

​ R retrieve 查詢

​ U update 修改

​ D delete 刪除

2. MySQL自帶資料庫

資料庫名介紹
information_schema儲存其他資料庫的資訊
mysqlMySQL核心資料庫,儲存使用者資訊和許可權
performance_schema儲存效能相關資料,監控MySQL的效能
sys記錄DBA所需要的的一些資訊,方便DBA瞭解資料庫的執行狀況。

3. 對資料庫的DDL操作

-- 建立資料庫,預設字符集為 utf8mb4(MySQL8) latin1(MySQL5.7)
create database 資料庫名 [character set utf8];  
use 資料庫;  -- 切換資料庫
select database();  -- 查詢當前資料庫
show databases;  -- 檢視mysql中所有資料庫
show create database 資料庫名;  -- 檢視資料庫定義資訊,好像沒啥子用

alter database 資料庫名 character set utf8;  -- 將資料庫編碼修改為utf8

drop database 資料庫名;  -- 刪除資料庫

4. 對資料表的DDL操作

-- 新增表
create table 表名(
	欄位1 型別,
    欄位1 型別,
    ...
); 

show tables;  -- 檢視當前資料庫 所有表的 表名
desc 表名;  -- 檢視錶的 資料結構

drop table [if exists] 表名;  -- 刪除表

rename table 舊錶名 to 新表名;  -- 修改表名
alter table 表名 character set utf8;  -- 修改表的字符集
alter table 表名 add 欄位名 型別;  -- 新增欄位
alter table 表名 modify 欄位名 新型別;  -- 修改表某欄位的型別
alter table 表名 change 舊列名 新列名 新列型別;  -- 修改 列名 及 型別
alter table 表名 drop 列名;  -- 刪除表中一列

資料型別:

image-20201204161548394

儲存資料的長度超過char/carchar的長度會怎樣?

image-20201204163657277

​ 都一樣會報錯。

5. DML操作

-- 插入資料
insert into 表名[(欄位1,欄位1,欄位1)] value (值1,值1,值1);  -- 欄位與值一一對應,當插入全部欄位時[]中的內容可省
-- 注意:varchar char date型別的值必須使用單引號,或者雙引號 包裹。

update 表名 set 列名=值[, 列名2=值 ...] [where 條件表示式];  -- 修改某列資料的值,當where省略時,修改該列全部資料

delete from 表名 [where 條件表示式];  -- 刪除某行資料,當where省略時,逐條 刪除全部資料
truncate table 表名;  -- 刪除表的全部資料,相當於刪表後,重建。效率高。

6. DQL操作

1. 語法

select 列名,列名 from 表名;  -- 查詢所有列時,可以使用 * 表示
select 列名 AS 別名, 列名 別名 from 表名;  -- 起別名
select distinct 列名 from 表名;  -- 去重
select 列名+10 新列名 from 表名;  -- 可以對查詢的結果進行運算或呼叫函式 

select 列名,列名 from 表名 where 條件表示式;  -- 遍歷一遍所有資料,將符合要求的返回

select 列名 from 表名 order by 列名 [ASC / DESC];  -- 按某列進行排序 ASC升序【預設】 DESC 降序
select 列名 from 表名 order by 列表 DESC , 列2 DESC; -- 先按第一個,再按第二個,注意逗號

select 聚合函式(欄位名) from 表名;

select 分組欄位/聚合函式 from 表名 group by 分組欄位 [having 條件] -- 分組

select * from 表名 limit offset , length;  -- 限制行數  ** MySQL方言 **

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

2. 條件表示式

比較運算子:

運算子說明
> 、 < 、 >= 、 <= 、= 、<> 、 !=注意:等號就一個;<>等價於 !=
A between X and YA的值介於X和Y之間
in(集合)取值在集合給定的值中,也可以直接給值,如 in(1,2,3)
like ‘%ABC_’字元創模糊匹配 % 任意多個任意字元 _代表一個任意字元
is null is not null判斷是否為null,不能用 = null

邏輯運算子

運算子說明
and &&與運算
or ||或運算
not取反

3. 聚合函式

聚合函式作用
count(欄位) count(*)統計行數,null值不計
sum(欄位)指定列的數值和
max(欄位)指定列的最大值
min(欄位)指定列的最小值
avg(欄位)指定列的平均值

4. 分組

SELECT
	dept_name,
	AVG(salary)
FROM emp WHERE dept_name IS NOT NULL 
GROUP BY dept_name HAVING AVG(salary) > 6000 ;

分組的目的就是將資料分成幾類,然後將某一類資料當成整體,獲取其資訊。

所以select之後只能跟 分組條件列 或者 聚合函式,聚合函式的作用就是獲取一組資料的整體資訊。如果跟其他的欄位會返回每組的第一函式資料,沒有實際意義。

如果要對分組後的資料進行篩選,要是用having關鍵字進行限制。having類似與where,但having之後可以跟聚合函式。

5. limit關鍵字

SELECT * FROM emp LIMIT 0 , 5;
  • offset 預設為0;

  • 注意了 limit 關鍵字是MySQL的方言。 用途是:實現分頁。

  • 起始索引 = (頁面-1)* 每頁行數