首页 > 解决方案 > 在 MySQL 5.7 中无法使用默认函数更改列

问题描述

我试图运行此查询以掩盖“音频”列中的内容,但不断收到错误语法的错误消息

ALTER TABLE 测试
ALTER COLUMN audio varchar(10) MASKED WITH (FUNCTION = 'default()');

我在哪里错了。请帮忙

标签: mysqldefault

解决方案


MySQL 不支持Dynamic Data MaskingMASKED WITH的语法。这是 Microsoft SQL Server 的专有功能。

Microsoft SQL Server 是与 MySQL 不同的 RDBMS 产品。这两种产品都具有其他产品不支持的功能和语法。

在 MySQL 5.7 中,DEFAULT可以是常量标量值、NULL 或 CURRENT_TIMESTAMP。这些是唯一的选择(参见https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html)。

在 MySQL 8.0 中,您现在可以对列的默认值使用常量表达式(请参阅https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html)。

在这两个版本中,您都必须使用DEFAULT关键字。


回复您的评论:

有没有其他方法,我可以为除root用户以外的其他用户隐藏此列数据

  • 您可以定义排除要隐藏的列的VIEW 。视图可以读取基表,但不会选择audio列。用户可以读取视图,但不向所有用户授予对基表的访问权限。

  • MySQL 支持授予列级权限,但我从未见过有人使用它们,也不知道它们是否真的有效。


推荐阅读