目錄
1、Sql介紹
1.1、SQL的分類
1.2、數據庫的三大范式
1.3、數據表的約束
1.4、約束的添加與刪除
2、核心特性
3、主要組件
4、數據結構原理
5、索引失效
6、常用問題
7、優勢與局限
前言
????????MySQL是一個開源的關系型數據庫管理系統(RDBMS),由瑞典MySQL AB公司開發,現屬于Oracle旗下產品。
1、Sql介紹
Structure Query Language(結構化查詢語言)簡稱SQL。
1.1、SQL的分類
1、DDL(Data Definition Language) 數據定義語言
用來操作數據庫、表、列等; 常用語句:CREATE、 ALTER、DROP。
2、DML(Data Manipulation Language) 數據操作語言
用來操作數據庫中表里的數據;常用語句:INSERT、 UPDATE、 DELETE。
3、DCL(Data Control Language) 數據控制語言
用來操作訪問權限和安全級別; 常用語句:GRANT、DENY。
4、DQL(Data Query Language) 數據查詢語言
用來查詢數據 常用語句:SELECT。‘’
1.2、數據庫的三大范式
1、第一范式(1NF)
數據庫表的每一列都是不可分割的基本數據線(每列的值具有原子性,不可再分割)。
2、第二范式(2NF)
在第一范式(1NF)的基礎上,如果表是單主鍵,那么主鍵以外的列必須完全依賴于主鍵;如果表是復合主鍵,那么主鍵以外的列必須完全依賴于主鍵,不能僅依賴主鍵的一部分。
3、第三范式(3NF)
在第二范式的基礎上建立起來的,即滿足第三范式必須要先滿足第二范式。第三范式(3NF)要求:表中的非主鍵列必須和主鍵直接相關而不能間接相關;(非主鍵列之間不能相關依賴)。
1.3、數據表的約束
1. 主鍵約束 (PRIMARY KEY)
-
唯一標識表中的每一行記錄
-
不允許 NULL 值
-
一個表只能有一個主鍵
CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(50)
);-- 復合主鍵
CREATE TABLE order_items (order_id INT,product_id INT,quantity INT,PRIMARY KEY (order_id, product_id)
);
2. 外鍵約束 (FOREIGN KEY)
-
建立表與表之間的關系
-
確保引用完整性
-
被引用的列必須是主鍵或唯一鍵
CREATE TABLE orders (order_id INT PRIMARY KEY,user_id INT,order_date DATE,FOREIGN KEY (user_id) REFERENCES users(id)
);
3. 唯一約束 (UNIQUE)
-
確保列中的所有值都是唯一的
-
允許 NULL 值(但只能有一個 NULL)
-
一個表可以有多個 UNIQUE 約束
CREATE TABLE employees (id INT PRIMARY KEY,email VARCHAR(100) UNIQUE,phone VARCHAR(20) UNIQUE
);
4. 非空約束 (NOT NULL)
-
強制列不接受 NULL 值
-
必須包含值
CREATE TABLE products (id INT PRIMARY KEY,name VARCHAR(100) NOT NULL,price DECIMAL(10,2) NOT NULL
);
5. 默認約束 (DEFAULT)
-
當插入數據時,如果沒有提供值,則使用默認值
CREATE TABLE orders (id INT PRIMARY KEY,order_date DATE DEFAULT CURRENT_DATE,status VARCHAR(20) DEFAULT 'pending'
);
6. 檢查約束 (CHECK) - MySQL 8.0+
-
限制列中值的范圍
-
確保數據滿足特定條件
CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT CHECK (age >= 18),salary DECIMAL(10,2) CHECK (salary > 0)
);
1.4、約束的添加與刪除
1.添加約束
-- 添加主鍵
ALTER TABLE students ADD PRIMARY KEY (id);-- 添加外鍵
ALTER TABLE orders ADD CONSTRAINT fk_user
FOREIGN KEY (user_id) REFERENCES users(id);-- 添加唯一約束
ALTER TABLE products ADD UNIQUE (product_code);
2.刪除約束
-- 刪除主鍵
ALTER TABLE students DROP PRIMARY KEY;-- 刪除外鍵
ALTER TABLE orders DROP FOREIGN KEY fk_user;-- 刪除唯一約束
ALTER TABLE products DROP INDEX product_code;
合理使用約束可以確保數據庫數據的完整性和一致性,是數據庫設計中的重要環節。
2、核心特性
-
開源免費:社區版可免費使用,有活躍的開源社區支持
-
跨平臺:支持Windows、Linux、macOS等多種操作系統
-
高性能:優化過的存儲引擎(InnoDB等)提供良好的讀寫性能
-
可擴展性:支持主從復制、分片等擴展方案
-
關系型數據庫:基于表結構存儲數據,支持SQL(結構化查詢語言)
3、主要組件
-
存儲引擎:InnoDB(默認)、MyISAM、Memory等,各有適用場景
-
查詢優化器:分析SQL語句并生成高效執行計劃
-
連接池:管理數據庫連接,提高并發性能
-
日志系統:包括二進制日志、錯誤日志、慢查詢日志等
4、數據結構原理
5、索引失效
持續更新
6、常用問題
1、count(*)和count(1)和count(列)區別
COUNT(*)
和COUNT(1)
在實際結果上完全相同。它們的執行計劃也完全一致。
在復雜查詢和性能測試中表現相同。
與
COUNT(列名)
有明顯區別,count(列)會忽略NULL值。
2、Delete和Truncate區別
????????TRUNCATE和DETELE都能實現刪除表中的所有數據的功能。
但兩者也是有區別的:
1、DELETE語句后可跟WHERE子句,可通過指定WHERE子句中的條件表達式只刪除滿足條件的部分記錄;但是,TRUNCATE語句只能用于刪除表中的所有記錄。
2、使用TRUNCATE語句刪除表中的數據后,再次向表中添加記錄時自動增加字段的默認初始值重新由1開始;使用DELETE語句刪除表中所有記錄后,再次向表中添加記錄時自動增加字段的值為刪除時該字段的最大值加1。
3、DELETE語句是DML語句,TRUNCATE語句通常被認為是DDL語句。
7、優勢與局限
優勢:
-
成熟穩定,社區支持完善
-
易于安裝和使用
-
良好的兼容性和工具生態
-
支持事務處理(ACID特性)
局限:
-
在大數據量(如PB級)場景下不如NoSQL高效
-
水平擴展能力相對有限
-
復雜查詢性能可能不如專用分析型數據庫
參考文章:
1、MySQL 有這一篇就夠(嘔心狂敲37k字,只為博君一點贊!!!)_mysql有這一篇幅就夠了-CSDN博客