數據庫(一)數據庫基礎及MySql 5.7+的編譯安裝

文章目錄

  • 前言
  • 一、數據庫概述
    • 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. 數據定義(數據結構、存儲結構、保密模式)
    3. 數據操作(查詢、統計、更新)
    4. 運行管理(并發控制、存取控制、維護)
    5. 通信(與其他軟件交互)

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 優點

  1. 格式靈活(Key-Value、文檔、圖片等)
  2. 速度快(基于內存存儲)
  3. 高擴展性
  4. 成本低(開源,部署簡單)

1.5.2 缺點

  1. 不支持 SQL
  2. 缺少事務處理
  3. 復雜查詢支持不足
  4. 大部分數據在內存,成本較高

1.5.3 Redis 與 Memcached 對比

  • 相同點:都存儲熱點數據,內存運行,速度快。
  • 不同點:Redis 支持持久化,數據可落盤;Memcached 純內存,斷電丟失。

1.6 關系型 vs 非關系型數據庫對比

特點關系型數據庫非關系型數據庫
數據結構表(二維表)KV、文檔、列式、圖形
優點結構清晰,SQL通用,支持復雜查詢格式靈活,速度快,高并發
缺點表結構固定,I/O 瓶頸無SQL、事務差、復雜查詢弱
代表產品MySQL、Oracle、PostgreSQLRedis、MongoDB、HBase

1.7 小結

  1. 當前企業的主流數據庫系統:關系型(MySQL/Oracle/SQL Server)+ 非關系型(Redis/MongoDB)。
  2. DBMS 的作用:橋梁,負責接收請求、轉化指令、執行數據庫操作并返回結果。
  3. 選型思路:
    • 數據關系清晰、結構化 → 關系型數據庫
    • 高并發、非結構化、大數據分析 → 非關系型數據庫
    • 實際應用常常 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

