Jak rozpoznać, czy tabela w DB2 ma klucz podstawowy?

9

Używamy narzędzia, które wymaga określonych tabel w naszej bazie danych DB2, aby mieć zdefiniowany klucz podstawowy.

Czy istnieje sposób za pomocą instrukcji select na DB, aby sprawdzić, czy dana tabela ma taką instrukcję?

Dzięki.

Ben
źródło

Odpowiedzi:

10

Oświadczenie: Nie znam bazy danych DB2.

Po prostu przejrzałem je za pomocą „definicji tabeli db2”.

Źródło:

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;

Źródło:

SELECT * FROM syscat.tabconst WHERE type = 'P';
RolandoMySQLDBA
źródło
1
TAB.TYPE = „V” pokaże Ci poglądy, które moim zdaniem nie chcesz. Dla tabel użyj TAB.TYPE = „T”.
GilShalit,
8

możesz zrobić db2look, co da ci ddls do stołu.

db2look -d db_name -e -x -z schema_name -t table_name
Govind Kailas
źródło
Witamy na stronie dba.se i dziękuję za tę pomocną odpowiedź - mam nadzieję, że nie przeszkadza ci moja edycja formatowania?
Jack mówi, że spróbuj topanswers.xyz 25.10.11
@JackDouglas - dzięki za te zmiany, wygląda teraz dość czytelnie
Govind Kailas
0

Jest to prawdopodobnie najłatwiejsza opcja, ponieważ klucz podstawowy jest obsługiwany przez pasujący indeks:

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

Możesz także wykonać zapytanie do tabeli katalogu kolumn:

select NAME from SYSIBM.SYSCOLUMNS where tbname = 'TABLE' and keyseq > 0 order by keyseq;
Scott McIntyre
źródło
2
Klucz podstawowy nie jest indeksem (chociaż jest obsługiwany przez jeden).
mustaccio
0
  1. SYSCAT.INDEXES.UNIQUERULE (jeśli UNIQUERULE to P, to klucz podstawowy)
  2. SYSCAT.TABCONST.TYPE (jeśli typ to P, to ograniczenie klucza podstawowego)
Daniel Adeniji
źródło