如果我错了,请纠正我,但我的理解是,在MSSQL中,可以使用对象表示法引用数据库的子结构,如视图、模式和表,例如:
Database.Schema.Table.Column
我相信每个对象都有自己的属性。
我需要在MySQL中复制MSSQL的结构,我不确定什么是最佳实践。
我正在考虑使用以下命名约定在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实践吗?
发布于 2017-01-31 01:53:43
在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` ...这将是一个噩梦,维护,作为一个系统分析师,我会讨厌任何应用程序或开发人员,使我这个术语。这让我想把我的眼睛挖出来。
是不同的,因为它支持单个数据库中的多个架构,而MySQL则将架构视为数据库的同义词。在MS中,图式是对象的集合,您可以使用它们来组织表,或者将安全性作为一个组应用于表。默认模式是dbo,这就是为什么您经常看到该模式列出的原因。在MS SQL Server语法中,这:
SELECT [StructureX].[Table].[Column_A] ...表示在当前数据库中,名为StructureX的架构、名为Table的表和列名Column_A。MS实际上支持四部名,第四部分是数据库:
SELECT [MyDatabase].[StructureX].[Table].[Column_A] ...在这里,MyDatabase是数据库名。
这种样式在MySQL中同样有效,但您必须记住模式和数据库是同义词。在这里,这个:
SELECT `StructureX`.`Table`.`Column_A` ...将意味着数据库StructureX、表Table和列Column_A。
发布于 2017-01-31 01:46:07
我可以说是:
但是,不要使用表名,而是创建一个类似于以下别名的表,
从a.column1选择yourTable as a
使用表alias是一个很好的实践。
https://stackoverflow.com/questions/41948399
复制相似问题