2015-10-07 90 views
1

在SQL服務器中有計算列,我們可以使用這些列來插入某個從另一列值操縱的值。相當於SQL Server的MySQL計算列

在SQL服務器

我們可以寫這樣的..

CREATE TABLE dbo.Products 
(
    ProductID int IDENTITY (1,1) NOT NULL 
    , QtyAvailable smallint 
    , UnitPrice money 
    , InventoryValue AS QtyAvailable * UnitPrice 
); 

但在MySQL我怎麼能執行呢?

+1

的在MySQL [創建表,一個可能的複製包含另外兩列值的總和的列](http://stackoverflow.com/questions/6805498/create-table-in-mysql-with-one-column-containg-sum-of-another-two-columns- value) ...這篇文章討論了CREATE TABLE中的總和,但我希望它對於產品同樣有效。 –

+0

但這個問題沒有我的問題的答案..它說這是不可能的,但我認爲這是可能的 – tarzanbappa

+1

如果帖子是正確的,我認爲它是,你不能在MySQL中有一個計算列與CREATE TABLE'。 –

回答

3

有兩種方法做到這一點

CREATE TABLE table1 (
    ProductID int NOT NULL, 
    QtyAvailable smallint, 
    UnitPrice DECIMAL(10,2) NOT NULL, 
    InventoryValue1 decimal(10,2) AS (QtyAvailable * UnitPrice) VIRTUAL, 
    InventoryValue2 DECIMAL(10,2) AS (QtyAvailable * UnitPrice) PERSISTENT 
); 

持續

是計算出的實際列,您可以在其上創建一個索引

虛擬

每次得到它時計算

(這是適用於MySQL服務器5.7.5版本及以上)

我使用MariaDB的,並與版本開始有5.2

https://mariadb.com/kb/en/mariadb/virtual-computed-columns/

+0

因爲我發現這個選項在MySQL服務器版本5.7.5中可用。這是真的嗎? – tarzanbappa

+0

MariaDB 5.2包含沒有時間進入MariaDB 5.1的功能。出於所有實際的目的,它是MariaDB 5.1(以及MySQL 5.1)的替代品。 –