mysql group by date_format( stat_time, '%Y/%m/%d' ) 优化

32 篇文章 0 订阅

mysql从5.7开始支持Generated Column操作,可以看做继承于目标列,但是可以使用函数进行转换。

Generated Column有两种类型:stored和virtual。

stored即存储实际数据的,而virtual则是在任何BEFORE触发器之后立即读取行时计算列值 ,不占用存储空间。

示例:

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);

 

sidec 即是sidea 和 sideb 的Generated Column,sidec 存储的值为SQRT(sidea * sidea + sideb * sideb)

mysql> SELECT * FROM triangle;

+-------+-------+--------------------+

| sidea | sideb | sidec |

+-------+-------+--------------------+

| 1       |1        | 1.4142135623730951 |

|3        | 4       | 5                                  |

|6        |8        | 10                                |

+-------+-------+--------------------+

 

语法格式:

ALTER TABLE TB_NAME MODIFY col_name data_type [GENERATED ALWAYS] AS (expr) [VIRTUAL | STORED]

VIRTUAL 于 STORED类型之间不能直接转换

但是STORED可以和普通列进行转换

限制:

  • 允许使用文字,确定性内置函数和运算符。

  • 不允许存储函数和用户定义的函数。

  • 不允许存储过程和函数参数。

  • 不允许使用变量(系统变量,用户定义的变量和存储的程序局部变量)。

  • 不允许子查询。

  • 生成的列定义可以引用其他生成的列,但只能引用表定义中较早出现的列。生成的列定义可以引用表中的任何基本(非生成)列,无论其定义是早期还是稍后发生。

  • AUTO_INCREMENT属性不能用于生成的列定义。

  • 一个AUTO_INCREMENT列不能用作在生成的列定义的基柱。

  • 从MySQL 5.7.10开始,如果表达式求值导致截断或向函数提供不正确的输入,则 CREATE TABLE语句将终止并显示错误,并拒绝DDL操作。

  • 对于CREATE TABLE ... SELECT,目标表不保留有关selected-from表中的列是否为生成列的信息。SELECT语句的 一部分无法为目标表中的生成列分配值。

  • 允许按生成的列进行分区

  • 在存储生成列外键约束不能使用 CASCADESET NULL或 SET DEFAULT作为ON UPDATE 参照动作,也不能使用SET NULL 或SET DEFAULT作为ON DELETE参照动作。

  •  

    在存储生成列的基本列外键约束不能使用CASCADE, SET NULLSET DEFAULT 作为ON UPDATEON DELETE 引用操作。

    外键约束不能引用虚拟生成的列。

  •  

    有关InnoDB外键和生成列的限制,请参见 第14.6.1.5节“InnoDB和FOREIGN KEY约束”
  •  

    触发器不能用于 或用于 引用生成的列。 NEW.col_nameOLD.col_name
  • 对于INSERT,, REPLACE和 UPDATE,如果生成的列明确插入,替换或更新,则唯一允许的值为DEFAULT

  •  

    视图中生成的列被视为可更新,因为可以为其分配。但是,如果明确更新此类列,则唯一允许的值为 DEFAULT

     

     

     

     

     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值