国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Mysql】萬字長文帶你快速掌握數(shù)據(jù)庫基礎(chǔ)概念及SQL基本操作

這篇具有很好參考價(jià)值的文章主要介紹了【Mysql】萬字長文帶你快速掌握數(shù)據(jù)庫基礎(chǔ)概念及SQL基本操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


前言

為了鞏固所學(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通用語法

  1. SQL語句可以單行或多行書寫,以分號(hào)結(jié)尾
  2. SQL語句可以使用空格/縮進(jìn)來增強(qiáng)語句的可讀性
  3. MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫,關(guān)鍵字建議使用大寫
  4. 注釋
    ---- 單行注釋 : - - 注釋內(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
);
  • 查詢表
  1. 查詢當(dāng)前數(shù)據(jù)庫所有表
SHOW TABLES
  1. 查詢表結(jié)構(gòu)
DESC 表名
  1. 查詢指定表的建襲語句
SHOW CREATE TABLE 表名
  • 修改表結(jié)構(gòu)ALTER TABLE):在數(shù)據(jù)庫使用過程中,可能需要修改表的結(jié)構(gòu),例如添加新列、更改列的數(shù)據(jù)類型或刪除列。ALTER TABLE語句用于這些操作。下面是一些示例
  1. 添加新列:
ALTER TABLE users
ADD email VARCHAR(100);
  1. 修改列的數(shù)據(jù)類型
ALTER TABLE Customers
ADD COLUMN phone_number VARCHAR(20);
  1. 刪除列
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ù)
  1. 語法格式 :INSERT INTO 表名(字段名1, 字段名2,…) VALUES (值1,值2,…);
  • 給全部字段添加數(shù)據(jù)

語法格式:INSERT INTO 表名 VALUES (值1, 值2, …);

  • 批量添加數(shù)據(jù)

語法格式:

  1. INSERTINTO 表名(字段名1, 字段名2, …) VALUES(值1,值2,…), (值1,值2,…),(值1, 值2,…);
  2. INSERTINTO 表名 VALUES (值1, 值2,…),(值1, 值2, …),(值1,值2,…) ;
  • 注意事項(xiàng)
  1. 插入數(shù)據(jù)時(shí),指定的字段順序需要與值的順序是一一對(duì)應(yīng)的
  2. 字符串和日期型數(shù)據(jù)應(yīng)該包含在引號(hào)中
  3. 插入的數(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';
  • 一般格式
  1. 語法格式: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';
  • 一般格式
  1. 語法格式:DELETE FROM 表名[WHERE 條件]
  • 注意事項(xiàng)
  1. DELETE 語句的條件可以有,也可以沒有,如果沒有條件,則會(huì)刪除整張表的所有數(shù)據(jù)
  2. 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è)字段

語法格式

  1. SELECT 字段1,字段2, 字段3 … FROM 表名)
  2. 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;
  • 一般格式
  1. 語法格式:SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2
  • 排序方式
  1. ASC:升序 (默認(rèn)值)
  2. 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;
  • 一般格式
  1. 語法格式: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)的總訂單金額

  • 一般格式
  1. 語法格式:SELECT 字段列表 FROM 表名[WHERE 條件] GROUP BY 分組字段名[HAVING 分組后過濾條件];
  • where與having區(qū)別
  1. 執(zhí)行時(shí)機(jī)不同: where是分組之前進(jìn)行過濾,不滿足where條件,不參與分組,而having是分組之后對(duì)結(jié)果進(jìn)行過濾。
  2. 判斷條件不同: 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)。

  • 一般格式
  1. 語法格式: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è)工資最高的員工的姓名和工資信息

  • 注意
  1. 起始索引從0開始,起始索引= (查詢頁碼 -1) * 每頁顯示記錄數(shù)
  2. 分頁查詢是數(shù)據(jù)庫的方言,不同的數(shù)據(jù)庫有不同的實(shí)現(xiàn),MysQL中是LIMIT
  3. 如果查詢的是第一頁數(shù)據(jù),起始索引可以省略,直接簡寫為 limit 10
  4. 在使用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í)行順序

【Mysql】萬字長文帶你快速掌握數(shù)據(jù)庫基礎(chǔ)概念及SQL基本操作,mysql,數(shù)據(jù)庫,mysql,sql,大數(shù)據(jù),開發(fā)工具,后端


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ī)名';
  • 注意
  1. 主機(jī)名可以使用 % 通配
  2. 這類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ù)庫/表
  • 示例
  1. 查權(quán)限
SHOW GRANTS FOR '用戶名'@'主機(jī)名';
  1. 授予權(quán)限
GRANT 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 TO '用戶名'@'主機(jī)名'
  1. 撤銷權(quán)限
REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 FROM '用戶名'@'主機(jī)名';
  • 注意
  1. 多個(gè)權(quán)限之間,使用逗號(hào)分隔
  2. 授權(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ì)一張員工信息表,要求如下:
  1. 編號(hào)(純數(shù)字)
  2. 員工工號(hào)(字符串類型,長度不超過10位)
  3. 員工姓名(字符串類型,長度不超過10位)
  4. 性別(男/女,存儲(chǔ)一個(gè)漢字)
  5. 年齡(正常人年齡,不可能存儲(chǔ)負(fù)數(shù))
  6. 身份證號(hào)(二代身份證號(hào)均為18位,身份證中有X這樣的字符)
  7. 入職時(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è)字段的含義如下:

  1. id: 員工信息的唯一編號(hào),采用純數(shù)字類型,使用INT類型,作為表的主鍵,中文別名為“編號(hào)”。
  2. employee_number: 員工工號(hào),采用字符串類型,長度不超過10位,使用VARCHAR(10)類型,中文別名為“員工工號(hào)”。
  3. name: 員工姓名,采用字符串類型,長度不超過10位,使用VARCHAR(10)類型,中文別名為“員工姓名”。
  4. gender: 員工性別,使用一個(gè)漢字表示,采用CHAR(1)類型,中文別名為“性別”。
  5. age: 員工年齡,采用TINYINT類型,適合存儲(chǔ)正常人的年齡,不可能存儲(chǔ)負(fù)數(shù),中文別名為“年齡”。
  6. id_card: 員工身份證號(hào),采用CHAR(18)類型,適合存儲(chǔ)18位身份證號(hào)碼,包括可能出現(xiàn)的字符X,中文別名為“身份證號(hào)”。
  7. 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)限


