文章目錄
- 前言
- 一、數據庫概述
- 1.1 前置知識
- 1.1.1 LAMP / LNMP 架構
- 1.1.2 數據庫的定位
- 1.2 數據庫基本概念
- 1.2.1 數據
- 1.2.2 表
- 1.2.3 數據庫
- 1.2.4 數據庫管理系統(DBMS)
- 1.2.5 數據庫系統(DBS)
- 1.3 數據庫發展史
- 1.3.1 第一階段(層次型/網狀型)
- 1.3.2 第二階段(關系型)
- 1.3.3 第三階段(新型數據庫)
- 1.4 關系型數據庫
- 1.5 非關系型數據庫(NoSQL)
- 1.5.1 優點
- 1.5.2 缺點
- 1.5.3 Redis 與 Memcached 對比
- 1.6 關系型 vs 非關系型數據庫對比
- 1.7 小結
- 二、數據庫安裝
- 2.1 環境準備
- 2.2 源碼解壓與依賴
- 2.2.1 Boost 是什么?
- 2.2.2 為什么編譯 MySQL 需要 Boost?
- 2.2.3 編譯時與 Boost 的交互方式
- 2.3、CMake 編譯配置
- 2.4 配置 MySQL
- 2.4.1 權限管理
- 2.4.2 修改配置文件 `/etc/my.cnf`
- 2.5 環境變量設置
- 2.6 數據庫初始化
- 2.7 服務管理
- 2.8 賬號密碼管理
- 三、MySQL 數據庫管理
- 3.1 數據庫基本操作
- 3.1.1 查看數據庫信息
- 3.1.2 切換數據庫
- 3.1.3 查看數據庫中的表
- 3.1.4 查看表結構
- 3.2 常用數據類型
- 3.3 數據庫文件存儲結構
- 3.4 SQL 語句分類
- 3.5 DDL 操作(數據庫和表管理)
- 3.5.1 創建數據庫
- 3.5.2 創建數據表
- 3.5.3 刪除表
- 3.5.4 刪除數據庫
- 3.5.5 修改表結構(ALTER)
- 3.6 DML 操作(表數據管理)
- 3.6.1 插入數據
- 3.6.2 更新數據
- 3.6.3 刪除數據
- 3.6.4 清空表內數據
- 3.6.5 回滾
- 3.6.5.1 回滾失敗的根本原因
- 3.6.5.2 如何正確使用事務回滾
- 3.6.5.3 已提交DELETE的數據恢復方案
- 3.6.5.4 預防措施
- 3.6.5.5 檢查當前事務設置
- 3.7 DQL 操作(數據查詢)
- 3.7.1 查詢數據
- 3.7.2 限制查詢結果
- 3.7.3 豎向顯示結果
- 3.8 表高級操作
- 3.8.1 臨時表
- 3.8.2 克隆表
- 3.9 用戶管理
- 3.9.1 創建用戶
- 3.9.2 查看用戶
- 3.9.3 刪除用戶
- 3.9.4 修改密碼
- 3.9.5 忘記 root 密碼處理
- 3.10 用戶授權管理
- 3.10.1 授權用戶
- 3.10.2 查看授權
- 3.10.3 撤銷權限
- 3.11 權限說明
- 總結
前言
在數據驅動的現代信息系統中,數據庫是存儲、管理核心數據的關鍵載體,從日常社交、電商平臺到企業級管理系統,均需其提供底層支撐。掌握數據庫知識,是開發者與運維人員的核心技能之一。
本文聚焦數據庫核心知識,先梳理數據庫的基礎概念、發展歷程與分類(含關系型與非關系型數據庫對比),再詳解數據庫安裝步驟,最后深入 MySQL 的日常管理操作(含 SQL 語句應用、用戶權限控制等),為讀者構建從理論到實踐的完整數據庫知識框架,夯實后續深入學習的基礎。
一、數據庫概述
1.1 前置知識
1.1.1 LAMP / LNMP 架構
- LAMP = Linux + Apache + MySQL/MariaDB + PHP
- LNMP = Linux + Nginx + MySQL/MariaDB + PHP
1.1.2 數據庫的定位
在企業架構中,數據庫用于存儲和管理核心數據,例如:
- 聊天軟件(微信、QQ):聊天文字、語音、視頻、圖片
- 外賣平臺(餓了么/美團):訂單、支付、商家數據
- 游戲(絕地求生、英雄聯盟):玩家信息、裝備、戰績
1.2 數據庫基本概念
1.2.1 數據
- 定義:描述客觀事物的符號記錄,包括數字、文字、圖像、聲音等。
- 存儲方式:以記錄形式存儲,統一格式,相同類型的數據存放在一起。
- 示例:班級同學信息中,一名同學是一條記錄,包含學號、姓名、性別等屬性。
1.2.2 表
- 表結構 = 行(記錄) + 列(字段)
- 特點:記錄由字段組成,字段由字符/數字組成,可供不同用戶共享,具有較小的冗余度和較高的數據獨立性。
1.2.3 數據庫
數據庫是表的集合,是按照一定組織方式存儲的相關數據集合。
1.2.4 數據庫管理系統(DBMS)
- 定義:操作和管理數據庫的軟件。
- 主要功能:
- 建庫與維護(建表、轉儲與恢復、重組、性能監視)
- 數據定義(數據結構、存儲結構、保密模式)
- 數據操作(查詢、統計、更新)
- 運行管理(并發控制、存取控制、維護)
- 通信(與其他軟件交互)
1.2.5 數據庫系統(DBS)
- 組成:硬件 + 操作系統 + 數據庫 + DBMS + 應用軟件 + 用戶
- DBA(數據庫管理員):負責備份恢復、維護、用戶管理。
- 數據庫應用軟件:Navicat、人事管理系統、財務系統、圖書管理等。
1.3 數據庫發展史
1.3.1 第一階段(層次型/網狀型)
- IMS(IBM,1969)
1.3.2 第二階段(關系型)
- 關系模型(1970年由E.F. Codd提出)
- 核心思想:將數據放在二維表中,用數學集合和關系代數描述和操作數據。
- 代表產品:System R(IBM)、Ingres(衍生出PostgreSQL)
1.3.3 第三階段(新型數據庫)
- 特點:面向對象、開放性、多平臺
- SQL + NoSQL 混合使用
- 新興數據庫:MariaDB、PostgreSQL、時序數據庫
1.4 關系型數據庫
- 數據模型:E-R 模型(實體-關系)
- 行(記錄) = 實體
- 列(字段) = 屬性
- 表與表之間存在關系(1對1,1對多,多對多)
- 主鍵:唯一、非空,類比學號/身份證號。
- 常見產品:MySQL、Oracle、SQL Server、DB2、PostgreSQL 等。
1.5 非關系型數據庫(NoSQL)
- 定義:Not Only SQL,存儲方式不限于表,可存儲鍵值對、文檔、列式數據等。
- 典型產品:Redis、Memcached、MongoDB、HBase。
- 應用場景:高并發、緩存、大數據實時計算。
1.5.1 優點
- 格式靈活(Key-Value、文檔、圖片等)
- 速度快(基于內存存儲)
- 高擴展性
- 成本低(開源,部署簡單)
1.5.2 缺點
- 不支持 SQL
- 缺少事務處理
- 復雜查詢支持不足
- 大部分數據在內存,成本較高
1.5.3 Redis 與 Memcached 對比
- 相同點:都存儲熱點數據,內存運行,速度快。
- 不同點:Redis 支持持久化,數據可落盤;Memcached 純內存,斷電丟失。
1.6 關系型 vs 非關系型數據庫對比
特點 | 關系型數據庫 | 非關系型數據庫 |
---|---|---|
數據結構 | 表(二維表) | KV、文檔、列式、圖形 |
優點 | 結構清晰,SQL通用,支持復雜查詢 | 格式靈活,速度快,高并發 |
缺點 | 表結構固定,I/O 瓶頸 | 無SQL、事務差、復雜查詢弱 |
代表產品 | MySQL、Oracle、PostgreSQL | Redis、MongoDB、HBase |
1.7 小結
- 當前企業的主流數據庫系統:關系型(MySQL/Oracle/SQL Server)+ 非關系型(Redis/MongoDB)。
- DBMS 的作用:橋梁,負責接收請求、轉化指令、執行數據庫操作并返回結果。
- 選型思路:
- 數據關系清晰、結構化 → 關系型數據庫
- 高并發、非結構化、大數據分析 → 非關系型數據庫
- 實際應用常常 SQL + NoSQL 混合使用(如:Redis 緩存 + MySQL 持久化)。
二、數據庫安裝
2.1 環境準備
安裝編譯工具和依賴:
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
創建 MySQL 專用用戶:
useradd -s /sbin/nologin mysql
2.2 源碼解壓與依賴
tar zxvf mysql-5.7.17.tar.gz -C /opt
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
mv /usr/local/boost_1_59_0 /usr/local/boost
2.2.1 Boost 是什么?
Boost 是一個龐大且高質量的、可移植的 C++ 源程序庫。它被稱為 “C++ 的標準預備庫”,因為很多 Boost 庫中的組件后來都被吸收到了 C++ 的國際標準中(如 C++11, C++14, 等)。它提供了大量在標準 C++ 庫中尚未包含的、但極其有用的功能和工具,例如智能指針、正則表達式、線程、文件系統操作等。
2.2.2 為什么編譯 MySQL 需要 Boost?
MySQL 的源代碼(尤其是新版本,如 5.7+)的某些部分直接使用了 Boost 庫中的特定組件來實現其功能。
具體來說,MySQL 在以下方面可能用到 Boost:
- 智能指針(Smart Pointers):如
scoped_ptr
,shared_ptr
。這些可以幫助安全、自動地管理內存,避免內存泄漏,提升代碼的健壯性。 - 模板元編程(Template Metaprogramming):Boost 提供了大量用于編譯期計算和代碼生成的模板工具,可以幫助構建更靈活、更高效的代碼結構。
- 其他工具:如 Boost.Geometry 用于處理地理空間數據(GIS),這對于 MySQL 的地理空間數據類型和函數支持可能很重要。
因此,在編譯 MySQL 時,編譯器必須能夠找到 Boost 庫的頭文件(Header Files),以便能夠正確地編譯那些使用了 Boost 代碼的 MySQL 源文件。
2.2.3 編譯時與 Boost 的交互方式
在運行 cmake
命令配置 MySQL 編譯環境時,你可以通過 -DWITH_BOOST=
參數來指定 Boost 的位置。
cmake . -DWITH_BOOST=/usr/local/boost
這時會發生以下情況:
- 檢查:CMake 會檢查你指定的目錄(或系統默認路徑)是否存在所需的 Boost 庫。
- 使用:如果找到了,編譯過程就會使用該路徑下的 Boost 頭文件。
- 下載:這是一個非常關鍵的點:如果你沒有指定
-DWITH_BOOST
參數,或者指定的路徑沒有找到 Boost,CMake 配置腳本會自動從互聯網下載它所需版本的 Boost 源代碼包,并將其解壓到 MySQL 源碼目錄下的boost/
子目錄中,然后使用這個本地副本進行編譯。
所以,你手動安裝 Boost 的主要目的就是為了避免在編譯過程中臨時下載。 因為自動下載可能會遇到網絡問題(速度慢、連接失敗),導致編譯配置中斷。預先安裝好 Boost 可以使編譯過程更順暢、更可控。
2.3、CMake 編譯配置
進入源碼目錄:
cd /opt/mysql-5.7.17/
執行 cmake(關鍵參數):
cmake \
#指定mysql安裝路徑,必要
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
#指定mysql進程監聽套接字文件(數據庫文件)的存儲路徑,必要
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
#指定配置文件的路徑,必要
-DSYSCONFDIR=/etc \
#指定mysql的pid文件位置,必要
-DSYSTEMD_PID_DIR=/usr/local/mysql \
#指定默認使用的字符集
-DDEFAULT_CHARSET=utf8 \
#指定默認使用的字符集校對規則
-DDEFAULT_COLLATION=utf8_general_ci \
#指定支持其他字符編碼
-DWITH_EXTRA_CHARSETS=all \
#安裝INNOBASE存儲引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
#安裝ARCHIVE存儲引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
#安裝BLACKHOLE存儲引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#安裝FEDERATED存儲引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
#指定數據庫文件存儲路徑,超核心,必要
-DMYSQL_DATADIR=/usr/local/mysql/data \
#指定boost路徑,當使用集成包安裝時直接使用-DWTH_BOOST=boost
-DWITH_BOOST=/usr/local/boost \
#生成便于systemd管理的文件
-DWITH_SYSTEMD=1
存儲引擎選項:
MYISAM,MERGE,MEMORY和cSv引擎是默認編譯到服務器中,并不需要明確地安裝。靜態編譯一個存儲引擎到服務器,使用-DWITH engine STORAGE ENGINE= 1
可用的存儲引擎值有:ARCHIVE,BLACKHOLE,EXAMPLE,FBDERATBD,IMNOBASB(InnoDB),PARTTTON(partitioning support),和PERFSCHEMA(Performance schema)
編譯安裝:
make -j 4 && make install
注意:如果 CMake 出錯,解決后需刪除
CMakeCache.txt
再重新執行。
2.4 配置 MySQL
2.4.1 權限管理
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
2.4.2 修改配置文件 /etc/my.cnf
#客戶端配置
[client]
#客戶端連接mysql的端口,默認為3306
port = 3306
#客戶端通過unix socket文件連接mysql(Linux/Unix環境)
socket=/usr/local/mysql/mysql.sock
#默認字符集,utf-8
default-character-set=utf8#服務端配置
[mysqld]
#mysql以用戶mysql的身份運行
user = mysql
#mysql的安裝路徑
basedir=/usr/local/mysql
#mysql數據庫的數據文件存放位置
datadir=/usr/local/mysql/data
#服務監聽端口
port = 3306
#mysql默認字符集
character-set-server=utf8
#mysql存放PID的位置
pid-file = /usr/local/mysql/mysqld.pid
#mysql服務端socket套接字位置
socket=/usr/local/mysql/mysql.sock
#允許任意IP連接到數據庫(0.0.0.0表示監聽所有網卡)
bind-address = 0.0.0.0
#關閉DNS解析,使用IP地址驗證用戶,提高連接速度
skip-name-resolve
#數據庫最大連接數,當到達最大連接數時,數據庫會報錯
max_connections=2048
#默認引擎為innodb
default-storage-engine=INNODB
#最大允許傳輸的數據包大小
max_allowed_packet=16M
#mysql的id,唯一,常用于主從復制
server-id = 1
#設置SQL模式,控制SQL語法和數據校驗規則,如 嚴格模式、禁止零日期、ANSI引號模式等,僅在需求時進行額外配置
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES#客戶端工具配置
[mysql]
#客戶端連接端口
port = 3306
#客戶端默認字符集
default-character-set=utf8
#使用Unix socket文件連接
socket=/usr/local/mysql/mysql.sock
#開啟自動補全
auto-rehash
2.5 環境變量設置
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
2.6 數據庫初始化
cd /usr/local/mysql/bin/
# ?mysql服務器的主程序
./mysqld \
#指定以無密碼初始化
--initialize-insecure \
#指定用戶為mysql
--user=mysql \
#指定mysql安裝路徑
--basedir=/usr/local/mysql \
#指定mysql的數據文件位置
--datadir=/usr/local/mysql/data
2.7 服務管理
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
netstat -anpt | grep 3306
2.8 賬號密碼管理
設置 root 密碼:
mysqladmin -u root -p password "123456"
登錄 MySQL:
mysql -u root -p123456
三、MySQL 數據庫管理
3.1 數據庫基本操作
3.1.1 查看數據庫信息
SHOW DATABASES;
3.1.2 切換數據庫
USE 數據庫名;
3.1.3 查看數據庫中的表
SHOW TABLES;
SHOW TABLES IN 數據庫名;
3.1.4 查看表結構
DESCRIBE 表名;
3.2 常用數據類型
類型 | 說明 | 示例 |
---|---|---|
INT | 整型,存儲整數 | id INT |
FLOAT | 單精度浮點,4 字節,可表示小數 | score FLOAT |
DOUBLE | 雙精度浮點,8 字節 | price DOUBLE |
CHAR(n) | 固定長度字符類型,長度 n,不夠補空格 | name CHAR(10) |
VARCHAR(n) | 可變長度字符類型,最大 n 個字符 | address VARCHAR(50) |
TEXT | 文本類型 | description TEXT |
IMAGE | 圖片類型 | photo IMAGE |
DECIMAL(p,s) | 精確數值類型,p=總長度,s=小數位 | salary DECIMAL(5,2) |
3.3 數據庫文件存儲結構
- MySQL 數據目錄:
/usr/local/mysql/data
- 每個數據庫對應一個子目錄,每個表對應若干文件:
- MyISAM:
.frm
(表結構)、.MYD
(數據)、.MYI
(索引) - InnoDB:
- 獨享表空間:
.ibd
文件(每表一個文件) - 共享表空間:
ibdata
文件(多個表共用)
- 獨享表空間:
- MyISAM:
3.4 SQL 語句分類
分類 | 功能 | 常用語句 |
---|---|---|
DDL(數據定義語言) | 創建/修改/刪除數據庫對象 | CREATE, DROP, ALTER |
DML(數據操縱語言) | 增刪改表數據 | INSERT, UPDATE, DELETE |
DQL(數據查詢語言) | 查詢數據 | SELECT |
DCL(數據控制語言) | 用戶權限管理 | GRANT, REVOKE, COMMIT, ROLLBACK |
3.5 DDL 操作(數據庫和表管理)
3.5.1 創建數據庫
CREATE DATABASE 數據庫名;
3.5.2 創建數據表
CREATE TABLE 表名 (字段1 數據類型 [約束條件],字段2 數據類型 [約束條件],...PRIMARY KEY (主鍵字段)
);
示例:
CREATE DATABASE test;
USE test;
CREATE TABLE class (id INT NOT NULL,name CHAR(10) NOT NULL,score DECIMAL(5,2),passwd CHAR(48) DEFAULT '',PRIMARY KEY (id)
);
DESC test;
3.5.3 刪除表
DROP TABLE 表名;
DROP TABLE 數據庫名.表名;
3.5.4 刪除數據庫
DROP DATABASE 數據庫名;
3.5.5 修改表結構(ALTER)
-- 修改表名
ALTER TABLE 舊表名 RENAME 新表名;-- 增加字段
ALTER TABLE 表名 ADD 字段名 數據類型 [約束];-- 修改字段
ALTER TABLE 表名 CHANGE 舊列名 新列名 數據類型 [約束];
ALTER TABLE 表名 MODIFY COLUMN 字段名 數據類型 [約束];-- 刪除字段
ALTER TABLE 表名 DROP 字段名;
3.6 DML 操作(表數據管理)
3.6.1 插入數據
INSERT INTO 表名(字段1,字段2,...) VALUES (值1, 值2, ...);
INSERT INTO VALUES (值1, 值2, ...);
示例:
INSERT INTO newclass (id, name, passwd, sex) VALUES (1,'zhangsan',PASSWORD('45612354648'),0);
3.6.2 更新數據
UPDATE 表名 SET 字段1=值1,字段2=值2 WHERE 條件;
示例:
UPDATE newclass SET passwd=PASSWORD('') WHERE name='zhangsan';
3.6.3 刪除數據
DELETE FROM 表名 WHERE 條件;
3.6.4 清空表內數據
DELETE FROM 表名; -- 可回滾,保留自增ID
TRUNCATE TABLE 表名; -- 不可回滾,重置自增ID
DELETE
可帶WHERE
條件,可回滾,速度慢,逐條刪除,保留ID自增的結果TRUNCATE
不可回滾,速度快,ID 自增重置,直接清空
3.6.5 回滾
在MySQL中執行DELETE后無法回滾,這是由MySQL的默認設置和工作機制導致的。
3.6.5.1 回滾失敗的根本原因
-
自動提交模式(Autocommit)
- MySQL默認啟用autocommit模式(
@@autocommit=1
) - 在這種模式下,每個SQL語句都會自動提交,形成一個獨立的事務
- 您的DELETE語句執行后立即自動提交,ROLLBACK時已無事務可回滾
- MySQL默認啟用autocommit模式(
-
存儲引擎問題
- MyISAM引擎不支持事務
- 只有InnoDB等支持事務的引擎才能使用ROLLBACK
3.6.5.2 如何正確使用事務回滾
方法1:顯式開啟事務(推薦)
-- 開始事務
START TRANSACTION; -- 或 BEGIN-- 執行刪除
DELETE FROM newclass WHERE name='zhangsan';-- 檢查影響行數
SELECT ROW_COUNT();-- 如果需要回滾
ROLLBACK;-- 如果確認刪除正確
COMMIT;
方法2:臨時關閉自動提交
-- 關閉自動提交
SET autocommit = 0;-- 執行刪除
DELETE FROM newclass WHERE name='zhangsan';-- 回滾
ROLLBACK;-- 恢復自動提交
SET autocommit = 1;
3.6.5.3 已提交DELETE的數據恢復方案
如果DELETE已經提交,可以嘗試以下方法恢復數據:
1. 使用binlog恢復(需提前開啟binlog)
# 查找刪除操作的時間點和位置
mysqlbinlog --start-datetime="刪除前時間" --stop-datetime="刪除后時間" \/var/lib/mysql/mysql-bin.000123 | grep -A 10 "DELETE FROM newclass"mysqlbinlog --start-datetime="2025-09-12 22:00:00" \--stop-datetime="2025-09-12 22:16:00" \/var/lib/mysql/mysql-bin.000123# 查找到具體位置后,恢復數據,結合日常備份選擇刪除前位置,也可以恢復到某一時間點
mysqlbinlog --start-position=刪除前位置 --stop-position=刪除后位置 \/var/lib/mysql/mysql-bin.000123 | mysql -u root -p
mysqlbinlog --start-position=刪除前位置 --stop-position=刪除后位置 \/var/lib/mysql/mysql-bin.000123 | mysql -u root -p
企業中一般會開啟binlog其目的是:數據恢復、主從復制和數據審計,而不是單純為了數據被誤刪除
2. 使用備份恢復
# 從最近的備份恢復單個表
mysql -u root -p dbname < backup_file.sql
3. 使用第三方工具
- MySQL Enterprise Backup
- Percona XtraBackup
- mydumper/myloader
3.6.5.4 預防措施
-
重要操作前備份數據
-- 創建臨時備份表 CREATE TABLE newclass_backup_20230501 SELECT * FROM newclass WHERE name='zhangsan';
-
使用事務包裝所有寫操作
START TRANSACTION; -- 執行操作... COMMIT;
-
設置安全刪除習慣
-- 先查詢確認 SELECT * FROM newclass WHERE name='zhangsan';-- 再刪除 DELETE FROM newclass WHERE name='zhangsan';
-
考慮使用軟刪除
ALTER TABLE newclass ADD COLUMN is_deleted TINYINT DEFAULT 0;-- 替代DELETE UPDATE newclass SET is_deleted = 1 WHERE name='zhangsan';
3.6.5.5 檢查當前事務設置
-- 查看自動提交狀態
SELECT @@autocommit;-- 查看當前會話的事務隔離級別
SELECT @@transaction_isolation;-- 查看表使用的存儲引擎
SHOW TABLE STATUS LIKE 'newclass';
記住:在MySQL中,只有顯式開啟事務或關閉autocommit后,ROLLBACK才能生效。生產環境中執行DELETE前務必先備份數據或使用事務!
3.7 DQL 操作(數據查詢)
3.7.1 查詢數據
SELECT 字段1,字段2 FROM 表名 WHERE 條件;
SELECT * FROM 表名;
3.7.2 限制查詢結果
SELECT * FROM 表名 LIMIT 起始行, 查詢條數;
SELECT * FROM 表名 LIMIT 2; -- 顯示前2行
SELECT * FROM 表名 LIMIT 2,3; -- 從第2行開始顯示3行,第一個數從0開始計數
3.7.3 豎向顯示結果
SELECT * FROM 表名\G
3.8 表高級操作
3.8.1 臨時表
臨時表將會在連接斷開時自動刪除。
CREATE TEMPORARY TABLE 表名 (...);
3.8.2 克隆表
-- 僅復制表結構
CREATE TABLE 新表 LIKE 舊表;-- 復制表結構和數據
CREATE TABLE 新表 AS SELECT * FROM 舊表;
3.9 用戶管理
3.9.1 創建用戶
CREATE USER '用戶名'@'來源地址' IDENTIFIED BY '密碼';
3.9.2 查看用戶
USE mysql;
SELECT User, Host, authentication_string FROM user;
3.9.3 刪除用戶
DROP USER '用戶名'@'來源地址';
3.9.4 修改密碼
SET PASSWORD = PASSWORD('新密碼'); -- 當前用戶
SET PASSWORD FOR '用戶'@'來源地址' = PASSWORD('新密碼'); -- 其他用戶
3.9.5 忘記 root 密碼處理
- 修改
/etc/my.cnf
添加:
[mysqld]
skip-grant-tables
- 重啟 MySQL 服務并直接登錄
- 修改密碼:
UPDATE mysql.user SET AUTHENTICATION_STRING=PASSWORD('新密碼') WHERE user='root';
FLUSH PRIVILEGES;
- 刪除
skip-grant-tables
并重啟 MySQL
3.10 用戶授權管理
3.10.1 授權用戶
GRANT 權限列表 ON 數據庫.表 TO '用戶名'@'來源地址' IDENTIFIED BY '密碼';
在5.7之前或更早的版本可直接使用以下命令創建用戶并賦權:
GRANT SELECT, UPDATE, INSERT ON test.info TO ‘cio’@‘%’ IDENTIFIED BY ‘abc123’;
但這種語法已在8.0被棄用,如果要正確創建需要使用下面的語法:
– 創建用戶(如果不存在)
CREATE USER IF NOT EXISTS ‘cio’@‘%’ IDENTIFIED BY ‘abc123’;
– 授予權限
GRANT SELECT, UPDATE, INSERT ON test.info TO ‘cio’@‘%’;
3.10.2 查看授權
SHOW GRANTS FOR '用戶名'@'來源地址';
3.10.3 撤銷權限
REVOKE 權限列表 ON 數據庫.表 FROM '用戶名'@'來源地址';
REVOKE ALL ON *.* FROM 'lisi'@'%';
3.11 權限說明
權限 | 功能 |
---|---|
SELECT | 查詢數據 |
INSERT | 插入數據 |
UPDATE | 修改數據 |
DELETE | 刪除數據 |
CREATE | 創建表/數據庫 |
DROP | 刪除表/數據庫 |
ALTER | 修改表結構 |
INDEX | 索引操作 |
ALL PRIVILEGES | 所有權限 |
總結
本文圍繞數據庫核心知識展開,明確了數據庫在信息系統中的核心地位,系統梳理了其發展脈絡 —— 從早期層次 / 網狀型數據庫,到主流的關系型數據庫,再到適配高并發場景的非關系型數據庫,并清晰對比了兩類數據庫的結構、優缺點與適用場景(如關系型適合結構化數據與復雜查詢,非關系型適合高并發與非結構化數據)。
在實踐層面,本文詳細給出了數據庫安裝的環境配置、編譯步驟與服務管理方法,并以 MySQL 為例,深入講解了 DDL/DML/DQL/DCL 等 SQL 語句的應用、表結構操作、用戶管理與權限控制等關鍵操作。
實際業務中,關系型數據庫(如 MySQL)與非關系型數據庫(如 Redis)常混合使用,以實現數據持久化與高并發處理的互補。掌握本文中的理論知識與 MySQL 實操技能,是設計高效、穩定數據存儲方案的基礎,也為應對未來數據庫技術(如分布式、云數據庫)的演進提供了核心支撐。