MySQL - 資料類型

你好啊,有志於數據庫的熱情者們!我很興奮能成為你們在MySQL資料類型世界的導遊。作為一個教了十多年計算機科學的人,我可以向你們保證,理解資料類型就像在寫小說之前學習字母一樣。這是基礎,我敢說,這還挺有趣的!那麼,讓我們深入探討這些數據庫設計的基石吧。

MySQL - Data Types

MySQL 資料類型

在我們深入細節之前,讓我們先來聊聊資料類型是什麼,以及它們為什麼重要。想像一下你正在組織一個巨大的圖書館。你不會把書籍、DVD和雜誌都用同樣的方式上架,對吧?這基本上就是MySQL中的資料類型所做的——它們幫助有效地組織不同類型的信息。

MySQL提供了多種資料類型,每種都設計用來存儲特定類型的數據。使用正確的資料類型對以下三個主要原因至關重要:

  1. 存儲效率
  2. 性能優化
  3. 數據完整性

現在,讓我們探討MySQL資料類型的主要類別。

數值資料類型

啊,數字!計算的骨干。MySQL提供了多種數值資料類型,用於處理從微小的整數到龐大的浮點數的一切。

整數類型

類型 存儲空間(字節) 最小值 最大值
TINYINT 1 -128 127
SMALLINT 2 -32,768 32,767
MEDIUMINT 3 -8,388,608 8,388,607
INT 4 -2,147,483,648 2,147,483,647
BIGINT 8 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

讓我們創建一個表來演示這些:

CREATE TABLE number_examples (
tiny_num TINYINT,
small_num SMALLINT,
medium_num MEDIUMINT,
regular_num INT,
big_num BIGINT
);

現在,讓我們插入一些數據:

INSERT INTO number_examples VALUES (127, 32767, 8388607, 2147483647, 9223372036854775807);

這個插入語句為每個整數類型添加了最大值。如果我們嘗試插入一個更大的數字,MySQL會抛出錯誤。這就像試圖把一頭大象塞進一輛微型車裡——這就是行不通!

浮點數和固定點類型

對於小數,我們有:

類型 精度
FLOAT 單精度
DOUBLE 雙精度
DECIMAL 固定點

這裡有一個例子:

CREATE TABLE price_list (
item_name VARCHAR(50),
float_price FLOAT,
double_price DOUBLE,
decimal_price DECIMAL(10,2)
);

INSERT INTO price_list VALUES
('Widget', 19.99, 19.99, 19.99),
('Gadget', 249.99, 249.99, 249.99);

DECIMAL(10,2)意味著我們可以存儲最多10位數,其中2位是小數點後的。這對於存儲不會四舍五入的貨幣值來說非常完美。

日期和時間資料類型

時間在享受數據庫的樂趣時飛逝!讓我們看看MySQL如何處理時間數據:

類型 格式 存儲空間
DATE YYYY-MM-DD 3 bytes
TIME HH:MM:SS 3 bytes
DATETIME YYYY-MM-DD HH:MM:SS 8 bytes
TIMESTAMP YYYY-MM-DD HH:MM:SS 4 bytes
YEAR YYYY 1 byte

這裡有一個有趣的例子:

CREATE TABLE party_planning (
event_name VARCHAR(50),
event_date DATE,
start_time TIME,
end_time TIME,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO party_planning (event_name, event_date, start_time, end_time)
VALUES ('MySQL Mania', '2023-12-31', '20:00:00', '23:59:59');

這個表可以幫我們計劃最終的新年夜數據庫派對!created_at列會在插入行時自動存儲當前的時間戳。

字符串資料類型

最後但同樣重要的是,讓我們來討論字符串資料類型。這些是任何數據庫的工作馬,處理從名字到冗長文本文件的一切。

類型 最大長度 使用場景
CHAR 255字符 固定長度的字符串
VARCHAR 65,535字符 變長度的字符串
TEXT 65,535字符 長文本
MEDIUMTEXT 16,777,215字符 更長的文本
LONGTEXT 4,294,967,295字符 非常長的文本

讓我們創建一個表來展示這些:

CREATE TABLE book_club (
member_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
favorite_quote CHAR(50),
book_review TEXT,
life_story MEDIUMTEXT
);

INSERT INTO book_club (name, favorite_quote, book_review, life_story)
VALUES (
'Jane Doe',
'To be or not to be',
'This book changed my life! The character development was superb, and the plot twists kept me guessing until the very end.',
'I was born on a warm summer day...'
);

在這個例子中,name使用VARCHAR因為名字的長度會變化。favorite_quote使用CHAR假設所有引用恰好都是50個字符(如果短則填充)。book_review使用TEXT來存儲長內容,而life_story使用MEDIUMTEXT來存儲甚至更長的敘述。

記住,選擇正確的字符串類型可以顯著影響你的數據庫性能和存儲效率。這就像為剩菜挑選合適的容器一樣——太小會溢出,太大則浪費空間!

這就是全部,各位!我們已經在MySQL資料類型的土地上旅行,從最小的TINYINT到廣闊的LONGTEXT。記住,選擇正確的資料類型既是一門科學也是一門藝術。它需要理解你的數據,預測未來的需求,有时還需要一點試錯。

在你繼續你的MySQL冒險時,請持續嘗試不同的資料類型。創建表,插入數據,觀察它的行為。你練習得越多,它就越會變得直觀。而且誰知道呢?你可能會發現自己愛上了精心設計的數據庫模式的優雅簡潔。

快樂編程,願你的查詢總是運行迅速!

Credits: Image by storyset