MySQL 的 GENERATED 特性是用來創建自動生成值的列定義的。這些值可以是整數、浮點數或日期。GENERATED 特性可以定義為存儲虛擬(計算所得)列或存儲為實際物理列。
在創建表時,GENERATED 選項可以用于指定列的自動生成。具體地,可以使用以下兩種不同類型的 GENERATED:
- ALWAYS - 每次插入新行時,都會自動生成列的值;
- BY DEFAULT - 只有在插入新行時未指定列值時才會自動生成列的值。
下面是一個使用 GENERATED ALWAYS AS 表達式的例子:
CREATE TABLE student_data ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), date_of_birth DATE, age INT GENERATED ALWAYS AS (YEAR(CURDATE()) - YEAR(date_of_birth)) STORED );
這個表定義了一個名為 student_data 的表,其中包含 id、name、date_of_birth 和 age 四個列。其中,id 是 PRIMARY KEY,它的值將自動生成。date_of_birth 是必需輸入的值,它將用于計算 age 的值。age 是 GENERATED ALWAYS 列,它的值將自動生成并存儲。這里,我們使用 YEAR 函數計算學生的年齡。
可以通過 INSERT 語句向 student_data 表添加新行,如下所示:
INSERT INTO student_data (name, date_of_birth) VALUES ('Tom', '1999-06-05'); INSERT INTO student_data (name, date_of_birth) VALUES ('Jerry', '2001-03-12');
當添加這些行時,age 將自動計算并存儲到表中:
mysql>SELECT * FROM student_data; +----+-------+---------------+------+ | id | name | date_of_birth | age | +----+-------+---------------+------+ | 1 | Tom | 1999-06-05 | 22 | | 2 | Jerry | 2001-03-12 | 20 | +----+-------+---------------+------+
可以看到,age 列已經自動生成并存儲到表中。