什么是表前缀?

28

什么是表前缀,它们的优缺点是什么?这与MySQL有关。


你是在指表名前缀,例如tblTasks,还是指模式,即dbo.tasks? - Robb
表前缀是添加到每个表名前面的前缀,正如其名称所示。 - Mathias Lykkegaard Lorenzen
7个回答

24

这通常用于区分同一脚本的不同安装版本。

例如,假设您在服务器上有两个具有不同内容的Joomla安装版本,但只有一个MySQL数据库。

现在,由于明显的原因,两个Joomla安装版本不能共享相同的数据库表,否则会导致两个安装版本显示相同的内容。这就是前缀发挥作用的地方。

通过使用不同的表前缀,您可以让Joomla安装版本#1知道它应该使用所有带有前缀JOS_的表,而Joomla安装版本#2必须使用所有带有前缀JOS2_的表。


7

表格不需要前缀。

这完全取决于您自己。

然而,我们根据它们所属的应用程序中的模块为表格添加前缀,只是为了更轻松地对表格进行分组。


5

有些人主张使用tbl或tbl_(例如tbl_MyTable或tblMyTable),而另一些人则使用后缀,例如MyTable_T。

个人而言,我避免使用前缀/后缀。如果模式随时间而变化,我可能会用视图代替表格,因此我并不真正区分这两种对象。

最重要的是,您必须在团队中记录命名准则,并且您所有人都必须遵守同一组准则以保持一致性。


2
在一些特殊情况下,例如恶意软件脚本针对特定类型的网站(如WordPress等)创建时,更改表前缀可以作为额外的安全措施。例如,添加表前缀会模糊常见表名,使黑客通过SQL注入或其他安全漏洞访问数据库中的数据变得更加困难,因为他们首先需要发现您的表名是什么。但请确保将表前缀视为非常微小的安全层。它不应该是您主要的安全方法。您仍应采取其他更重要的安全措施来防止SQL注入和其他类似的威胁。例如,根据您的代码设置方式,黑客仍然可能通过SQL注入运行“show tables”命令以获取您的数据库表名。

7
安全靠模糊不清并不是真正的安全,这只是一种安全幻象。请记住,真正的安全需要更加可靠和实际的措施。 - Mariusz Jamro
1
@MariuszJamro,你有没有看过我的回答?并不是所有的模糊都只是安全的幻觉。例如,我刚刚度假回来,在家里的一个非常难以找到的地方藏了一些技术设备。有人最终能找到它在哪里吗?当然可以。这是否增加了额外的安全层?当然。仅仅因为它被遮蔽了,就是安全的幻觉吗?绝对不是。 - kojow7
这只是一种错觉,因为你感觉更安全了,但实际上并不是这样。事实上,这并不能阻止任何人对你的数据库结构进行反向工程,并找出特定的表格实际存储/执行的内容。 - Mariusz Jamro
@MariuszJamro,你有没有看过我的回答?我已经在我的回答中解决了你的问题。 - kojow7
我理解你的想法,但在这个问题的背景下,我认为这种做法是错误的。表前缀并不能提高安全性,因为使用它们并不能带来“额外的安全保障”,只会让你的工作更加困难。 - Mariusz Jamro
几年前,有各种蠕虫在流传,它们会查找易受攻击的WordPress网站,并检索和操作wp_users表。在这些情况下,那些使用不同前缀的人不会受到这些蠕虫的影响。虽然使用不同前缀是一种薄弱的安全措施,但它仍然是一种安全措施。虽然最好的安全措施是让WordPress的开发人员完全消除所有SQL注入的可能性,但最终用户不应该假设这是事实。 - kojow7

2
如果您的网站和数据库结构比较复杂,表前缀可以帮助防止数据库中的命名冲突。通常情况下,当出现以下情况时,您会看到表前缀的使用:
- 多个脚本正在集成到一个网站中,并且完成后的网站需要共享数据,但如果没有针对每个脚本唯一的前缀,表名就会发生冲突。 - 您正在为已有脚本添加功能,并且想要区分原始脚本的表和您手动创建的新表。这样,如果您创建了新表,它不会与基础脚本的任何未来更新发生冲突,因为它具有不同的表前缀。 - 您的托管计划只提供一个数据库,而您想要使用该数据库来服务多个脚本。(出于各种原因,不建议这样做,但我已经看到用户这样做了。)
在从头编写脚本时,通常不需要使用表前缀,因为您可以控制数据库结构的所有方面。但是,当您开始将多个脚本集成在一起时,表前缀变得有用甚至是必要的。它允许您在多个脚本之间创建唯一的数据视图和连接表,而无需担心数据库中的命名冲突。

2

奇怪的是没有人提到,您也可以使用表前缀来使用通常保留的关键字作为表名。

例如,t_user或t_order现在是可行的。


0

根据你的命名约定,区分表和视图可能会有所帮助。

缺点是,就表名而言,你可能会受到限制。Oracle 对此限制为 30 个字符。如果你使用 "Tbl_" 作为前缀,那么你自动失去了 4 个字符。这可能会成为一个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接