<p>計(jì)算列是MySQL中通過(guò)表達(dá)式自動(dòng)計(jì)算值得特殊列,分為虛擬(VIRTUAL)和存儲(chǔ)(STORED)兩種類(lèi)型。1. 虛擬列不占空間,讀取時(shí)動(dòng)態(tài)計(jì)算;2. 存儲(chǔ)列在寫(xiě)入時(shí)計(jì)算并持久化,讀取更快但占用存儲(chǔ)。例如創(chuàng)建訂單表時(shí),total列可定義為price與quantity的乘積:CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT, price DECIMAL(10,2), quantity INT, total DECIMAL(10,2) AS (price quantity) STORED);插入數(shù)據(jù)時(shí)無(wú)需指定total值,系統(tǒng)自動(dòng)計(jì)算。若使用ALTER TABLE orders ADD COLUMN total_virtual DECIMAL(10,2) AS (price quantity) VIRTUAL,則節(jié)省空間適用于索引或展示。計(jì)算列表達(dá)式僅能引用同表其他列,不可用子查詢(xún)或RAND()等函數(shù),支持CONCAT、IF、CASE等運(yùn)算,且可建立索引提升性能,但不能直接INSERT或UPDATE賦值。如用戶(hù)表中full_name AS (CONCAT(first_name, ' ', last_name)) VIRTUAL,查詢(xún)時(shí)自動(dòng)拼接姓名。合理使用計(jì)算列可減輕應(yīng)用邏輯負(fù)擔(dān)、提高一致性,并結(jié)合索引優(yōu)化查詢(xún)效率,需根據(jù)訪(fǎng)問(wèn)頻率與存儲(chǔ)成本選擇VIRTUAL或STORED。</p>
在MySQL中,計(jì)算列(也稱(chēng)為生成列或虛擬列)是一種特殊的列,它的值是基于其他列通過(guò)表達(dá)式自動(dòng)計(jì)算得出的,不需要手動(dòng)插入或更新。從MySQL 5.7版本開(kāi)始支持生成列,適用于需要頻繁使用某些字段計(jì)算結(jié)果的場(chǎng)景,比如價(jià)格合計(jì)、狀態(tài)判斷等。
計(jì)算列的值由一個(gè)表達(dá)式定義,可以是虛擬的(VIRTUAL)或存儲(chǔ)的(STORED):
下面是一個(gè)實(shí)際例子:創(chuàng)建一個(gè)訂單表,包含單價(jià)、數(shù)量和自動(dòng)計(jì)算的總價(jià):
CREATE TABLE orders ( id INT PRIMARY KEY AUTO_INCREMENT, price DECIMAL(10,2), quantity INT, total DECIMAL(10,2) AS (price * quantity) STORED );
在這個(gè)例子中,total 是一個(gè)存儲(chǔ)型計(jì)算列,它的值是 price 和 quantity 的乘積。插入數(shù)據(jù)時(shí),無(wú)需指定 total 的值:
INSERT INTO orders (price, quantity) VALUES (100.00, 3); -- 查詢(xún)結(jié)果中 total 將自動(dòng)為 300.00 SELECT * FROM orders;
如果只是用于查詢(xún)或索引,推薦使用 VIRTUAL 列以節(jié)省存儲(chǔ):
ALTER TABLE orders ADD COLUMN total_virtual DECIMAL(10,2) AS (price * quantity) VIRTUAL;
該列不會(huì)額外占用磁盤(pán)空間,適合用于構(gòu)建索引或展示用途。
舉個(gè)字符串拼接的例子:
CREATE TABLE users ( id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), full_name VARCHAR(100) AS (CONCAT(first_name, ' ', last_name)) VIRTUAL );
查詢(xún)時(shí)可以直接使用 full_name,系統(tǒng)會(huì)自動(dòng)拼接。
基本上就這些。合理使用計(jì)算列能減少應(yīng)用層的邏輯負(fù)擔(dān),提高查詢(xún)一致性,同時(shí)還能配合索引優(yōu)化性能。注意選擇 VIRTUAL 還是 STORED 要根據(jù)訪(fǎng)問(wèn)頻率和存儲(chǔ)成本權(quán)衡。
以上就是mysql數(shù)據(jù)庫(kù)中如何使用計(jì)算列的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)