首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP 移動互聯網開發筆記:MySQL 資料庫基礎全面回顧

     編輯:MySQL 資料庫相關知識

前言

MySQL 是 PHP 開發最核心的儲存引擎。本文系統整理資料類型選擇、常用操作指令、用戶權限管理、資料庫/表結構操作,作為開發隨查手冊。

一、資料類型精選指南

1. 整數類型

類型儲存有號範圍無號範圍建議用途
TINYINT1B-128~1270~255布爾旗標、極小枚舉、狀態碼
SMALLINT2B-32,768~32,7670~65,535較小計數、年齡、小範圍 ID
MEDIUMINT3B-8,388,608~8,388,6070~16,777,215中等計數、中型表主鍵
INT4B-2.14B~2.14B0~4.29B標準主鍵、外鍵、通用計數
BIGINT8B-9.22E18~9.22E180~1.84E19海量資料主鍵、時間戳毫秒、大計數

最佳實踐:UNSIGNED 非負業務優先;INT UNSIGNED 存 IPv4(配合 INET_ATON/NTOA);避免 INT(11) 誤以為長度限制,括號僅為顯示寬度。

2. 浮點與定點數

類型儲存精度適用場景
FLOAT4B~7 位有效數字科學計算、近似值、座標
DOUBLE8B~15 位有效數字高精度科學計算
DECIMAL(M,D)M+2B精確至 D 位小數金額、價格、比率、任何不可捨入場景

鐵律:涉及金錢務必用 DECIMAL,FLOAT/DOUBLE 二進制表示導致 0.1+0.2≠0.3 等精度問題。

3. 字串類型

類型儲存最大長度特性選擇建議
CHAR(M)M B255 字元定長、右側空格填充固定長度:MD5、UUID、國家代碼、性別
VARCHAR(M)L+1/2B65,535 字元變長、長度前綴不定長文字:名稱、標題、描述、URL
TINYTEXT/TEXTL+1/2B255/65,535 字元不支援 DEFAULT、需前綴索引較長文本:文章、日誌、JSON 片段
MEDIUMTEXTL+3B16,777,215 字元同上長文本
LONGTEXTL+4B4,294,967,295 字元同上超長文本
ENUM1-2B65,535 成員單選、內部存數字固定狀態集:狀態機、優先級(慎用,ALTER 修改貴)
SET1-8B64 成員多選、位元組合標籤、權限位掩碼(慎用,查詢不直觀)

字符集:預設 utf8mb4 支援 Emoji,utf8 僅 3 字節不支援補助平面字符。

4. 日期時間類型

類型儲存格式/範圍特性選擇建議
DATE3B1000-01-01 ~ 9999-12-31純日期生日、紀念日、截止日
TIME3B-838:59:59 ~ 838:59:59純時間/時長營業時間、耗時統計
DATETIME8B1000-01-01 00:00:00 ~ 9999-12-31 23:59:59無時區、靜態建立時間、業務發生時間(精確到秒)
TIMESTAMP4B1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC時區感知、自動初始化/更新優先選擇:修改時間、版本控制、日誌(4B 省空間)
YEAR1B1901 ~ 2155純年份年份欄位

TIMESTAMP 自動屬性(5.6.5+ 可多欄位):

  • DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP:建立與更新自動賦值
  • DEFAULT CURRENT_TIMESTAMP:僅建立自動賦值
  • DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP:僅更新自動賦值

二、MySQL 客戶端核心操作

1. 連線參數速查

mysql -h host -u user -p[password] -P port -D database
# 常用簡寫
mysql -uroot -p123456 -h127.0.0.1 -P3306 -Dmydb
參數長參數說明
-h--host伺服器主機
-u--user用戶名
-p--password密碼(-p 後無空格直接接密碼,或留空提示輸入)
-P--port連接埠(大寫 P)
-D--database預設資料庫
-E--vertical垂直顯示結果(適合寬表)
-H--htmlHTML 表格輸出
-X--xmlXML 輸出
--prompt自訂提示符,如 mysql> → \u@\h [\d]>

2. 退出指令

exit | quit | \q | Ctrl+D

3. 修改密碼(5.7.6+)

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;

4. 資料庫級操作

-- 建立(指定字符集/校對)
CREATE DATABASE [IF NOT EXISTS] db_name 
  DEFAULT CHARACTER SET utf8mb4 
  COLLATE utf8mb4_unicode_ci;

-- 查看建立語句
SHOW CREATE DATABASE db_name;

-- 切換
USE db_name;

-- 刪除(謹慎!)
DROP DATABASE [IF EXISTS] db_name;

-- 列出所有
SHOW DATABASES;

5. 表結構操作

-- 建表範例
CREATE TABLE `user` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `username` VARCHAR(32) NOT NULL UNIQUE,
  `email` VARCHAR(128) NOT NULL,
  `password_hash` CHAR(60) NOT NULL,  -- bcrypt 輸出固定 60 字元
  `status` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 查看結構
DESC `user`;
SHOW CREATE TABLE `user`;

-- 修改表
ALTER TABLE `user` 
  ADD COLUMN `avatar_url` VARCHAR(255) DEFAULT NULL AFTER `email`,
  MODIFY COLUMN `status` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=正常 2=禁用',
  DROP COLUMN `obsolete_col`,
  ADD INDEX `idx_email` (`email`),
  ADD UNIQUE INDEX `uk_username` (`username`);

-- 刪表
DROP TABLE [IF EXISTS] `user`;

三、用戶與權限管理

1. 建立用戶

CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
CREATE USER 'readonly'@'10.0.%.%' IDENTIFIED BY 'ReadOnlyPass!';

2. 授權模板

-- 開發/應用帳號:增刪改查 + 結構變更
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX 
  ON mydb.* TO 'app_user'@'%';

-- 唯讀帳號:報表、備份、分析
GRANT SELECT, SHOW VIEW 
  ON mydb.* TO 'readonly'@'10.0.%.%';

-- 管理員:全權限(含 GRANT OPTION)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

-- 刷新生效
FLUSH PRIVILEGES;

3. 查看權限

SHOW GRANTS FOR 'app_user'@'%';
SHOW GRANTS;  -- 當前用戶

4. 撤銷權限與刪除用戶

REVOKE INSERT, UPDATE ON mydb.* FROM 'app_user'@'%';
DROP USER 'old_user'@'%';

四、常用資訊查詢

-- 版本
SELECT VERSION();

-- 當前資料庫
SELECT DATABASE();

-- 當前用戶
SELECT USER(), CURRENT_USER();

-- 字符集/校對
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

-- 進程列表
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;

-- 引擎狀態
SHOW ENGINE INNODB STATUS;

-- 表狀態
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern'];

五、總結

MySQL 基礎功力決定上層應用穩定度。核心記住:

  1. 類型最小化:滿足業務前提下選最小儲存類型(UNSIGNED、CHAR vs VARCHAR、DECIMAL 精度)。
  2. 字符集統一 utf8mb4:資料庫、表、連線、應用程式全鏈路一致。
  3. TIMESTAMP 優於 DATETIME:省空間、時區安全、自動維護。
  4. 權限最小化:應用帳號僅增刪改查,唯讀帳號僅 SELECT,生產禁用 root 遠程登入。
  5. DDL 合併執行:單次 ALTER TABLE 完成多欄位/索引變更,減少鎖表重建次數。

將此文加入書籤,下次選型、建表、授權時隨查隨用。

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