Как определить, есть ли у таблицы в DB2 первичный ключ?

9

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

Есть ли способ использовать оператор выбора в БД, чтобы увидеть, есть ли в данной таблице?

Спасибо.

Бен
источник

Ответы:

10

Отказ от ответственности: я не знаю DB2.

Я просто погуглил их с "определением таблицы 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';
RolandoMySQLDBA
источник
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, то ограничение первичного ключа)
Даниэль Адениджи
источник