成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL入門秘籍:構建可靠數據庫系統的實戰指南

數據庫 MySQL
本文基于公司某位同事整理并授權的數據庫規范,結合實際經驗,為你提供一份詳細的MySQL查詢與建表規范指南,并通過正向和反向對比示例加深理解,本文適用于數據庫入門和中級用戶。

在軟件開發過程中,良好的數據庫設計不僅可以提高查詢速度和執行SQL的性能,還能增強MySQL的整體性能和可維護性。本文基于公司某位同事整理并授權的數據庫規范,結合實際經驗,為你提供一份詳細的MySQL查詢與建表規范指南,并通過正向和反向對比示例加深理解,本文適用于數據庫入門和中級用戶。

一、基本規范

1.1 存儲引擎選擇

正向示例

CREATE TABLE users (    id INT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(255) NOT NULL) ENGINE=InnoDB;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL
) ENGINE=InnoDB;

  使用InnoDB存儲引擎支持事務和行級鎖定,確保數據一致性和并發性能。

反向示例

CREATE TABLE users (    id INT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(255) NOT NULL) ENGINE=MyISAM;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL
) ENGINE=MyISAM;

  使用MyISAM存儲引擎不支持事務和行級鎖定,在高并發場景下可能導致數據一致性問題。

1.2 字符集

正向示例

CREATE TABLE users (    id INT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(255) NOT NULL) DEFAULT CHARSET=utf8mb4;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL
) DEFAULT CHARSET=utf8mb4;

  使用UTF8mb4支持廣泛的字符集,包括emoji等特殊字符。

反向示例

CREATE TABLE users (    id INT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(255) NOT NULL) DEFAULT CHARSET=latin1;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL
) DEFAULT CHARSET=latin1;

  使用latin1字符集無法正確存儲和顯示非拉丁字符,可能導致亂碼問題。

1.3 主鍵和自增ID

正向示例

CREATE TABLE users (    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶ID',    username VARCHAR(255) NOT NULL COMMENT '用戶名');

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶ID',
    username VARCHAR(255) NOT NULL COMMENT '用戶名'
);

  每個表都有一個明確的主鍵,便于唯一標識每一行記錄。

反向示例

CREATE TABLE users (    username VARCHAR(255) NOT NULL COMMENT '用戶名');

CREATE TABLE users (
    username VARCHAR(255) NOT NULL COMMENT '用戶名'
);

  沒有主鍵,導致查詢效率低下且難以保證數據一致性。

1.4 大文件存儲

正向示例

存儲圖片或視頻的路徑而不是直接存儲二進制數據:

CREATE TABLE user_media (    id INT AUTO_INCREMENT PRIMARY KEY,    user_id INT NOT NULL,    media_url VARCHAR(255) NOT NULL);

CREATE TABLE user_media (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    media_url VARCHAR(255) NOT NULL
);

反向示例

直接在數據庫中存儲大文件(如圖片):

CREATE TABLE user_media (    id INT AUTO_INCREMENT PRIMARY KEY,    user_id INT NOT NULL,    media BLOB NOT NULL);

CREATE TABLE user_media (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    media BLOB NOT NULL
);

  導致數據庫體積膨脹,影響性能。

二、命名規范

2.1 表名

正向示例

CREATE TABLE d_user_info (    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶ID',    username VARCHAR(255) NOT NULL COMMENT '用戶名') COMMENT='張三-2025.03.17 用戶基本信息表';

CREATE TABLE d_user_info (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶ID',
    username VARCHAR(255) NOT NULL COMMENT '用戶名'
) COMMENT='張三-2025.03.17 用戶基本信息表';

  表名以業務英文名開頭,不超過32個字符,并添加詳細備注。

反向示例

CREATE TABLE userinfo (    id INT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(255) NOT NULL);

CREATE TABLE userinfo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL
);

  表名過于簡單,沒有業務說明,難以維護。

2.2 索引命名

正向示例

CREATE INDEX idx_username ON users (username);CREATE UNIQUE INDEX uniq_email ON users (email);

CREATE INDEX idx_username ON users (username);
CREATE UNIQUE INDEX uniq_email ON users (email);

  索引命名清晰,易于理解和維護。

反向示例

CREATE INDEX index1 ON users (username);CREATE INDEX index2 ON users (email);

CREATE INDEX index1 ON users (username);
CREATE INDEX index2 ON users (email);

  索引命名不規范,難以區分其用途。

三、數據表設計規范

3.1 字段設置

正向示例

CREATE TABLE users (    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶ID',    username VARCHAR(255) NOT NULL DEFAULT '' COMMENT '用戶名');

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶ID',
    username VARCHAR(255) NOT NULL DEFAULT '' COMMENT '用戶名'
);

  字段設置為not null時必須有默認值,避免使用text類型。

反向示例

CREATE TABLE users (    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶ID',    username TEXT COMMENT '用戶名');

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用戶ID',
    username TEXT COMMENT '用戶名'
);

  使用TEXT類型,可能導致查詢效率低下。

3.2 數值類型

正向示例

CREATE TABLE products (    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '產品ID',    price DECIMAL(10, 2) NOT NULL COMMENT '價格');

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '產品ID',
    price DECIMAL(10, 2) NOT NULL COMMENT '價格'
);

  使用DECIMAL存儲浮點數,確保精度。

反向示例

CREATE TABLE products (    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '產品ID',    price FLOAT NOT NULL COMMENT '價格');

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '產品ID',
    price FLOAT NOT NULL COMMENT '價格'
);

  使用FLOAT存儲浮點數,可能導致精度丟失。

四、索引規范

4.1 主鍵

正向示例

