成人免费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

數據庫配置

2022-04-05 13:46:21

日志數據庫系統

2010-06-30 08:46:51

升級SQL Serve

2011-04-13 15:07:30

數據庫系統設計

2011-04-13 15:25:12

數據庫系統設計

2019-03-20 14:44:53

數據庫MySQLExcel

2023-11-08 08:32:16

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

2017-11-08 09:22:36

數據庫NoSQLArangoDB

2011-07-26 14:56:03

數據庫發展

2010-08-30 14:31:43

Cache

2010-07-11 18:42:17

CassandraTwitter

2010-06-13 11:29:51

MySQL數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产天天操 | 日韩免费视频一区二区 | 在线三级电影 | 日韩精品免费 | 在线免费激情视频 | 久久成人国产 | 日韩视频在线免费观看 | 美日韩免费视频 | 在线精品观看 | 亚洲一二三区精品 | 国产一区免费视频 | 久久国产精品一区二区三区 | 久久国产精品视频免费看 | 亚洲视频二区 | hsck成人网| 国产福利一区二区 | 国产精品欧美一区二区 | 欧美日韩精品区 | 中文二区 | 久草热线| 欧美婷婷| 岛国av一区二区三区 | 国产精品18久久久久久久 | 日韩欧美国产成人一区二区 | 99国产精品久久久 | 91极品尤物在线播放国产 | 亚洲精品自拍视频 | 久久午夜视频 | 精品在线观看一区 | 亚洲精品天堂 | 国产精品久久久久久久久久久免费看 | 欧美一区二区三区在线观看 | 亚洲欧美视频一区 | 日本精品视频 | 国产精品视频偷伦精品视频 | 久久国产高清视频 | 欧美成视频 | www.成人.com| 日韩在线观看网站 | 欧美一级片在线播放 | 国产四区 |