Jos*_*ine 6 mariadb terminology mariadb-10.3
我在 MariaDB 10.3.x 中看到了一个新功能Invisible Columns。DBA 和 Web 开发人员的实际用例是什么?什么时候使用这个功能?
可以
INVISIBLE
在CREATE TABLE
orALTER TABLE
语句中为列指定属性。这些列将不会列在语句的结果中SELECT *
,也不需要在INSERT
语句中为它们分配值,除非INSERT
通过名称明确提及它们。由于
SELECT *
不返回不可见列,因此以这种方式创建的新表或视图将不会有不可见列的痕迹。如果在语句中特别引用SELECT
,列将被带入视图/新表,但INVISIBLE
属性不会。不可见列可以声明为
NOT NULL
,但随后需要一个DEFAULT
值
这当然不是标准 SQL,而且通常很愚蠢。相反,遵循最佳实践,
INVISIBLE
色谱柱。SELECT *
在生产代码中使用。INVISIBLE
专栏其目的似乎是允许 MariaDB 用户继续使用,SELECT *
这几乎总是违背 DBA 的最佳实践。所以现在您可以使用SELECT *
, 然后添加到表中,而不改变 . 返回的结果SELECT *
。
CREATE TABLE users ( id INT, username varchar(255) );
Run Code Online (Sandbox Code Playgroud)
并且您有一个转储的users
导出SELECT *
。稍后如果您想添加一列,您可以将其标记为INVISIBLE
并维护结果
ALERT TABLE users
ADD COLUMN password varchar(255) INVISIBLE;
Run Code Online (Sandbox Code Playgroud)
事后,ADD COLUMN
你仍然非常安全,但没有意识到在这种情况下没有一个头脑正常的人会使用它SELECT *
。
虽然只有一种类型的不可见性暴露给用户,但 MariaDB 内部有四种不同类型的不可见性。有关详细信息,请参阅MDEV-10177 不可见列。隐形也有效果INSERT
,请在门票上找到更多信息
顺便说一句,Oracle 称之为此功能INVISIBLE
,DB2 称之为IMPLICITLY HIDDEN
。在不支持此功能的其他 SQL 方言中,您只需创建一个VIEW
,
CREATE user_view AS SELECT id, username FROM users;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5596 次 |
最近记录: |