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