總結(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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【網(wǎng)絡(luò)安全 --- MySQL數(shù)據(jù)庫】網(wǎng)絡(luò)安全MySQL數(shù)據(jù)庫應(yīng)該掌握的知識(shí),還不收藏開始學(xué)習(xí)。
  • 【MySQL】一文帶你了解數(shù)據(jù)庫索引與事務(wù)

    數(shù)據(jù)庫索引是一種提高數(shù)據(jù)庫查詢效率的數(shù)據(jù)結(jié)構(gòu)。它可以快速地定位和訪問數(shù)據(jù)庫中的數(shù)據(jù),從而大大提高數(shù)據(jù)庫查詢的速度和效率。數(shù)據(jù)庫索引可以根據(jù)不同的查詢需求構(gòu)造多個(gè)索引,以最大化提高查詢效率。 數(shù)據(jù)庫索引基于各種字段來創(chuàng)建,在查詢時(shí)可以通過索引直接

    2024年02月09日
    瀏覽(82)
  • 珍藏多年的MySQL函數(shù)大全筆記,掌握數(shù)據(jù)庫真不難

    珍藏多年的MySQL函數(shù)大全筆記,掌握數(shù)據(jù)庫真不難

    做程序員的誰會(huì)離得開數(shù)據(jù)庫呢? 今天就來分享一下我整理的MySQL的常用函數(shù),基本上囊括了平時(shí)要用的函數(shù),它們已經(jīng)陪我走過了不少年頭了,風(fēng)里來雨里去,縫縫補(bǔ)補(bǔ)又幾年,希望能幫到你們! 如果數(shù)據(jù)庫函數(shù)你能用得好,其他的東西也就水到渠成了。 序號(hào) 函數(shù) 說明

    2023年04月23日
    瀏覽(21)
  • 輕松掌握線性代數(shù)-萬字長文基礎(chǔ)知識(shí)概覽

    輕松掌握線性代數(shù)-萬字長文基礎(chǔ)知識(shí)概覽

    線性代數(shù)是一門將 m 維世界與 n 維世界聯(lián)系起來的學(xué)科 映射:把集合 Y 的元素與集合 X 的元素相對(duì)應(yīng)的規(guī)則叫做 “從集合 X 到集合 Y 的映射”。 像:通過映射 f 與 x i 相對(duì)應(yīng)的集合 Y 的元素,叫做 x i 通過映射 f 形成的像,一般表示為 f(x i )。 線性映射的例子 f ( x ) = 2 x f(

    2024年02月11日
    瀏覽(63)
  • JDBC 技術(shù) | Java連接MySQL數(shù)據(jù)庫(四萬字零基礎(chǔ)保姆級(jí)超全詳解)

    JDBC 技術(shù) | Java連接MySQL數(shù)據(jù)庫(四萬字零基礎(chǔ)保姆級(jí)超全詳解)

    管他啥是啥,看就完了!如果覺得博主寫的不錯(cuò),可以點(diǎn)贊關(guān)注支持一下博主哦!有什么地方存在不足或者錯(cuò)誤的,煩請(qǐng)各位大佬在評(píng)論區(qū)指正。萬分感謝??! 本文結(jié)合了韓順平零基礎(chǔ)學(xué)java,黑馬程序員零基礎(chǔ)學(xué) JavaWeb,等多個(gè)視頻的相關(guān)知識(shí)內(nèi)容整理而來?;ㄙM(fèi)了很多很多

    2024年02月05日
    瀏覽(88)
  • 【入門必看,MySQL從0到1系列- 數(shù)據(jù)庫保姆級(jí)圖解教程:輕松掌握數(shù)據(jù)庫管理技能】

    【入門必看,MySQL從0到1系列- 數(shù)據(jù)庫保姆級(jí)圖解教程:輕松掌握數(shù)據(jù)庫管理技能】

    MySQL 是全球最流行的用于管理關(guān)系數(shù)據(jù)庫的開源數(shù)據(jù)庫軟件。除了具有強(qiáng)大的功能外,它還比 Microsoft SQL Server 和 Oracle 數(shù)據(jù)庫快速、可擴(kuò)展且更易于使用。因此,PHP 腳本通常用于創(chuàng)建功能強(qiáng)大且動(dòng)態(tài)的服務(wù)器端/基于 Web 的應(yīng)用程序。 注意: ?數(shù)據(jù)庫是數(shù)據(jù)的結(jié)構(gòu)化集合 SQL

    2024年02月09日
    瀏覽(29)
  • 小白帶你學(xué)習(xí)linux的mysql數(shù)據(jù)庫備份(三十)

    小白帶你學(xué)習(xí)linux的mysql數(shù)據(jù)庫備份(三十)

    目錄 一、概述 二、數(shù)據(jù)備份的重要性 三、造成數(shù)據(jù)丟失的原因 四、備份類型 1、物理與邏輯角度 1.1物理備份 1.2冷備份 1.3熱備份 1.4邏輯備份 2、數(shù)據(jù)庫備份策略角度 1.1完整備份 1.2增量備份 五、常見的備份方法 1、物理備份 2、使用專用備份工具 3、通過啟用二進(jìn)制日志增量

    2024年02月03日
    瀏覽(20)
  • 《萬字長文帶你解讀AIGC》系列之入門篇

    《萬字長文帶你解讀AIGC》系列之入門篇

    歡迎關(guān)注『CVHub』官方微信公眾號(hào)! 隨著 ChatGPT 的病毒式傳播, 生成式人工智能 ( AIGC , a.k.a AI-generated content )因其分析和創(chuàng)造 文本 、 圖像 、 視頻 以及其他方面的出眾能力而儼然成為當(dāng)下最火熱的投資賽道,沒有之一。在如此鋪天蓋地的信息轟炸下,每個(gè)人似乎難以置身

    2024年02月09日
    瀏覽(31)
  • 萬字長文帶你重溫Elasticsearch ,這下完全懂了!

    萬字長文帶你重溫Elasticsearch ,這下完全懂了!

    生活中的數(shù)據(jù) 搜索引擎是對(duì)數(shù)據(jù)的檢索,所以我們先從生活中的數(shù)據(jù)說起。我們生活中的數(shù)據(jù)總體分為兩種: 結(jié)構(gòu)化數(shù)據(jù) 非結(jié)構(gòu)化數(shù)據(jù) 結(jié)構(gòu)化數(shù)據(jù): 也稱作行數(shù)據(jù),是由二維表結(jié)構(gòu)來邏輯表達(dá)和實(shí)現(xiàn)的數(shù)據(jù),嚴(yán)格地遵循數(shù)據(jù)格式與長度規(guī)范,主要通過關(guān)系型數(shù)據(jù)庫進(jìn)行存

    2024年02月22日
    瀏覽(24)
  • 高級(jí)DBA帶你處理Mysql數(shù)據(jù)庫10億大數(shù)據(jù)條件下遷移實(shí)戰(zhàn)

    高級(jí)DBA帶你處理Mysql數(shù)據(jù)庫10億大數(shù)據(jù)條件下遷移實(shí)戰(zhàn)

    在實(shí)際工作中,有些特殊的場景需要進(jìn)行生產(chǎn)數(shù)據(jù)遷移,并且生產(chǎn)環(huán)境的數(shù)據(jù)量非常大,比如上10億數(shù)據(jù),并且遷移實(shí)施的時(shí)間并有所限制,比如9小時(shí)內(nèi)、48小時(shí)內(nèi),必須恢復(fù)生產(chǎn)。 并且在這么龐大的數(shù)據(jù)量條件下,還要進(jìn)行數(shù)據(jù)過濾調(diào)整! 此種情況下,傳統(tǒng)Java jdbc多線程的

    2024年04月26日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包