什么是SQL?
Structured Query Language (結構化查詢語言),與關系型數據庫進行通信的標準語言。
什么是數據庫?
“按照數據結構來組織、存儲、和管理數據的倉庫。”
一個長期存儲在計算機內的、有組織的、可共享的、統一管理的大量數據的集合。
SQL的種類有什么?
DDL:? Data Definition Language 數據定義語言,用來定義數據庫對象(數據庫,表, 字段)
DML:Data Manipulation Language 數據操作語言,用來對數據庫表中的數據進行增刪改
DQL: Data Query Language 數據查詢語言,用來查詢數據庫中表的記錄
DCL: Data Control Language 數據控制語言,用來創建數據庫用戶、控制數據庫的 訪問權限
TCL: Transaction Control Language 事務控制語言,是一個或一組SQL語句組成的一個執行單元,這個執行單元要么全部執行,要么全部不執行。
DQL相關:
查詢語句語法結構: SELECT 字段列表 FROM 表名列表 WHERE 條件列表GROUP BY 分組字段列表 HAVING 分組后條件列表 ORDER BY 排序字段.
DQL 查詢語句分類: 基本查詢(不帶任何條件)
??? 條件查詢(WHERE)
??? 聚合函數(count、max、min、avg、sum)
分組查詢(group by)
排序查詢(order by)
分頁查詢(limit)
DML相關:
添加表數據語法: insert into 表名(列名1,..列名n) values(值1,...值n);
注意:
- 列名和值要一一對應。
- 如果表名后,不定義列名,則默認給所有列添加值,如果第一列是主鍵列,需要在添加值時把第一列的值設置為null。
- 除了數值類型,其他類型的值需要使用引號引起來。
刪除表數據語法: delete from 表名 where 條件
注意:
- 如果不加條件,則刪除表中所有記錄。
- 如果要刪除所有記錄
- delete from 表名; -- 不推薦使用。有多少條記錄就會執行多少次刪除操作
- truncate table 表名; -- 推薦使用,效率更高。先刪除表,然后再創建一張一樣的表。
修改表數據語法:
update 表名 set 列名1 = 值1, 列名2 = 值2,... where 條件;
注意:
- 如果不加任何條件,則會將表中所有記錄全部修改。
???
DDL 相關:
操作隱形提交,不能rollback。
數據庫操作:查詢所有數據庫:show databases; 創建數據庫:create database 數據庫名; 刪除數據庫:drop database 數據庫名; 使用數據庫:use 數據庫名;
表操作:查詢當前數據庫所有表:show tables;
查看指定表結構:desc 表名; 查詢指定表的建表語句:show create table 表名;
創建表結構:create table 表名( 字段1 字段1類型, 字段2 字段2類型 ... );
DCL相關:
授權:GRANT
查詢用戶: select * from mysql.user;
創建用戶: CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';
修改用戶密碼: ALTER USER '用戶名'@'主機名' IDENTIFIED WITH mysql_native_password BY '新密碼' ;
刪除用戶: DROP USER '用戶名'@'主機名' ;
注意事項: 在MySQL中需要通過用戶名@主機名的方式,來唯一標識一個用戶。
MySQL中的數據類型主要分類:數值類型、字符串類型、日期時間類型。
數值類型:有符號:SIGNED、無符號:UNSIGNED。默認是有符號。
浮點型可以用類型名稱后加(M,D)來表示,M表示該值的總共長度,D表示小數點后面的長度。
常用類型:
int:整型
double:浮點型,例如 double(5,2)表示最多 5 位,其中必須有 2 位小數,即最大值為 999.99;
decimal:泛型型,在表單線方面使用該類型,因為不會出現精度缺失問題;
char:固定長度字符串類型;(當輸入的字符不夠長度時會補空格)
varchar:可變長度字符串類型;
text:字符串類型;
blob:字節類型;
date:日期類型,格式為:yyyy-MM-dd;
time:時間類型,格式為:hh:mm:ss
timestamp:時間戳類型;
char&varchar:
類型相似,但保存與檢索方式不同。
最大長度、是否保留空格等方面也不同。
Binary&Varbinary
固定長度 (Binary) 的或可變長度 (Varbinary) 的 Binary 數據類型。
Binary ?( n )
固定長度的 n 個字節二進制數據。N 必須從 1 到 8,000。存儲空間大小為 n+4 字節。
Varbinary ( n )
n 個字節變長二進制數據。n 必須從 1 到 8,000。存儲空間大小為實際輸入數據長度 +4 個字節,而不是 n 個字節。輸入的數據長度可能為 0 字節。在 SQL-92 中 varbinary 的同義詞為 binary varying。
如果在數據定義或變量聲明語句中沒有指定 n,默認長度為 1。如果沒有用 CAST 函數指定 n,默認長度為 30。
當列數據項大小一致時應使用 binary。
當列數據項大小不一致時應使用 varbinary。
數據類型decimal(p,s)
需要分別指定小數的最大位數(p)和小數位的數量(s):
p (precision) :指定小數的最大位數,小數點的左側和右側的數字的總數量不能超過p,p的取值范圍是從1到38,默認值為18。
s (scale):指定在小數點右側的小數位數,p-s是小數點左邊的最大位數。s必須是從0到p的值,只有在指定了精度的情況下才能指定s,s的默認值是0,
因此,0 <= s <= p。
SQL的管理數據對象有哪些?
- 表(Table):
- 定義:?數據庫中最基本、最重要的數據對象。
- 作用:?以行(記錄)和列(字段)的結構化格式存儲實際數據。每一行代表一個實體(如一個客戶、一個訂單),每一列代表該實體的一個屬性(如客戶姓名、訂單日期)。
- 管理操作:?
CREATE TABLE
,?ALTER TABLE
,?DROP TABLE
,
TRUNCATE TABLE
,?INSERT INTO
,?UPDATE
,?DELETE
,?SELECT
。
? ? ?2.? 視圖 (View):
- 定義:?基于一個或多個表(或其他視圖)的查詢結果集生成的虛擬表。
- 作用:
簡化復雜查詢(將復雜的?JOIN
?或計算封裝在視圖中)。
提供數據抽象和安全性(只暴露視圖定義的列和行,隱藏底層表結構和敏感數據)。邏輯上組織數據。
- 關鍵點:?視圖本身不存儲數據,數據仍然存儲在基表中。對視圖的查詢或更新操作最終會作用在基表上(可更新視圖有特定規則)。
- 管理操作:?
CREATE VIEW
,?ALTER VIEW
,?DROP VIEW
,?SELECT
?(查詢視圖)。
? ? ?3. 索引 (Index):
- 定義:?一種特殊的數據庫對象,建立在表的一個或多個列上,用于加速數據檢索速度。
- 作用:?類似于書籍的目錄,允許數據庫引擎快速找到特定值,而無需掃描整個表。顯著提高?
SELECT
(尤其是帶?WHERE
,?ORDER BY
,?JOIN
)的速度。 - 代價:?索引需要額外的存儲空間,并且會降低?
INSERT
,?UPDATE
,?DELETE
?操作的速度(因為索引也需要維護)。 - 常見類型:?B-Tree(最常用)、Hash、Bitmap、全文索引等。
- 管理操作:?
CREATE INDEX
,?DROP INDEX
,?ALTER INDEX
?(某些DBMS),?REBUILD INDEX
/REORGANIZE INDEX
?(維護)。
? ? ? 4. 約束 (Constraints):
- 定義:?應用于表列上的規則,用于強制實施數據的完整性和準確性。
- 作用:?確保表中的數據滿足特定的業務規則和關系。
- 主要類型:
PRIMARY KEY
: 唯一標識表中的每一行(不允許?NULL
?和重復值)。FOREIGN KEY
: 確保一個表(子表/引用表)中的列值必須存在于另一個表(父表/被引用表)的主鍵或唯一鍵中,維護表間引用完整性。UNIQUE
: 確保列(或列組合)中的所有值都是唯一的(允許?NULL
,但通常只允許一個?NULL
)。NOT NULL
: 確保列不能存儲?NULL
?值。CHECK
: 確保列中的值滿足指定的條件
(如?Age > 0
,?Status IN ('A','I')
)。
DEFAULT
: 當未指定值時,為列提供默認值。
- 管理操作:?通常在創建或修改表時定義 (
CREATE TABLE
,?ALTER TABLE ... ADD CONSTRAINT
),也可以單獨添加或刪除 (ALTER TABLE ... DROP CONSTRAINT
)。
? ? ? 5. 序列 (Sequence) / 自增列 (Auto-increment / Identity Column):
? ? ? ?定義:
- 序列:?一個獨立的數據對象(在 Oracle, PostgreSQL 等中常見),用于生成唯一的、通常按順序遞增的數字序列。
- 自增列/Identity列:?表列的一個屬性(在 MySQL?
AUTO_INCREMENT
, SQL Server?IDENTITY
, PostgreSQL?SERIAL
?等),在插入新行時自動生成唯一的遞增值。 - 作用:?為主鍵列或其他需要唯一標識符的列自動生成唯一值。
- 管理操作:
- 序列:?
CREATE SEQUENCE
,?ALTER SEQUENCE
,?DROP SEQUENCE
,?NEXTVAL
?(獲取下一個值)。 - 自增列:?在?
CREATE TABLE
?/?ALTER TABLE
?中定義 (AUTO_INCREMENT
,?IDENTITY
?等)。
? ? ? ? 6. 同義詞 (Synonym):
- 定義:?為現有數據庫對象(如表、視圖、序列、存儲過程、函數,甚至是另一個同義詞)提供的別名。
- 作用:
- 簡化對象引用(使用短名稱代替冗長的?
schema.object
?名稱)。 - 提供抽象層(如果底層對象位置或名稱改變,只需修改同義詞定義,應用程序代碼無需改動)。
- 方便訪問不同用戶模式下的對象。
- 管理操作:?
CREATE [PUBLIC] SYNONYM
,?DROP SYNONYM
。
- 模式 (Schema):
- 定義:?數據庫對象的命名空間或容器。它本身不存儲數據,但包含表、視圖、索引、過程等對象的集合。
- 作用:
- 邏輯上組織和管理數據庫對象(如按功能模塊劃分)。
- 避免命名沖突(不同模式下的對象可以有相同名稱)。
- 權限管理的基礎單元(可以對整個模式授權)。
- 管理操作:?
CREATE SCHEMA
,?ALTER SCHEMA
,?DROP SCHEMA
?(具體語法和功能因 DBMS 差異較大)。