在MySQL中使用表名中的点是一种好习惯

时间:2017-01-31 01:36:56

标签: mysql sql-server

如果我错了,请纠正我,但我的理解是,在MSSQL中,可以使用对象表示法引用数据库(如视图,模式和表)的子结构,例如:

Database.Schema.Table.Column

我认为这些对象中的每一个都有自己的属性。

我需要在MySQL中复制MSSQL DB的结构,我不确定什么是最佳实践。

我正在考虑使用以下命名约定在MySQL中创建表:

Database
|---SubStructureX.Table
|   |---Column_A
|   |---Column_B
|---SubStructureY.Table
|   |---Column_C
|   |---Column_D
|
|

因此,MySQL查询可能如下所示:

SELECT Column_A, Column_B FROM SubStructureX.Table

简而言之,“SubstructureX.Table”只是一个包含点的表名。我会这样做是为了在复制MSSQL结构时易于使用。我不在乎点之前和之后的东西是不是MySQL中的对象。

这是一个很好的MySQL练习吗?

2 个答案:

答案 0 :(得分:3)

在MySQL?不,我认为在表名中使用句点根本不是好习惯。我认为这是非常糟糕的做法。点是SQL中的引用运算符。这意味着如果您想使用完全限定的表示法引用列,您可以这样做:

SELECT Table.Column_A ...

或者,用反引号引用:

SELECT `Table`.`Column_A` ...

现在,假设您的表名为StructureX.Table。就像一个空间一样,你必须引用它来逃避它,因为你不希望MySQL认为这个点是一个运算符。这意味着你的SQL必须如下所示:

SELECT `StructureX.Table`.Column_A ...

或者,用反引号引用:

SELECT `StructureX.Table`.`Column_A` ...

对你来说,这看起来不像语法错误吗?也许它应该是这样的:

SELECT `StructureX`.`Table`.`Column_A` ...

这将是一个维护的噩梦,作为系统分析师,我会讨厌任何对我施加这种命名的应用程序或开发人员。这让我想要睁开眼睛。

Microsoft SQL Server不同,因为它支持单个数据库中的多个模式,而MySQL将模式视为数据库的同义词。在MS SQL Server中,schemas是对象的集合,您可以使用它们来组织表,或将安全性作为一个组应用于表。默认架构为dbo,这就是您经常看到列出的架构的原因。在MS SQL Server语法中,这个:

SELECT [StructureX].[Table].[Column_A] ...

表示当前数据库,名为StructureX的架构,名为Table的表和列名Column_A。 MS SQL Server实际上支持four part name,第四部分是数据库:

SELECT [MyDatabase].[StructureX].[Table].[Column_A] ...

此处,MyDatabase是数据库名称。

同样的样式在MySQL中有效,除了你必须记住模式和数据库是同义词。那就是:

SELECT `StructureX`.`Table`.`Column_A` ...

意味着数据库StructureX,表格Table和列Column_A

答案 1 :(得分:0)

我可以说是的:

但不是使用表名,而是为表创建一个像这样的别名

  

从yourTable中选择 a.column1 a

使用表格alias是一种很好的做法。