MySQL我可以使用正则表达式来表示行的类型吗?
我有一个带有列的“用户”表:MySQL我可以使用正则表达式来表示行的类型吗?,mysql,sql,regex,Mysql,Sql,Regex,我有一个带有列的“用户”表: USERNAME varchar(40) “用户”可以是管理用户,也可以是标准用户。管理用户始终包含纯数字用户名 然后,我可以使用regex提取所有具有数字名称的用户,以获取管理用户,反之亦然,以获取非管理用户 因此,在我的select查询中使用正则表达式来获取此信息是可以的做法,还是应该添加一个附加列: MANAGEMENT TINYINT(1) 它存储用户是否为管理用户 什么是最佳实践以及为什么?通常最好将模式设计为最佳实践。这包括没有存储相同信息的多个列。
USERNAME varchar(40)
“用户”可以是管理用户,也可以是标准用户。管理用户始终包含纯数字用户名
然后,我可以使用regex提取所有具有数字名称的用户,以获取管理用户,反之亦然,以获取非管理用户
因此,在我的select查询中使用正则表达式来获取此信息是可以的做法,还是应该添加一个附加列:
MANAGEMENT TINYINT(1)
它存储用户是否为管理用户
什么是最佳实践以及为什么?通常最好将模式设计为最佳实践。这包括没有存储相同信息的多个列。但是,用户名和作为管理用户绝对是不同的信息,您需要两者 您可以为新列使用
位
类型
如果您想要强制实施用户名的特定格式,标准数据库解决方案是定义一个检查约束,如下所示:
ALTER TABLE YourTable ADD CONSTRAINT YourConstraint CHECK ( is_management_user = 0 OR ...)
(其中,…
将包括Oracle上的REGEXP\u LIKE
,在TSQL中转换为整数或类似的内容)
但是,MySQL检查约束,如果你认为“代码”>用户名< /代码>的形式对于你的应用程序的安全性或操作来说是非常重要的,那么你必须使用触发器来模拟它们。这包括没有存储相同信息的多个列。但是,用户名和作为管理用户绝对是不同的信息,您需要两者
您可以为新列使用位
类型
如果您想要强制实施用户名的特定格式,标准数据库解决方案是定义一个检查约束,如下所示:
ALTER TABLE YourTable ADD CONSTRAINT YourConstraint CHECK ( is_management_user = 0 OR ...)
(其中,…
将包括Oracle上的REGEXP\u LIKE
,在TSQL中转换为整数或类似的内容)
然而,MySQL检查约束,如果你认为“代码”>用户名< /代码>的形式对于你的应用程序的安全性或操作来说是非常重要的,那么你必须使用触发器来模拟它们。添加一个新字段。真正地没有合理的理由不这样做
我还建议您在上阅读这篇文章
一些例子:
9:人们的名字是用ASCII码写的
15:人名不包含数字
24:我的系统永远不需要处理来自中国的名字
25:还是日本
26:还是韩国
你的正则表达式能处理所有这些吗?当然可以每一次?在一个领域里依靠这种“隐藏”的意义,确实不是很安全或有效。添加一个新字段。真正地没有合理的理由不这样做
我还建议您在上阅读这篇文章
一些例子:
9:人们的名字是用ASCII码写的
15:人名不包含数字
24:我的系统永远不需要处理来自中国的名字
25:还是日本
26:还是韩国
你的正则表达式能处理所有这些吗?当然可以每次?在用户表中添加类似角色的内容。并在角色表中保留管理、标准等。在用户表中具有角色id。在用户表中添加类似角色的内容。并在角色表中保留管理、标准等。在用户表中具有角色id。