前言
為了鞏固所學(xué)的知識(shí),作者嘗試著開始發(fā)布一些學(xué)習(xí)筆記類的博客,方便日后回顧。當(dāng)然,如果能幫到一些萌新進(jìn)行新技術(shù)的學(xué)習(xí)那也是極好的。作者菜菜一枚,文章中如果有記錄錯(cuò)誤,歡迎讀者朋友們批評(píng)指正。
(博客的參考源碼可以在我主頁的資源里找到,如果在學(xué)習(xí)的過程中有什么疑問歡迎大家在評(píng)論區(qū)向我提出)
發(fā)現(xiàn)寶藏
前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家?!緦毑厝肟凇?。
一、數(shù)據(jù)庫相關(guān)概念
1. 什么是數(shù)據(jù)庫
數(shù)據(jù)庫是指一組相互關(guān)聯(lián)的數(shù)據(jù)集合,它們以一定的方式組織、存儲(chǔ)和管理,以方便數(shù)據(jù)的查找、訪問和管理。在計(jì)算機(jī)科學(xué)中,數(shù)據(jù)庫是一種用于存儲(chǔ)和管理數(shù)據(jù)的軟件系統(tǒng),它支持?jǐn)?shù)據(jù)的創(chuàng)建、讀取、更新和刪除操作
2. 數(shù)據(jù)庫的種類
- 常見的數(shù)據(jù)庫種類包括關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫
- 關(guān)系型數(shù)據(jù)庫是指使用關(guān)系模型來組織和管理數(shù)據(jù)的數(shù)據(jù)庫。關(guān)系模型是一種基于表的數(shù)據(jù)模型,其中每個(gè)表代表一種實(shí)體類型,而每個(gè)行代表一個(gè)實(shí)體實(shí)例。關(guān)系型數(shù)據(jù)庫使用結(jié)構(gòu)化查詢語言(SQL)來管理和操作數(shù)據(jù)。常見的關(guān)系型數(shù)據(jù)庫包括MySQL、Oracle 和 SQL Server 等
- 非關(guān)系型數(shù)據(jù)庫是指不使用關(guān)系模型來組織和管理數(shù)據(jù)的數(shù)據(jù)庫。它們使用不同的數(shù)據(jù)模型和查詢語言來管理和操作數(shù)據(jù)。非關(guān)系型數(shù)據(jù)庫通常用于處理大量非結(jié)構(gòu)化數(shù)據(jù),例如文本、圖像和音頻等。常見的非關(guān)系型數(shù)據(jù)庫包括MongoDB、Redis和Cassandra等
3. Mysql 簡介
1. 認(rèn)識(shí)Mysql
MySQL是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),它是目前最流行和廣泛使用的數(shù)據(jù)庫之一。 MySQL以其高性能、可靠性和易用性而聞名,并被廣泛應(yīng)用于各種規(guī)模的應(yīng)用程序和網(wǎng)站
2. MySQL的特點(diǎn)和功能
- 開源性:MySQL是開源軟件,可以免費(fèi)獲得并進(jìn)行修改和定制。這使得它非常適合個(gè)人開發(fā)者和小型企業(yè)
- 跨平臺(tái):MySQL可在多個(gè)操作系統(tǒng)上運(yùn)行,包括Windows、Linux、macOS等,提供了廣泛的平臺(tái)支持
- 高性能:MySQL通過優(yōu)化的查詢處理、索引機(jī)制和緩存策略等技術(shù),提供了出色的性能和響應(yīng)速度。它能夠處理大規(guī)模數(shù)據(jù)集和高并發(fā)訪問
- 可擴(kuò)展性:MySQL支持水平和垂直擴(kuò)展,可以根據(jù)需求輕松地?cái)U(kuò)展數(shù)據(jù)庫的容量和性能
- 完整的功能集:MySQL支持標(biāo)準(zhǔn)的SQL查詢語言,具有豐富的特性和功能,包括事務(wù)支持、觸發(fā)器、存儲(chǔ)過程、復(fù)制和高可用性選項(xiàng)等
- 數(shù)據(jù)安全:MySQL提供了強(qiáng)大的安全機(jī)制,包括用戶認(rèn)證、權(quán)限管理、數(shù)據(jù)加密和安全連接等,以保護(hù)數(shù)據(jù)的機(jī)密性和完整性
- 大型社區(qū)支持:MySQL擁有龐大的開源社區(qū),提供了豐富的文檔、教程和支持資源。開發(fā)者可以從社區(qū)中獲取幫助、分享經(jīng)驗(yàn)和解決問題
總體而言,MySQL是一種可靠、高性能且易于使用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。無論是用于小型網(wǎng)站、企業(yè)應(yīng)用還是大規(guī)模數(shù)據(jù)處理,MySQL都提供了強(qiáng)大的功能和靈活的解決方案。它是許多開發(fā)人員和組織構(gòu)建可靠數(shù)據(jù)庫應(yīng)用程序的首選工具之一
4. SQL簡介
SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)是一種用于管理關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)化查詢語言。 SQL由美國國家標(biāo)準(zhǔn)學(xué)會(huì)(ANSI)和國際標(biāo)準(zhǔn)化組織(ISO)制定并標(biāo)準(zhǔn)化,它定義了一組操作關(guān)系型數(shù)據(jù)庫的語法和語義規(guī)則。SQL被廣泛應(yīng)用于各種類型的應(yīng)用程序和網(wǎng)站,并成為了處理和管理數(shù)據(jù)的標(biāo)準(zhǔn)方式
5. 數(shù)據(jù)庫中常見的數(shù)據(jù)類型
- 在DDL(數(shù)據(jù)定義語言)中,您可以使用不同的數(shù)據(jù)類型來定義表中的列。不同的數(shù)據(jù)庫管理系統(tǒng)(DBMS)支持的數(shù)據(jù)類型可能會(huì)有所不同,以下是一些常見的DDL表操作數(shù)據(jù)類型示例:
數(shù)據(jù)類型 | 示例 |
---|---|
整數(shù)類型 | INT(整數(shù))、BIGINT(大整數(shù))、SMALLINT(小整數(shù))、TINYINT(微小整數(shù)) |
浮點(diǎn)數(shù)類型 | FLOAT(浮點(diǎn)數(shù))、DOUBLE(雙精度浮點(diǎn)數(shù))、DECIMAL(固定精度的十進(jìn)制數(shù)) |
字符串類型 | CHAR(n)(固定長度的字符)、VARCHAR(n)(可變長度的字符)、TEXT(長文本) |
日期和時(shí)間類型 | DATE(日期)、TIME(時(shí)間)、DATETIME(日期和時(shí)間)、TIMESTAMP(時(shí)間戳) |
布爾類型 | BOOLEAN(布爾值) |
二進(jìn)制類型 | BLOB(二進(jìn)制大對(duì)象)、BINARY(二進(jìn)制數(shù)據(jù))、VARBINARY(可變長度的二進(jìn)制數(shù)據(jù)) |
其他特殊類型 | ENUM(枚舉類型,限定為預(yù)定義的值列表)、SET(集合類型,限定為預(yù)定義的值集合) |
這些是一些常見的數(shù)據(jù)類型示例,實(shí)際上不同的DBMS可能還支持其他的數(shù)據(jù)類型或擁有特定的數(shù)據(jù)類型命名約定。在創(chuàng)建表時(shí),您可以根據(jù)需要選擇適當(dāng)?shù)臄?shù)據(jù)類型來定義表中的列。確保根據(jù)數(shù)據(jù)的特性和需求選擇正確的數(shù)據(jù)類型,以確保數(shù)據(jù)的準(zhǔn)確性和一致性。
二、SQL基礎(chǔ)
1. SQL通用語法
- SQL語句可以單行或多行書寫,以分號(hào)結(jié)尾
- SQL語句可以使用空格/縮進(jìn)來增強(qiáng)語句的可讀性
- MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫,關(guān)鍵字建議使用大寫
- 注釋
---- 單行注釋 : - - 注釋內(nèi)容 或 # 注釋內(nèi)容(MySQL特有)
---- 多行注釋 : /注釋內(nèi)容/
2. SQL的主要分類
分類 | 全稱 | 說明 |
---|---|---|
DDL | Data Definition Language | 數(shù)據(jù)定義語言用來定義數(shù)據(jù)庫對(duì)象(數(shù)據(jù)庫,表,字段) |
DML | Data Manipulation Language | 數(shù)據(jù)操作語言,用來對(duì)數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行增刪改 |
DOL | Data Querv Language | 數(shù)據(jù)查詢語言,用來查詢數(shù)據(jù)庫中表的記錄 |
DCL | Data ControlLanguage | 數(shù)據(jù)控制語言,用來創(chuàng)建數(shù)據(jù)庫用戶、控制數(shù)據(jù)庫的訪問權(quán)限 |
3. DDL(數(shù)據(jù)庫,表,索引,視圖)
在關(guān)系型數(shù)據(jù)庫中,DDL(數(shù)據(jù)定義語言)扮演著至關(guān)重要的角色。DDL是一組用于定義數(shù)據(jù)庫結(jié)構(gòu)和模式的SQL命令,它使我們能夠創(chuàng)建、修改和刪除數(shù)據(jù)庫對(duì)象,如表、視圖和索引
1. DDL – 數(shù)據(jù)庫操作
- 創(chuàng)建數(shù)據(jù)庫(CRFATE DATABASE [ IF NOT EXISTS ] 數(shù)據(jù)庫名 [DEFAULT CHARSET 字符集] [COLLATE 排序規(guī)則]):例如,示例命令語句創(chuàng)建了一個(gè)名為"my_database"的數(shù)據(jù)庫。
CREATE DATABASE my_database;
- 刪除數(shù)據(jù)庫(DROP DATABASE),例如,示例命令語句刪除了名為"my_database"的數(shù)據(jù)庫。
DROP DATABASE my_database;
-
查詢所有數(shù)據(jù)庫(SHOW DATABASES)
-
查詢當(dāng)前數(shù)據(jù)庫 (SELECT DATABASE)
-
使用數(shù)據(jù)庫 (USE 數(shù)據(jù)庫名)
2. DDL – 表操作
- 創(chuàng)建表(CREATE TABLE):創(chuàng)建表是數(shù)據(jù)庫設(shè)計(jì)的第一步。使用CREATE TABLE語句可以定義表的名稱、列名和數(shù)據(jù)類型。例如,下面的語句創(chuàng)建了一個(gè)名為"users"的表,包含id、name和age三個(gè)列:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
- 查詢表
- 查詢當(dāng)前數(shù)據(jù)庫所有表
SHOW TABLES
- 查詢表結(jié)構(gòu)
DESC 表名
- 查詢指定表的建襲語句
SHOW CREATE TABLE 表名
- 修改表結(jié)構(gòu)(ALTER TABLE):在數(shù)據(jù)庫使用過程中,可能需要修改表的結(jié)構(gòu),例如添加新列、更改列的數(shù)據(jù)類型或刪除列。ALTER TABLE語句用于這些操作。下面是一些示例
- 添加新列:
ALTER TABLE users
ADD email VARCHAR(100);
- 修改列的數(shù)據(jù)類型
ALTER TABLE Customers
ADD COLUMN phone_number VARCHAR(20);
- 刪除列
ALTER TABLE users
DROP COLUMN email;
- 刪除表(DROP TABLE):如果不再需要某個(gè)表,可以使用DROP TABLE語句將其從數(shù)據(jù)庫中刪除。請(qǐng)謹(jǐn)慎使用該命令,因?yàn)閯h除表將同時(shí)刪除表中的所有數(shù)據(jù)。示例如下
DROP TABLE users;
3. 創(chuàng)建索引(CREATE INDEX)
索引可以提高對(duì)表中數(shù)據(jù)的檢索效率。 使用 CREATE INDEX 語句可以在表的列上創(chuàng)建索引。例如,以下命令在"users"表的"name"列上創(chuàng)建了一個(gè)索引
CREATE INDEX idx_users_name ON users (name);
4. 創(chuàng)建視圖(CREATE VIEW)
視圖是基于表的虛擬表,它是通過SELECT語句定義的。 使用 CREATE VIEW 語句可以創(chuàng)建視圖。例如,以下命令創(chuàng)建了一個(gè)名為"active_users"的視圖,該視圖包含所有"users"表中狀態(tài)為"active"的行
CREATE VIEW active_users AS
SELECT * FROM users WHERE status = 'active';
4. DML(數(shù)據(jù)的插入,更新,刪除)
1. 認(rèn)識(shí)DML
在關(guān)系型數(shù)據(jù)庫中,DML(數(shù)據(jù)操縱語言)是一組用于操作數(shù)據(jù)庫中數(shù)據(jù)的SQL命令。DML允許我們對(duì)表中的數(shù)據(jù)進(jìn)行插入、更新、刪除和查詢操作,是SQL中最常用的部分之一
2. 插入數(shù)據(jù)(INSERT)
插入數(shù)據(jù)是向表中添加新行的操作。使用INSERT語句可以將數(shù)據(jù)插入到表中的特定列。 例如,下面的語句將一條新記錄插入到名為"users"的表中
INSERT INTO users (name, age, email) VALUES ('John Doe', 25, 'johndoe@example.com');
- 給指定字段添加數(shù)據(jù)
- 語法格式 :INSERT INTO 表名(字段名1, 字段名2,…) VALUES (值1,值2,…);
- 給全部字段添加數(shù)據(jù)
語法格式:INSERT INTO 表名 VALUES (值1, 值2, …);
- 批量添加數(shù)據(jù)
語法格式:
- INSERTINTO 表名(字段名1, 字段名2, …) VALUES(值1,值2,…), (值1,值2,…),(值1, 值2,…);
- INSERTINTO 表名 VALUES (值1, 值2,…),(值1, 值2, …),(值1,值2,…) ;
- 注意事項(xiàng)
- 插入數(shù)據(jù)時(shí),指定的字段順序需要與值的順序是一一對(duì)應(yīng)的
- 字符串和日期型數(shù)據(jù)應(yīng)該包含在引號(hào)中
- 插入的數(shù)據(jù)大小,應(yīng)該在字段的規(guī)定范圍內(nèi)
3. 更新數(shù)據(jù)(UPDATE)
更新數(shù)據(jù)是修改表中現(xiàn)有行的操作。使用UPDATE語句可以更改表中的數(shù)據(jù)。 例如,下面的語句將名為"John Doe"的用戶年齡更新為30
UPDATE users SET age = 30 WHERE name = 'John Doe';
- 一般格式
- 語法格式:UPDATE 表名 SET 字段名1 = 值1,字段名2= 值2,…[ WHERE 條件];
- 注意事項(xiàng)
修改語句的條件可以有,也可以沒有,如果沒有條件,則會(huì)修改整張表的所有數(shù)據(jù)
4. 刪除數(shù)據(jù)(DELETE)
刪除數(shù)據(jù)是從表中刪除行的操作。使用DELETE語句可以刪除滿足特定條件的行。 例如,下面的語句將刪除名為"John Doe"的用戶
DELETE FROM users WHERE name = 'John Doe';
- 一般格式
- 語法格式:DELETE FROM 表名[WHERE 條件]
- 注意事項(xiàng)
- DELETE 語句的條件可以有,也可以沒有,如果沒有條件,則會(huì)刪除整張表的所有數(shù)據(jù)
- DELETE 語句不能刪除某一個(gè)字段的值(可以使用UPDATE)。
5. DQL(數(shù)據(jù)查詢)
1. 認(rèn)識(shí)DQL
在關(guān)系型數(shù)據(jù)庫中,DQL(數(shù)據(jù)查詢語言)是一組用于從數(shù)據(jù)庫中檢索數(shù)據(jù)的SQL命令。DQL允許我們以各種條件和方式查詢表中的數(shù)據(jù),獲取所需的結(jié)果
2. 基本查詢(SELECT)
- 查詢多個(gè)字段
語法格式
- SELECT 字段1,字段2, 字段3 … FROM 表名)
- SELECT*FROM 表名:
SELECT * FROM users;
基本查詢是最常見的DQL操作,用于從表中檢索數(shù)據(jù)。 使用SELECT語句可以選擇列和行,從而獲取所需的數(shù)據(jù)。例如,上面的語句將檢索名為"users"的所有行和列
- 設(shè)置別名
語法格式:SELECT 字段1 [AS 別名1],字段2 [AS 別名2] … FROM 表名
- 去除重復(fù)記錄
語法格式:SELECT DISTINCT 字段列表 FROM 表名
3. 條件查詢(WHERE)
條件查詢允許我們根據(jù)指定的條件檢索符合條件的數(shù)據(jù)。 使用WHERE子句可以過濾查詢結(jié)果。例如,下面的語句將檢索名為"John Doe"的用戶信息
SELECT * FROM users WHERE name = 'John Doe';
- 一般格式
語法格式:SELECT 字段列表 FROM 表名 WHERE 條件列表
- 條件列表
比較運(yùn)算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN … AND … | 在某個(gè)范圍之內(nèi)(含最小、最大值) |
IN(…) | 在in之后的列表中的值,多選一 |
LIKE 占位符 | 模糊匹配(_匹配單個(gè)字符,%匹配任意個(gè)字符) |
IS NULL | 是NULL |
邏輯運(yùn)算符 | 功能 |
---|---|
AND 或&& | 并且(多個(gè)條件同時(shí)成立) |
OR或 | 或者(多個(gè)條件任意一個(gè)成立) |
NOT 或! | 非,不是 |
4. 排序查詢(ORDER BY)
排序查詢允許我們按照指定的列對(duì)查詢結(jié)果進(jìn)行排序。使用ORDER BY子句可以按升序(ASC)或降序(DESC)對(duì)查詢結(jié)果進(jìn)行排序。 例如,下面的語句將按年齡對(duì)用戶進(jìn)行降序排序
SELECT * FROM users ORDER BY age DESC;
- 一般格式
- 語法格式:SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2
- 排序方式
- ASC:升序 (默認(rèn)值)
- DESC:降序
5. 聚合查詢(GROUP BY)
聚合查詢允許我們根據(jù)指定的列對(duì)數(shù)據(jù)進(jìn)行分組,并對(duì)每個(gè)組應(yīng)用聚合函數(shù)(如SUM、COUNT、AVG等),使用GROUP BY子句可以執(zhí)行聚合查詢。 例如,下面的語句將計(jì)算每個(gè)城市的用戶數(shù)量
SELECT city, COUNT(*) FROM users GROUP BY city;
- 一般格式
- 語法格式:SELECT 聚合函數(shù)(字段列表) FROM 表名
- 常見聚合函數(shù)
函數(shù) | 功能 |
---|---|
count | 統(tǒng)計(jì)數(shù)量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
- 注意
null值不參與所有聚合函數(shù)運(yùn)算
6. 分組查詢
數(shù)據(jù)庫分組查詢是一種對(duì)數(shù)據(jù)庫表進(jìn)行聚合計(jì)算和分組的查詢方式。 它可以根據(jù)指定的字段進(jìn)行分組,并對(duì)每個(gè)分組進(jìn)行聚合計(jì)算,例如求和、平均值、最大值、最小值等 。常見的分組查詢語句是SQL語句中的GROUP BY子句。 下面是一個(gè)示例,它查詢一個(gè)訂單表中每個(gè)客戶的總訂單金額:
SELECT customer_id, SUM(total_amount)
FROM orders
GROUP BY customer_id;
在上面的查詢中,GROUP BY子句指定了按照customer_id字段進(jìn)行分組,SUM函數(shù)對(duì)每個(gè)分組內(nèi)的total_amount字段進(jìn)行求和計(jì)算。查詢結(jié)果將返回每個(gè)客戶的customer_id和對(duì)應(yīng)的總訂單金額
- 一般格式
- 語法格式:SELECT 字段列表 FROM 表名[WHERE 條件] GROUP BY 分組字段名[HAVING 分組后過濾條件];
- where與having區(qū)別
- 執(zhí)行時(shí)機(jī)不同: where是分組之前進(jìn)行過濾,不滿足where條件,不參與分組,而having是分組之后對(duì)結(jié)果進(jìn)行過濾。
- 判斷條件不同: where不能對(duì)聚合函數(shù)進(jìn)行判斷,而having可以
7. 分頁查詢
分頁查詢是一種對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行分段查詢的方式,通常用于顯示大量數(shù)據(jù)的情況下,將數(shù)據(jù)分頁顯示,提高瀏覽效率。分頁查詢可以通過LIMIT和OFFSET關(guān)鍵字來實(shí)現(xiàn)。
- 一般格式
- 語法格式:SELECT 字段列表 FROM 表名 LIMIT 起始索引查詢記錄數(shù);
假設(shè)我們有一個(gè)員工表,其中包含員工的姓名和工資信息,我們想要查詢前10個(gè)工資最高的員工,并按照工資從高到低排序,可以使用以下SQL語句:
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10;
在上面的查詢中,我們使用ORDER BY子句按照工資從高到低進(jìn)行排序,并使用LIMIT關(guān)鍵字限制返回的記錄數(shù)為10條。這將返回工資最高的前10個(gè)員工的姓名和工資信息。
如果我們想要從第11個(gè)記錄開始查詢下一頁數(shù)據(jù),可以使用OFFSET關(guān)鍵字,例如:
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 10 OFFSET 10;
這個(gè)查詢將返回第11到第20個(gè)工資最高的員工的姓名和工資信息
- 注意
- 起始索引從0開始,起始索引= (查詢頁碼 -1) * 每頁顯示記錄數(shù)
- 分頁查詢是數(shù)據(jù)庫的方言,不同的數(shù)據(jù)庫有不同的實(shí)現(xiàn),MysQL中是LIMIT
- 如果查詢的是第一頁數(shù)據(jù),起始索引可以省略,直接簡寫為 limit 10
- 在使用OFFSET時(shí)應(yīng)當(dāng)考慮到數(shù)據(jù)的變化,因?yàn)槿绻趦纱畏猪摬樵冎g有新的數(shù)據(jù)被添加或刪除,可能會(huì)導(dǎo)致分頁結(jié)果出現(xiàn)重疊或遺漏的情況
8. 連接查詢(JOIN)
連接查詢允許我們從多個(gè)表中檢索相關(guān)數(shù)據(jù)。使用JOIN子句可以根據(jù)指定的條件將多個(gè)表連接起來。 例如,下面的語句將從"users"表和"orders"表中檢索有關(guān)用戶和訂單的信息
SELECT users.name, orders.order_id FROM users JOIN orders ON users.id = orders.user_id;
9. DQL執(zhí)行順序
6. DCL(數(shù)據(jù)訪問權(quán)限控制)
1. 認(rèn)識(shí)DCL
在關(guān)系型數(shù)據(jù)庫中,DCL(數(shù)據(jù)控制語言)是一組用于管理和控制數(shù)據(jù)庫中的數(shù)據(jù)訪問權(quán)限的SQL命令。 通過使用DCL命令,我們可以定義用戶權(quán)限、授予或撤銷權(quán)限,并管理數(shù)據(jù)庫對(duì)象的安全性
2. 用戶權(quán)限管理
- 基礎(chǔ)命令
用戶權(quán)限管理是DCL的重要部分,它涉及定義和管理用戶對(duì)數(shù)據(jù)庫的訪問權(quán)限。
以下是一些常用的DCL命令用于用戶權(quán)限管理
命令 | 說明 |
---|---|
CREATE USER | 創(chuàng)建新用戶,并分配用戶名和密碼 |
ALTER USER | 修改用戶的屬性,例如修改密碼或鎖定用戶賬戶 |
DROP USER | 刪除用戶,同時(shí)撤銷其對(duì)數(shù)據(jù)庫的訪問權(quán)限 |
GRANT | 授予用戶特定的權(quán)限,例如SELECT、INSERT、UPDATE等 |
REVOKE | 撤銷用戶的權(quán)限,限制其對(duì)數(shù)據(jù)庫對(duì)象的訪問 |
- 示例
查詢用戶
USE mysql;
SELECT * FROM user;
創(chuàng)建用戶
CREATE USER '用戶名'@'主機(jī)名' IDENTIFIED BY '密碼'
修改用戶密碼
ALTER USER '用戶名'@'主機(jī)名' IDENTIFIED WITH mysql_native_password BY '新密碼';
刪除用戶
DROP USER '用戶名'@'主機(jī)名';
- 注意
- 主機(jī)名可以使用 % 通配
- 這類SQL開發(fā)人員操作的比較少,主要是DBA ( Database Administrator 數(shù)據(jù)庫管理員) 使用
3. 對(duì)象權(quán)限管理
- 基礎(chǔ)權(quán)限
對(duì)象權(quán)限管理涉及定義和管理用戶對(duì)數(shù)據(jù)庫對(duì)象(如表、視圖、存儲(chǔ)過程等)的訪問權(quán)限。 以下是一些常用的DCL命令用于對(duì)象權(quán)限管理
權(quán)限 | 說明 |
---|---|
GRANT | 授予用戶對(duì)特定對(duì)象的權(quán)限,例如SELECT、INSERT、UPDATE等 |
REVOKE | 撤銷用戶對(duì)特定對(duì)象的權(quán)限,限制其對(duì)對(duì)象的訪問 |
WITH GRANT OPTION | 允許被授權(quán)的用戶將其權(quán)限授予其他用戶 |
ALL,ALL PRIVILEGES | 所有權(quán)限 |
SELECT | 查詢數(shù)據(jù) |
INSERT | 插入數(shù)據(jù) |
UPDATE | 修改數(shù)據(jù) |
DELETE | 刪除數(shù)據(jù) |
ALTER | 修改表 |
DROP | 刪除數(shù)據(jù)庫/表/視圖 |
CREATE | 創(chuàng)建數(shù)據(jù)庫/表 |
- 示例
- 查權(quán)限
SHOW GRANTS FOR '用戶名'@'主機(jī)名';
- 授予權(quán)限
GRANT 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 TO '用戶名'@'主機(jī)名'
- 撤銷權(quán)限
REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 FROM '用戶名'@'主機(jī)名';
- 注意
- 多個(gè)權(quán)限之間,使用逗號(hào)分隔
- 授權(quán)時(shí),數(shù)據(jù)庫名和表名可必使用 * 進(jìn)行通配,代表所有
4. 事務(wù)管理
事務(wù)管理是DCL的一部分,它涉及控制和管理數(shù)據(jù)庫中的事務(wù)。 以下是一些常用的DCL命令用于事務(wù)管理
命令 | 說明 |
---|---|
COMMIT | 提交事務(wù),將已執(zhí)行的操作永久保存到數(shù)據(jù)庫中 |
ROLLBACK | 回滾事務(wù),撤銷已執(zhí)行的操作,恢復(fù)到事務(wù)開始之前的狀態(tài) |
SAVEPOINT | 設(shè)置保存點(diǎn),允許在事務(wù)中創(chuàng)建一個(gè)標(biāo)記,以便在需要時(shí)回滾到該標(biāo)記所在的狀態(tài) |
5. 數(shù)據(jù)庫對(duì)象的安全性
DCL也涉及管理和維護(hù)數(shù)據(jù)庫對(duì)象的安全性。 以下是一些常用的DCL命令用于數(shù)據(jù)庫對(duì)象的安全性管理
命令 | 說明 |
---|---|
CREATE SCHEMA | 創(chuàng)建模式,用于組織和管理數(shù)據(jù)庫對(duì)象 |
ALTER SCHEMA | 修改模式的屬性,例如更改模式的所有者 |
DROP SCHEMA | 刪除模式,同時(shí)刪除其中的所有對(duì)象 |
三、SQL入門案例
1. DDL入門案例
- 案例需求:設(shè)計(jì)一張員工信息表,要求如下:
- 編號(hào)(純數(shù)字)
- 員工工號(hào)(字符串類型,長度不超過10位)
- 員工姓名(字符串類型,長度不超過10位)
- 性別(男/女,存儲(chǔ)一個(gè)漢字)
- 年齡(正常人年齡,不可能存儲(chǔ)負(fù)數(shù))
- 身份證號(hào)(二代身份證號(hào)均為18位,身份證中有X這樣的字符)
- 入職時(shí)間 (取值年月日即可)
- SQL語句
CREATE TABLE employee (
id INT PRIMARY KEY COMMENT '編號(hào)',
employee_number VARCHAR(10) COMMENT '員工工號(hào)',
name VARCHAR(10) COMMENT '員工姓名',
gender CHAR(1) COMMENT '男/女',
age TINYINT COMMENT '正常人年齡,不可能存儲(chǔ)負(fù)數(shù)',
id_card CHAR(18) COMMENT '二代身份證號(hào)均為18位,身份證中有X這樣的字符',
hire_date DATE COMMENT '取值年月日即可'
) COMMENT '員工信息表';
- 效果及解析
在上面的表中,每個(gè)字段的含義如下:
- id: 員工信息的唯一編號(hào),采用純數(shù)字類型,使用INT類型,作為表的主鍵,中文別名為“編號(hào)”。
- employee_number: 員工工號(hào),采用字符串類型,長度不超過10位,使用VARCHAR(10)類型,中文別名為“員工工號(hào)”。
- name: 員工姓名,采用字符串類型,長度不超過10位,使用VARCHAR(10)類型,中文別名為“員工姓名”。
- gender: 員工性別,使用一個(gè)漢字表示,采用CHAR(1)類型,中文別名為“性別”。
- age: 員工年齡,采用TINYINT類型,適合存儲(chǔ)正常人的年齡,不可能存儲(chǔ)負(fù)數(shù),中文別名為“年齡”。
- id_card: 員工身份證號(hào),采用CHAR(18)類型,適合存儲(chǔ)18位身份證號(hào)碼,包括可能出現(xiàn)的字符X,中文別名為“身份證號(hào)”。
- hire_date: 員工入職時(shí)間,采用DATE類型,存儲(chǔ)年月日即可,中文別名為“入職時(shí)間”。
2. DML入門案例
假設(shè)我們有一個(gè)學(xué)生表,其中包含學(xué)生的學(xué)號(hào)、姓名、年齡和班級(jí)信息。我們可以使用DML語句向該表中插入一條學(xué)生記錄,例如:
INSERT INTO students (id, name, age, class)
VALUES ('1001', '張三', 18, '一班');
在上面的語句中,我們使用INSERT INTO關(guān)鍵字指定要插入數(shù)據(jù)的表名和列名,并使用VALUES關(guān)鍵字指定要插入的數(shù)據(jù)值。這個(gè)語句將向students表中插入一條學(xué)號(hào)為’1001’,姓名為’張三’,年齡為18,班級(jí)為’一班’的學(xué)生記錄。
接下來,我們可以使用UPDATE語句來修改該學(xué)生的年齡信息,例如:
UPDATE students
SET age = 19
WHERE id = '1001';
在上面的語句中,我們使用UPDATE關(guān)鍵字指定要更新的表名和列名,并使用SET關(guān)鍵字指定要更新的數(shù)據(jù)值。這個(gè)語句將更新學(xué)號(hào)為’1001’的學(xué)生的年齡為19歲。
最后,我們可以使用DELETE語句來刪除該學(xué)生的記錄,例如:
DELETE FROM students
WHERE id = '1001';
在上面的語句中,我們使用DELETE FROM關(guān)鍵字指定要?jiǎng)h除的表名,并使用WHERE關(guān)鍵字指定要?jiǎng)h除的記錄條件。這個(gè)語句將刪除學(xué)號(hào)為’1001’的學(xué)生記錄。
需要注意的是,DML語句會(huì)對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行增刪改操作,因此在使用時(shí)需要謹(jǐn)慎,避免誤操作造成數(shù)據(jù)丟失或數(shù)據(jù)不一致的情況。
3. DQL入門案例
1. 查詢年齡為20,21,22,23歲的員工信息
SELECT *
FROM employees
WHERE age IN (20, 21, 22, 23);
2. 查詢性別為 男,并且年齡在 20-40 歲(含)以內(nèi)的姓名為三個(gè)字的員工
SELECT name
FROM employees
WHERE gender = '男' AND age BETWEEN 20 AND 40 AND LENGTH(name) = 3;
3. 統(tǒng)計(jì)員工表中年齡小于60歲的,男性員工和女性員工的人數(shù)
SELECT gender, COUNT(*)
FROM employees
WHERE age < 60
GROUP BY gender;
4. 查詢所有年齡小于等于35歲員工的姓名和年齡,并對(duì)查詢結(jié)果按年齡升序排序,如果年齡相同按入職時(shí)間降序排序
SELECT name, age
FROM employees
WHERE age <= 35
ORDER BY age ASC, hire_date DESC;
5. 查詢性別為男,且年齡在20-40 歲(含)以內(nèi)的前5個(gè)員工信息,對(duì)查詢的結(jié)果按年齡升序排序,年齡相同按入職時(shí)間升序排序
SELECT *
FROM employees
WHERE gender = '男' AND age BETWEEN 20 AND 40
ORDER BY age ASC, hire_date ASC
LIMIT 5;
4. DCL入門案例
- 案例背景:
假設(shè)我們有一個(gè)名為"OnlineStore"的關(guān)系型數(shù)據(jù)庫,其中包含以下兩個(gè)表:Customers(顧客)和Orders(訂單)。我們希望通過DCL命令來管理和控制用戶對(duì)這些表的訪問權(quán)限
- 用戶權(quán)限管理:
首先,我們需要?jiǎng)?chuàng)建一個(gè)新用戶,并分配用戶名和密碼。假設(shè)我們要?jiǎng)?chuàng)建一個(gè)名為"manager"的用戶。下面是創(chuàng)建用戶的DCL命令
CREATE USER manager IDENTIFIED BY 'password';
接下來,我們可以使用GRANT命令授予用戶相應(yīng)的權(quán)限。例如,我們可以授予"manager"用戶對(duì)Customers表的SELECT和INSERT權(quán)限。下面是授予權(quán)限的DCL命令
GRANT SELECT, INSERT ON Customers TO manager;
- 對(duì)象權(quán)限管理:
在上述案例中,我們已經(jīng)授予了"manager"用戶對(duì)Customers表的SELECT和INSERT權(quán)限?,F(xiàn)在,假設(shè)我們想撤銷該用戶對(duì)Customers表的INSERT權(quán)限。下面是撤銷權(quán)限的DCL命令
REVOKE INSERT ON Customers FROM manager;
此時(shí),"manager"用戶只能對(duì)Customers表執(zhí)行SELECT操作,而無法執(zhí)行INSERT操作
- 事務(wù)管理:
事務(wù)管理是DCL的一部分,它涉及控制和管理數(shù)據(jù)庫中的事務(wù)。假設(shè)我們想在Orders表中插入一條新訂單,并確保該操作是原子的(要么全部成功,要么全部回滾)。下面是使用事務(wù)管理的DCL命令
BEGIN TRANSACTION;
INSERT INTO Orders (order_id, customer_id, total_amount) VALUES (1, 1001, 50.00);
COMMIT;
如果在插入訂單的過程中發(fā)生任何錯(cuò)誤,可以使用ROLLBACK命令回滾事務(wù),撤銷已執(zhí)行的操作,恢復(fù)到事務(wù)開始之前的狀態(tài)
- 數(shù)據(jù)庫對(duì)象的安全性:
DCL也涉及管理和維護(hù)數(shù)據(jù)庫對(duì)象的安全性。假設(shè)我們想創(chuàng)建一個(gè)新的模式(Schema)來存儲(chǔ)敏感數(shù)據(jù),并將其保護(hù)起來,只允許特定的用戶訪問。下面是創(chuàng)建模式和設(shè)置權(quán)限的DCL命令
CREATE SCHEMA secure_schema;
GRANT ALL PRIVILEGES ON SCHEMA secure_schema TO manager;
通過以上命令,我們創(chuàng)建了一個(gè)名為"secure_schema"的模式,并授予"manager"用戶對(duì)該模式的所有權(quán)限文章來源:http://www.zghlxwxcb.cn/news/detail-617119.html
總結(jié)
歡迎各位留言交流以及批評(píng)指正,如果文章對(duì)您有幫助或者覺得作者寫的還不錯(cuò)可以點(diǎn)一下關(guān)注,點(diǎn)贊,收藏支持一下。
(博客的參考源碼可以在我主頁的資源里找到,如果在學(xué)習(xí)的過程中有什么疑問歡迎大家在評(píng)論區(qū)向我提出)文章來源地址http://www.zghlxwxcb.cn/news/detail-617119.html
到了這里,關(guān)于【Mysql】萬字長文帶你快速掌握數(shù)據(jù)庫基礎(chǔ)概念及SQL基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!