首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 入門全攻略 (上):核心概念、安裝部署、連接管理、庫表操作、用戶權限體系

     編輯:MySQL 綜合教學

一、數據庫基礎概念

什麼是數據庫?

數據庫 是按數據結構組織、存儲和管理數據的倉庫。六十多年發展歷程,從簡單表格到海量分布式系統,核心價值:持久化存儲 + 高效檢索 + 並發控制 + 數據完整性。

主流數據庫

  • 關係型:MySQL、PostgreSQL、Oracle、SQL Server、MariaDB、SQLite
  • 非關係型:Redis、MongoDB、Cassandra、HBase

本系列聚焦 MySQL/MariaDB。

什麼是 DBMS (數據庫管理系統)?

軟件系統,提供:

  1. 數據存儲引擎 (文件/內存管理)
  2. SQL 解析執行引擎
  3. 並發控制 (鎖、MVCC)
  4. 安全認證授權
  5. 備份恢復、複製、監控

客戶端通過協議 (TCP/IP、Socket) 發送 SQL,Server 執行並返回結果。

二、MySQL 安裝部署

官方下載

https://dev.mysql.com/downloads/mysql/

Windows 安裝

MSI 安裝包一鍵下一步,配置服務名、端口、root 密碼、字符集。參考:Windows 圖文教程

Linux 安裝 (二進制包推薦,見下文生產部署篇)

快速嘗試:

# CentOS/RHEL
yum install -y mariadb-server
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation

# Ubuntu
apt-get update && apt-get install -y mysql-server
systemctl start mysql
mysql_secure_installation

驗證安裝

mysql -uroot -p -e "SELECT VERSION();"
# 或
mysqladmin -uroot -p version

三、連接與基礎交互

3.1 連接參數

mysql -h host -P port -u user -p[password] -D database
# 例
mysql -uroot -p
mysql -h 10.0.0.1 -P 3306 -u dba -p -D test_db

3.2 常見連接錯誤

錯誤原因解決
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'服務未啟動或 socket 路徑不匹配systemctl start mysqld;檢查 my.cnf socket 參數
ERROR 1045 (28000): Access denied for user 'root'@'localhost'密碼錯誤或無權限重置密碼 (見後文)
ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect用戶無該主機授權GRANT ... TO 'user'@'%' ...

3.3 退出連接

QUIT
EXIT
\q
Ctrl+D

四、庫級操作

操作SQL說明
查看所有庫SHOW DATABASES;系統庫:mysql(權限)、information_schema(元數據)、performance_schema(性能)、sys(診斷)
創建庫 (UTF-8)CREATE DATABASE db_name DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;推薦 utf8mb4 支持 Emoji
刪除庫DROP DATABASE db_name;不可逆,慎用
切換庫USE db_name;后續操作默認在該庫
查看當前庫SELECT DATABASE();--

五、表操作與數據類型

5.1 常用數據類型選擇指南

業務場景推薦類型關鍵點
主鍵 IDBIGINT UNSIGNED AUTO_INCREMENT足夠大、無符號、自增
金額/價格DECIMAL(10,2)精確計算,避免浮點誤差
狀態/枚舉TINYINT UNSIGNED 或 ENUM小整數高效,ENUM 限制值域
長文本/JSONTEXT / LONGTEXT / JSON (5.7+)JSON 類型支持索引虛擬列
時間戳DATETIME (應用層時區) / TIMESTAMP (自動更新)DATETIME 範圍更大,無 2038 年問題
短字符串 (定長)CHAR(n)如 MD5、UUID、國家代碼
變長字符串VARCHAR(n)n 為字符數,實際存儲長度+1/2字節

5.2 創建表範例

CREATE TABLE `user_account` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用戶名',
  `password_hash` CHAR(64) NOT NULL DEFAULT '' COMMENT 'SHA256 密碼哈希',
  `email` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '郵箱',
  `balance` DECIMAL(12,2) NOT NULL DEFAULT 0.00 COMMENT '賬戶餘額',
  `status` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1正常 0禁用',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_username` (`username`),
  KEY `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶賬戶表';

5.3 表結構查看與修改

操作SQL
查看表結構DESC tbl_name; / SHOW CREATE TABLE tbl_name\G
查看所有表SHOW TABLES; (需先 USE db)
刪除表DROP TABLE tbl_name;
重命名表ALTER TABLE old_name RENAME new_name;
添加列ALTER TABLE tbl ADD col_name TYPE [COMMENT '...'];
刪除列ALTER TABLE tbl DROP COLUMN col_name;
修改列類型ALTER TABLE tbl MODIFY col_name NEW_TYPE;
重命名列ALTER TABLE tbl CHANGE old_col new_col NEW_TYPE;

六、用戶與權限體系

6.1 用戶標識:用戶名@主機

同一用戶名、不同主機視為不同用戶。主機支持通配符 % (任意)、10.0.0.% (網段)、localhost (本地 Socket)、127.0.0.1 (本地 TCP)。

6.2 用戶生命周期

-- 創建
CREATE USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'StrongPass!23';
-- 刪除
DROP USER 'app_user'@'10.0.0.%';
-- 重命名
RENAME USER 'app_user'@'10.0.0.%' TO 'app_user_v2'@'10.0.0.%';
-- 修改密碼 (5.7+)
ALTER USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'NewStrongPass!23';
-- 或
SET PASSWORD FOR 'app_user'@'10.0.0.%' = 'NewStrongPass!23';
FLUSH PRIVILEGES;

6.3 權限層級 (由高到低)

層級範圍典型授權示例
全局*.*GRANT ALL PRIVILEGES ON *.* TO 'dba'@'10.0.0.%' WITH GRANT OPTION;
庫級db.*GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'app_user'@'10.0.0.%';
表級db.tblGRANT SELECT (id, name) ON app_db.users TO 'report_user'@'10.0.0.%';
列級db.tbl(col)同上,列級權限
程序級PROCEDURE/FUNCTIONGRANT EXECUTE ON PROCEDURE app_db.sp_x TO 'app_user'@'10.0.0.%';

6.4 權限撤銷與刷新

REVOKE SELECT ON app_db.* FROM 'app_user'@'10.0.0.%';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'10.0.0.%';
FLUSH PRIVILEGES;  -- 必須執行使修改生效

6.5 權限檢查邏輯

  1. 連接階段:匹配 user@host,驗證密碼/插件
  2. 請求階段:按 全局 → 庫 → 表 → 列 → 程序 疊加檢查,任一層級滿足即通過
  3. Root 用戶、複制用戶、擁有 SUPER 權限的用戶不受 read_only 限制

七、總結與下一步

本文建立了 MySQL 從概念認知 → 安裝驗證 → 連接交互 → 庫表構建 → 用戶授權的完整入門知識鏈。關鍵落地動作:

  1. 在測試機完成一次全流程安裝 (二進制包 + 安全初始化)
  2. 設計一張業務表 (含主鍵、唯一索引、外鍵、時間戳、軟刪除)
  3. 創建應用賬號,授予最小權限集 (僅所需表的 SELECT/INSERT/UPDATE)
  4. 嘗試連接池配置 (HikariCP/Druid) 連接驗證

下篇將進階講解:視圖、存儲過程、函數、事務、觸發器、動態 SQL、索引原理與優化、備份恢復策略、主從複制拓撲。敬請期待!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved