4

我不知道我的代码是否适用于 MySQL、PostgreSQL、MS SQL、IBM db2、Oracle 或什么。那么有没有通用的方法来识别表上的主键呢?或者至少是一种适用于 3 或 4 个 RDBMS 或在某种标准文件中描述的方式,所以我可以声称我的代码适用于标准情况?

4

4 回答 4

2

我同意所有数据库都没有真正通用的方法,您可以尝试使用INFORMATION_SCHEMA,它应该可以帮助您。

SELECT pk.TABLE_NAME, c.COLUMN_NAME primary_key
  FROM information_schema.table_constraints pk 
  JOIN information_schema.key_column_usage c
    ON c.table_name = pk.table_name 
   AND c.constraint_name = pk.constraint_name
 WHERE constraint_type = 'primary key'
于 2013-05-29T09:28:59.367 回答
1

不,没有通用的方法。

每个 RDBMS 都有自己的元数据表,其中包含模式详细信息(表名、列名等)。

例如,DB2 在SYSIBM模式中有许多表,例如SYSIBM.SYSCOLUMNS. 事实上,我相信这甚至在某些平台(如 DB2/LUW 和 DB2/z)之间可能会有所不同。

你只需要做我们都做的事,恐怕:-)

这意味着使您的代码可配置为使用基于目标 DBMS 的不同方法。

于 2013-05-29T09:14:29.687 回答
1

不,没有这样的事情。每个 DBMS 都有自己的方式来查询元数据。

于 2013-05-29T09:14:47.073 回答
0

不使用 SQL,但 ODBC 和 JDBC API 具有此功能。其他数据库驱动程序 API 应该提供类似的功能。

对于 ODBC 使用 SQLPrimaryKeys,对于 JDBC 使用 databaseMetaData.getPrimaryKeys

尝试使用您将使用的驱动程序 API 重新标记您的问题以获得更好的答案。

于 2013-06-03T07:34:10.393 回答