CREATE TABLE orders (    order_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '訂單ID',    user_id INT NOT NULL COMMENT '用戶ID');

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '訂單ID',
    user_id INT NOT NULL COMMENT '用戶ID'
);

  使用自增ID作為主鍵,避免使用UUID等離散值。

反向示例

CREATE TABLE orders (    order_id VARCHAR(36) PRIMARY KEY COMMENT '訂單ID',    user_id INT NOT NULL COMMENT '用戶ID');

CREATE TABLE orders (
    order_id VARCHAR(36) PRIMARY KEY COMMENT '訂單ID',
    user_id INT NOT NULL COMMENT '用戶ID'
);

  使用UUID作為主鍵,可能導致索引性能下降。

4.2 復合索引

正向示例

CREATE INDEX idx_name_deleted ON users (name, is_deleted);

CREATE INDEX idx_name_deleted ON users (name, is_deleted);

  根據業務需求創建復合索引,優化查詢效率。

反向示例

CREATE INDEX idx_name ON users (name);CREATE INDEX idx_deleted ON users (is_deleted);

CREATE INDEX idx_name ON users (name);
CREATE INDEX idx_deleted ON users (is_deleted);

  單獨為每個字段創建索引,可能導致冗余和低效。

五、SQL開發規范

5.1 代碼中禁止使用select *

正向示例

SELECT id, username FROM users WHERE id = 1;

SELECT id, username FROM users WHERE id = 1;

  明確指定需要查詢的字段,減少不必要的數據傳輸。

反向示例

SELECT * FROM users WHERE id = 1;

SELECT * FROM users WHERE id = 1;

  使用select *可能導致查詢效率低下和不必要的網絡傳輸。

5.2 標量子查詢

正向示例

SELECT u.id, u.username FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE o.status = 'completed';

SELECT u.id, u.username 
FROM users u 
LEFT JOIN orders o ON u.id = o.user_id 
WHERE o.status = 'completed';

使用外連接代替標量子查詢,提高查詢效率。

反向示例

SELECT u.id, u.username FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE u.id = o.user_id AND o.status = 'completed');

SELECT u.id, u.username 
FROM users u 
WHERE EXISTS (SELECT 1 FROM orders o WHERE u.id = o.user_id AND o.status = 'completed');

  使用標量子查詢可能導致性能瓶頸。

5.3 分頁優化

正向示例

SELECT b.id, b.text FROM (SELECT id FROM test a LIMIT 10000, 10) LEFT JOIN test b ON a.id = b.id;

SELECT b.id, b.text 
FROM (SELECT id FROM test a LIMIT 10000, 10) 
LEFT JOIN test b ON a.id = b.id;

  分頁查詢優化,避免全表掃描。

反向示例

SELECT id, text FROM test LIMIT 10000, 10;

SELECT id, text FROM test LIMIT 10000, 10;

  直接使用LIMIT可能導致性能問題,尤其是在大數據量的情況下。

結語

通過上述內容的介紹,給大家分享了MySQL數據庫設計與管理的最佳實踐。從基本規范、命名規范、數據表設計規范、索引規范到SQL開發規范,每一個環節都至關重要。遵循這些規范不僅能提升查詢速度和執行SQL的性能,還能增強系統的整體穩定性和可維護性。

責任編輯:武曉燕 來源: 小明互聯網技術分享社區
相關推薦

2019-03-01 18:27:09

MySQL安裝數據庫

2009-02-16 09:23:30

數據庫配置

2010-06-30 08:46:51

升級SQL Serve

2022-04-05 13:46:21

日志數據庫系統

2019-03-20 14:44:53

數據庫MySQLExcel

2023-11-08 08:32:16

2011-04-13 15:07:30

數據庫系統設計

2011-04-13 15:25:12

數據庫系統設計

2023-12-20 16:12:37

數據庫復制延遲

2011-02-25 13:49:12

2011-02-28 17:12:20

Oracle數據庫

2011-04-13 15:17:09

數據庫系統設計

2011-06-07 17:01:44

2022-09-06 10:39:38

Docker鏡像構建

2025-04-03 16:02:14

2011-07-26 14:56:03

數據庫發展

2017-11-08 09:22:36

數據庫NoSQLArangoDB

2010-08-30 14:31:43

Cache

2011-05-24 09:45:41

Oracle數據庫系統調優

2010-09-17 20:09:25

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 嫩草研究影院 | 成人精品 | 亚洲综合久久精品 | 韩日精品一区 | 亚洲精品日韩精品 | 精品国产一区久久 | www.99热 | 欧美视频第三页 | 日本一二区视频 | 亚洲高清一区二区三区 | 色婷婷综合成人av | 亚洲精选一区二区 | 国内精品久久久久久久影视简单 | 精品久久久久久久人人人人传媒 | 欧美一区二区三区在线播放 | 成人羞羞国产免费视频 | 国产精品久久久久久一级毛片 | 日韩视频一区二区三区 | 久久久久中文字幕 | 亚洲日本中文字幕在线 | 99re6在线视频 | 欧美a在线 | 日韩中文在线观看 | 99热精品在线 | 国产亚洲精品久久久久久牛牛 | 欧美一区2区三区4区公司 | 亚洲精品一区中文字幕乱码 | 一区二区三区四区在线视频 | www九色 | 久久久久久亚洲精品 | 亚洲va欧美va天堂v国产综合 | 蜜桃av一区二区三区 | 日韩色综合 | 草久久 | 欧美视频一级 | 欧美性猛交一区二区三区精品 | 日韩中文字幕在线播放 | www.日日干| 成人免费在线小视频 | 亚洲欧美日本国产 | 91精品国产乱码久久久久久久 |