虚拟列构建纪要

目录

背景 (纪要背景)

问题 (要解决的问题)

说明 (问题对应的说明及补充)

Demo(用例)


背景

        : sql处理过程中,特此纪要!

问题

        1. 什么是数据库虚拟列?
        2. generated always的作用是什么? 
        3. 虚拟列如何构建?

特性

    虚拟列是数据辅助查询的一种手段, 主要用来提升数据查询的效率.
    构建:

# 构建语法:
col_name data_type [GENERATED ALWAYS] AS (expr)
  [VIRTUAL | STORED] [NOT NULL | NULL]
  [UNIQUE [KEY]] [[PRIMARY] KEY]
  [COMMENT 'string']

Demo(用例)

# 下面创建一个根据side两个直角边自动计算斜边的triangle表.
# sidec列的初始创建使用了"AS()"关键字来构建虚拟列,使用SQRT()计算两边的平方根.
CREATE TABLE triangle (
  sidea DOUBLE,
  sideb DOUBLE,
  sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb))
);
INSERT INTO triangle (sidea, sideb) VALUES(1,1),(3,4),(6,8);
-- create table
# 下面创建一个测试表t4, 用两种(简易,专有)语法构建对应的虚拟列
CREATE TABLE t4(
	id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
	target CHAR(4)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

-- insert data
INSERT INTO t4(id, target) VALUES(1, '中铁'), (NULL, '四局'), (NULL, '七分局'), (NULL, '704');

-- 1> 构建虚拟列
ALTER TABLE t4 ADD COLUMN target_change CHAR(4) generated always AS (LEFT(target, 1));

-- insert data(数据插入测试-虚拟列不能修改处理数据)
INSERT INTO t4(id, target) VALUES(NULL, '黑求黑求'), (NULL, 'pool'), (NULL, 'lay'), (NULL, 'huuk');

-- delete data all 
TRUNCATE TABLE t4;

# drop column
ALTER TABLE t4 DROP COLUMN target_change;

-- 2> 构建虚拟列
ALTER TABLE t4 ADD COLUMN target_change CHAR(4) AS (LEFT(target, 1));

-- insert data
INSERT INTO t4(id, target) VALUES(NULL, '黑求黑求'), (NULL, 'pool'), (NULL, 'lay'), (NULL, 'huuk');

-- 虚拟列数值插入校验(插入失败,虚拟列的数据不能主动插入,只能自动计算)
INSERT INTO t4(id, target, target_change) VALUES(1, '中铁', '中');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值