Wie können Sie feststellen, ob eine Tabelle in DB2 einen Primärschlüssel hat?

9

Wir verwenden ein Tool, für das für bestimmte Tabellen in unserer DB2-Datenbank ein Primärschlüssel definiert sein muss.

Gibt es eine Möglichkeit, mithilfe einer select-Anweisung in der Datenbank festzustellen, ob eine bestimmte Tabelle eine hat?

Vielen Dank.

Ben
quelle

Antworten:

10

Haftungsausschluss: Ich kenne DB2 nicht.

Ich habe diese einfach mit "db2 table definition" gegoogelt.

Quelle:

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;

Quelle:

SELECT * FROM syscat.tabconst WHERE type = 'P';
RolandoMySQLDBA
quelle
1
TAB.TYPE = 'V' gibt Ihnen Ansichten, die Sie meiner Meinung nach nicht wollen. Verwenden Sie TAB.TYPE = 'T' für Tabellen.
GilShalit
8

Sie können eine machen db2look, die Ihnen die ddls für die Tabelle gibt.

db2look -d db_name -e -x -z schema_name -t table_name
Govind Kailas
quelle
Willkommen bei dba.se und vielen Dank für diese hilfreiche Antwort. Ich hoffe, es macht Ihnen nichts aus, wenn meine Formatierung bearbeitet wird.
Jack sagt, versuchen Sie es mit topanswers.xyz
@ JackDouglas - danke für diese Änderungen, sieht jetzt ziemlich lesbar aus
Govind Kailas
0

Dies ist wahrscheinlich die einfachste Option, da ein Primärschlüssel von einem passenden Index unterstützt wird:

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

Sie können auch die Spaltenkatalogtabelle abfragen:

select NAME from SYSIBM.SYSCOLUMNS where tbname = 'TABLE' and keyseq > 0 order by keyseq;
Scott McIntyre
quelle
2
Der Primärschlüssel ist kein Index (obwohl er von einem unterstützt wird).
Mustaccio
0
  1. SYSCAT.INDEXES.UNIQUERULE (Wenn UNIQUERULE P ist, dann Primärschlüssel)
  2. SYSCAT.TABCONST.TYPE (wenn Typ P ist, dann Primärschlüsseleinschränkung)
Daniel Adeniji
quelle