如果我错了,请纠正我,但我的理解是,在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练习吗?
答案 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
是一种很好的做法。