Як можна визначити, чи є в таблиці DB2 первинний ключ?


9

Ми використовуємо інструмент, який потребує конкретних таблиць у нашій базі даних DB2, щоб мати визначений первинний ключ.

Чи можливо за допомогою оператора select у БД перевірити, чи є в даній таблиці такий?

Дякую.

Відповіді:


10

Відмова: Я не знаю DB2.

Я просто google їх з "визначенням таблиці db2".

Джерело:

SELECT * 
FROM SYSIBM.SYSTABLES TAB,SYSIBM.SYSCOLUMNS COL 
WHERE TAB.CREATOR = COL.TBCREATOR 
AND TAB.CREATOR = 'xxxx' 
AND TAB.NAME = 'xxxxxxxxxxxxx' 
AND TAB.NAME = COL.TBNAME 
AND TAB.TYPE = 'V' ( OR 'T' ) 
ORDER BY 1,2;

Джерело:

SELECT * FROM syscat.tabconst WHERE type = 'P';

1
TAB.TYPE = 'V' надасть вам погляд, якого, я вважаю, ви не хочете. Використовуйте TAB.TYPE = 'T' для таблиць.
GilShalit

8

ви можете зробити db2look, що дасть вам DDls для таблиці.

db2look -d db_name -e -x -z schema_name -t table_name

Ласкаво просимо на dba.se і дякую за цю корисну відповідь - сподіваюся, ви не заперечуєте проти мого редагування форматування?
Джек каже, спробуйте topanswers.xyz

@JackDouglas - дякую за ці зміни, зараз виглядає досить читабельно
Говінд Кайлас

0

Це, мабуть, найпростіший варіант, оскільки первинний ключ підтримується відповідним індексом:

select COLNAMES from SYSIBM.SYSINDEXES where tbname = 'TABLE' and uniquerule = 'P';

Ви також можете запитати таблицю каталогу стовпців:

select NAME from SYSIBM.SYSCOLUMNS where tbname = 'TABLE' and keyseq > 0 order by keyseq;

2
Первинний ключ не є індексом (хоча він підтримується одним).
мустаччо

0
  1. SYSCAT.INDEXES.UNIQUERULE (Якщо UNIQUERULE P, то первинний ключ)
  2. SYSCAT.TABCONST.TYPE (якщо тип P - обмеження первинного ключа)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.