数据库端
类型: STORED
仅
工作原理
能力
- 通过预计算复杂表达式简化数据访问。
- 通过生成列的索引支持增强查询性能。
限制
- 不能指定默认值。
- 表达式不能引用其他生成列或包含子查询。
- 修改生成列表达式需要更改架构。
- 不能直接用于主键、外键或唯一约束。
欲了解更多信息,请查看 PostgreSQL 文档。
Drizzle 端
在 Drizzle 中,您可以在任何列类型上指定 .generatedAlwaysAs()
函数,
并添加一个支持的 SQL 查询,这将生成此列数据。
特性
此函数可以以三种方式接受生成表达式:
string
sql
标签 - 如果您希望 Drizzle 为您转义一些值
callback
- 如果您需要引用表中的列
示例 生成列与全文搜索
数据库端
类型: STORED
, VIRTUAL
工作原理
- 通过表架构中的表达式定义。
- 虚拟列在读取操作时计算。
- 存储列在写入操作时计算并存储。
能力
- 可用于 SELECT、INSERT、UPDATE 和 DELETE 语句。
- 可以被索引,包括虚拟和存储列。
- 可以指定 NOT NULL 和其他约束。
限制
欲了解更多信息,请查看 MySQL Alter Generated 文档和 MySQL create generated 文档。
Drizzle 端
特性
string
sql
标签 - 如果您希望 Drizzle 为您转义一些值
callback
- 如果您需要引用表中的列
限制
Drizzle Kit 也将在 push
命令中有限制:
- 您不能使用
push
更改生成约束表达式和类型。Drizzle-kit 会忽略此更改。要使其工作,您需要先 drop
列,push
,然后 add
带有新表达式的列。这是由于数据库端复杂的映射,其中架构表达式将在数据库端被修改,而在反向工程时,我们将得到不同的字符串。我们无法确定您是更改了此表达式,还是它被数据库更改和格式化。由于这些是生成列且 push
通常用于本地数据库的原型,drop
和 create
生成列应该是快速的。由于这些列是 generated
,所有数据将会被恢复。
generate
应该没有限制。
数据库端
类型: STORED
, VIRTUAL
工作原理
- 通过表架构中的表达式定义。
- 虚拟列在读取操作时计算。
- 存储列在写入操作时计算并存储。
能力
- 可用于 SELECT、INSERT、UPDATE 和 DELETE 语句。
- 可以被索引,包括虚拟和存储列。
- 可以指定 NOT NULL 和其他约束。
限制
欲了解更多信息,请查看 SQLite 文档。
Drizzle 端
特性
string
sql
标签 - 如果您希望 Drizzle 为您转义一些值
callback
- 如果您需要引用表中的列
限制
Drizzle Kit 也将在 push
和 generate
命令中有限制:
- 您不能使用存储类型更改现有表中的生成约束表达式。您需要删除此表并重新创建。这是由于 SQLite 对此类操作的限制。我们将在未来的版本中处理此情况(这将涉及创建一个新表并进行数据迁移)。
- 您不能将
stored
生成表达式添加到现有列中,由于以上原因。但是,您可以向现有列添加 virtual
表达式。
- 您不能更改现有列中的
stored
生成表达式,由于以上原因。但是,您可以更改 virtual
表达式。
- 您不能将生成约束类型从
virtual
更改为 stored
,由于以上原因。但是,您可以从 stored
更改为 virtual
。