亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

mysql數(shù)據(jù)庫(kù)中如何使用計(jì)算列

P粉602998670
發(fā)布: 2025-10-16 15:53:01
原創(chuàng)
732人瀏覽過(guò)
<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數(shù)據(jù)庫(kù)中如何使用計(jì)算列

在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ì)算列

計(jì)算列的值由一個(gè)表達(dá)式定義,可以是虛擬的(VIRTUAL)存儲(chǔ)的(STORED)

  • 虛擬列(VIRTUAL):不占用磁盤(pán)空間,每次讀取時(shí)動(dòng)態(tài)計(jì)算。
  • 存儲(chǔ)列(STORED):值在寫(xiě)入時(shí)計(jì)算并持久化保存,占用存儲(chǔ)空間,但讀取更快。

創(chuàng)建帶有計(jì)算列的表

下面是一個(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
);
登錄后復(fù)制

在這個(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;
登錄后復(fù)制

使用虛擬計(jì)算列節(jié)省空間

如果只是用于查詢(xún)或索引,推薦使用 VIRTUAL 列以節(jié)省存儲(chǔ):

序列猴子開(kāi)放平臺(tái)
序列猴子開(kāi)放平臺(tái)

具有長(zhǎng)序列、多模態(tài)、單模型、大數(shù)據(jù)等特點(diǎn)的超大規(guī)模語(yǔ)言模型

序列猴子開(kāi)放平臺(tái)0
查看詳情 序列猴子開(kāi)放平臺(tái)
ALTER TABLE orders ADD COLUMN total_virtual DECIMAL(10,2) 
  AS (price * quantity) VIRTUAL;
登錄后復(fù)制

該列不會(huì)額外占用磁盤(pán)空間,適合用于構(gòu)建索引或展示用途。

計(jì)算列的使用限制和注意事項(xiàng)

  • 表達(dá)式只能引用同一行中的其他列,不能使用子查詢(xún)或隨機(jī)函數(shù)(如 RAND())。
  • 支持大多數(shù)數(shù)值、字符串和日期運(yùn)算,例如 CONCAT、IF、CASE 等。
  • 可以在計(jì)算列上創(chuàng)建索引(尤其是 VIRTUAL + INDEX 非常有用)。
  • 計(jì)算列本身不能被 UPDATE 或 INSERT 直接賦值。

舉個(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
);
登錄后復(fù)制

查詢(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)文章!

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來(lái)源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問(wèn)題
開(kāi)源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見(jiàn)反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線(xiàn)php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)