MySQL 如何使用内建函数在 MySQL 中存储 GENERATED COLUMNS?
在MySQL 5.7.5及更高版本中,可以使用GENERATED COLUMNS功能来方便地创建虚拟列。GENERATED COLUMNS是通过计算一个或多个现有列的值来生成其值的。它们可以用于存储计算需要使用的数据或提高查询性能。
例如,我们可以使用以下函数和表来演示如何使用内置函数,将计算后得出的值存储在GENERATED COLUMNS中。
CREATE TABLE sales (
sales_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(50) NOT NULL,
product_price DECIMAL(10, 2) NOT NULL,
quantity INT NOT NULL,
order_date DATE NOT NULL,
total_price DECIMAL(10, 2) GENERATED ALWAYS AS (product_price*quantity) STORED
);
在上面的表中,我们使用了两个内置函数:DECIMAL()和GENERATED ALWAYS,其中:
- DECIMAL(): 用于将计算后得到的total_price的值约束为DECIMAL数据类型以保留小数点。
- GENERATED ALWAYS:指定为GENERATED COLUMN后,后面接着一个参数表达式(一个列或表达式),GENERATED默认为VIRTUAL列,也可以用STORED强制约束为PERSISTENT列(存在表中)。
在上面的定义中,total_price列只能包含计算的值,它的值将从product_price和quantity列中自动生成,并且会在存储表行时即时计算。如果更改任何其中一列的值,总价格都将自动生成和更新。
现在,我们可以使用INSERT语句插入新的销售记录,并指定product_price和quantity:
INSERT INTO sales (product_name, product_price, quantity, order_date)
VALUES ("Fruits", 3.20, 10, "2021-12-10");
然后,我们可以使用SELECT语句来查看新记录及其计算的total_price值:
SELECT * FROM sales;
结果如下:
sales_id | product_name | product_price | quantity | order_date | total_price |
---|---|---|---|---|---|
1 | Fruits | 3.20 | 10 | 2021-12-10 | 32.00 |
可以看到,以前插入的记录的total_price值已由MySQL内置函数计算并存储。
我们还可以使用ALTER TABLE语句来添加其他GENERATED COLUMNS(虚拟列),例如:
ALTER TABLE sales
ADD COLUMN tax DECIMAL(10,2) GENERATED ALWAYS AS (total_price * 0.1) STORED;
在上面的ALTER TABLE语句中,我们定义了一个新的tax列,它将自动计算total_price的10%。添加列时,如果该表已经存在值,则MySQL会自动计算总数,并更新所有现有行。然后,我们可以查询使用SELECT语句来查看他们:
SELECT * FROM sales;
结果如下:
sales_id | product_name | product_price | quantity | order_date | total_price | tax |
---|---|---|---|---|---|---|
1 | Fruits | 3.20 | 10 | 2021-12-10 | 32.00 | 3.20 |
我们还可以使用CREATE TABLE语句的其他功能来定义表的其他方面,例如使用UNIQUE索引或FOREIGN KEY约束。
阅读更多:MySQL 教程
结论
使用内置函数在MySQL中存储GENERATED COLUMNS可以方便地创建虚拟列。使用GENERATED COLUMNS可以存储计算需要使用的数据或提高查询性能,从而极大地简化开发任务并提高效率。同时,通过ALTER TABLE语句,我们可以轻松地向表中添加新的虚拟列,这为我们动态和连续的存储多个字段提供了便捷。