這時會發生以下情況:

  1. 檢查:CMake 會檢查你指定的目錄(或系統默認路徑)是否存在所需的 Boost 庫。
  2. 使用:如果找到了,編譯過程就會使用該路徑下的 Boost 頭文件。
  3. 下載這是一個非常關鍵的點:如果你沒有指定 -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 文件(多個表共用)

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 回滾失敗的根本原因
  1. 自動提交模式(Autocommit)

    • MySQL默認啟用autocommit模式(@@autocommit=1
    • 在這種模式下,每個SQL語句都會自動提交,形成一個獨立的事務
    • 您的DELETE語句執行后立即自動提交,ROLLBACK時已無事務可回滾
  2. 存儲引擎問題

    • 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 預防措施
  1. 重要操作前備份數據

    -- 創建臨時備份表
    CREATE TABLE newclass_backup_20230501 SELECT * FROM newclass WHERE name='zhangsan';
    
  2. 使用事務包裝所有寫操作

    START TRANSACTION;
    -- 執行操作...
    COMMIT;
    
  3. 設置安全刪除習慣

    -- 先查詢確認
    SELECT * FROM newclass WHERE name='zhangsan';-- 再刪除
    DELETE FROM newclass WHERE name='zhangsan';
    
  4. 考慮使用軟刪除

    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 密碼處理

  1. 修改 /etc/my.cnf 添加:
[mysqld]
skip-grant-tables
  1. 重啟 MySQL 服務并直接登錄
  2. 修改密碼:
UPDATE mysql.user SET AUTHENTICATION_STRING=PASSWORD('新密碼') WHERE user='root';
FLUSH PRIVILEGES;
  1. 刪除 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 實操技能,是設計高效、穩定數據存儲方案的基礎,也為應對未來數據庫技術(如分布式、云數據庫)的演進提供了核心支撐。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/99050.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/99050.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/99050.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Elasticsearch HTTPS訪問錯誤解決指南

文章目錄&#x1f50d; 原因分析? 正確的訪問方式&#xff1a;使用 curl -k https://...&#x1f510; 你需要知道 elastic 用戶的密碼方法 1&#xff1a;查看首次生成的密碼&#xff08;如果剛安裝&#xff09;方法 2&#xff1a;重置密碼? 成功示例&#x1f389; 總結&…

Neural ODE原理與PyTorch實現:深度學習模型的自適應深度調節

對于神經網絡來說&#xff0c;我們已經習慣了層狀網絡的思維&#xff1a;數據進來&#xff0c;經過第一層&#xff0c;然后第二層&#xff0c;第三層&#xff0c;最后輸出結果。這個過程很像流水線&#xff0c;每一步都是離散的。 但是現實世界的變化是連續的&#xff0c;比如…

Elasticsearch面試精講 Day 16:索引性能優化策略

【Elasticsearch面試精講 Day 16】索引性能優化策略 在“Elasticsearch面試精講”系列的第16天&#xff0c;我們將深入探討索引性能優化策略。這是Elasticsearch高頻面試考點之一&#xff0c;尤其在涉及高并發寫入、海量日志處理或實時數據分析場景時&#xff0c;面試官常通過…

ESP32-C3 入門09:基于 ESP-IDF + LVGL + ST7789 的 1.54寸 WiFi 時鐘(SquareLine Studio 移植)

一. https://github.com/nopnop2002/esp-idf-st7789 1. 前言 2. 開發環境準備 2.1 硬件清單 ESP32-C3 開發板ST7789 1.54 寸 LCD其他輔助元件&#xff08;杜邦線、電源&#xff09; 2.2 軟件安裝 ESP-IDF 環境安裝&#xff08;WindowsVScode&#xff09;VSCode 插件配置LV…

PINN物理信息神經網絡驅動的三維聲波波動方程求解MATLAB代碼

MATLAB 代碼實現了一個基于物理信息神經網絡&#xff08;Physics-Informed Neural Network, PINN&#xff09;的三維波動方程求解器。以下是詳細分析&#xff1a;&#x1f9e0; 一、主要功能&#x1f517; 二、邏輯關聯 代碼結構清晰&#xff0c;分為五個主要部分&#xff1a; …

leetcode33(最小棧)

設計一個支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常數時間內檢索到最小元素的棧。實現 MinStack 類:MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void pop() 刪除堆棧頂部的元素。int top() 獲取堆棧頂部的元素。int getMin(…

TDesign學習:(二)i18n配置與使用

配置 src/locales/lang/en_US/pages 目錄下對應的各個模塊語言的對象

k8s 內置的containerd配置阿里云個人鏡像地址及認證

原因&#xff1a;阿里云倉庫必須使用憑證登錄&#xff0c;不然無法進行鏡像拉取&#xff01;1.生成自己的憑證信息# 格式&#xff1a;阿里云倉庫用戶名:憑證密碼 echo -n myuser:mypass | base64 #生成的加密憑證 bXl1c2VyOm15cGFzcw2.修改containerd的鏡像倉庫配置vi /etc/co…

Python實戰:HTTP接口數據獲取與PostgreSQL存儲系統

項目背景 項目結構 關鍵技術點 1. 靈活的HTTP請求處理 2. 自動表結構生成與字段類型推斷 3. 健壯的數據庫操作與錯誤處理 4. 配置驅動的設計理念 功能實現 1. 數據獲取流程 2. 命令行參數支持 2. 數據處理與字段排除 項目擴展與優化方向 結語 項目背景 在日常開發和數據分析工…

遞歸,搜索與回溯算法

遞歸→搜索→回溯 名詞解釋 遞歸 1.什么是遞歸 形象地說就是函數自己調用自己。 例子&#xff1a; 二叉樹的遍歷-后序遍歷 void dfs(treenode* root) {//細節 - 出口if(root NULL) return;dfs(root->left);dfs(root->right);printf(root->val); }快排 void quickSort…

【OpenAPI】OpenAPI 3.0x 格式解析技術指南

OpenAPI 格式解析技術指南 概述 OpenAPI&#xff08;原名 Swagger&#xff09;是一種用于描述 REST API 的規范格式&#xff0c;它提供了標準化的方式來定義 API 的結構、參數、響應等信息。本文將深入探討如何解析 OpenAPI 文檔&#xff0c;并基于實際項目中的 openapi-pars…

【親測有效】解決 “Batch script contains DOS line breaks (\r\n)” 報錯

【親測有效】解決 “Batch script contains DOS line breaks (\r\n)” 報錯 適用場景&#xff1a;在 Linux/Slurm 集群上 sbatch 提交腳本或運行 Shell 腳本時遇到 “DOS line breaks (\r\n) instead of UNIX line breaks (\n)” 的報錯。 文章目錄【親測有效】解決 “Batch sc…

動態 SQL 標簽對比表

動態 SQL 標簽對比表標簽用途關鍵屬性默認行為<if>條件判斷test條件成立則拼接<where>處理 WHERE無去除 AND/OR 開頭&#xff0c;加 WHERE<set>處理 SET無去除末尾逗號&#xff0c;加 SET<foreach>遍歷集合collection, item, separator無默認&#xff…

征程 6 灰度圖部署鏈路介紹

一、為什么是灰度圖 相較于 RGB 三通道圖像&#xff0c;灰度圖僅保留亮度信息&#xff08;Y 分量&#xff09;&#xff0c;數據量減少 2/3&#xff0c;相比于常用的 NV12 圖像&#xff0c;數據量減少 1/3&#xff0c;內存占用與計算負載顯著降低。對于下游網絡結構而言&#xf…

計算機畢業設計 基于Hadoop的健康飲食推薦系統的設計與實現 Java 大數據畢業設計 Hadoop畢業設計選題【附源碼+文檔報告+安裝調試】

博主介紹&#xff1a;?從事軟件開發10年之余&#xff0c;專注于Java技術領域、Python、大數據、人工智能及數據挖掘、小程序項目開發和Android項目開發等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優質作者? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&…

基于海康SDK的C++實時視頻流逐幀抓取存圖小工具

目錄 效果 項目 使用 代碼 下載 效果 項目 使用 PlayDemo.exe <IP> <Port> <Username> <Password> 代碼 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string> #include <iostream> #include <Windows.…

windows|引用賬戶被鎖定 且暫時無法登錄

問題描述尷了個尬&#xff0c;一直認為筆記本鎖屏密碼記得很牢靠&#xff0c;沒想到因為少敲了一個點&#xff08;.&#xff09;&#xff0c;多次輸入登陸失敗&#xff0c;導致賬戶被鎖定了&#xff0c;提示&#xff1a;引用賬戶被鎖定 且暫時無法登錄。然后用手機搜索了一下&a…

系統核心解析:深入操作系統內部機制——進程管理與控制指南(三)【進程優先級/切換/調度】

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ??????個人…

量子-resistant密碼學研究

當亞馬遜CloudFront在2025年9月宣布為所有TLS連接默認啟用后量子加密支持時&#xff0c;這一舉措標志著抗量子密碼學從學術研究正式邁入大規模實用部署階段。與此同時&#xff0c;密碼學家們發出警告&#xff1a;一臺擁有不到一百萬噪聲量子比特的計算機&#xff0c;可能在一周…

ARM 架構的存儲器模型

ARM 架構的存儲器模型 ARM 的存儲器模型是一個相對復雜但設計精密的體系&#xff0c;它定義了處理器如何與內存進行交互&#xff0c;包括內存訪問的順序、可見性以及緩存行為等。這對于理解多核編程、并發控制和底層系統性能至關重要。 ARM 架構&#xff0c;特別是 ARMv8 及以后…