Làm thế nào bạn có thể biết nếu một bảng trong DB2 có Khóa chính?


9

Chúng tôi đang sử dụng một công cụ yêu cầu các bảng cụ thể trong cơ sở dữ liệu DB2 của chúng tôi để có Khóa chính được xác định.

Có cách nào sử dụng câu lệnh chọn trên DB để xem bảng đã cho có không?

Cảm ơn.

Câu trả lời:


10

Tuyên bố miễn trừ trách nhiệm: Tôi không biết DB2.

Tôi chỉ đơn giản là googled chúng với "định nghĩa bảng db2".

Nguồn:

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;

Nguồn:

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

1
TAB.TYPE = 'V' sẽ cung cấp cho bạn lượt xem mà tôi tin rằng bạn không muốn. Sử dụng TAB.TYPE = 'T' cho các bảng.
GilShalit

8

bạn có thể làm một db2look, nó sẽ cung cấp cho bạn các ddls cho bảng.

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

Chào mừng bạn đến với dba.se và cảm ơn vì câu trả lời hữu ích này - Tôi hy vọng bạn không bận tâm đến việc chỉnh sửa định dạng của tôi?
Jack nói hãy thử topanswers.xyz

@JackDoumund - cảm ơn vì những chỉnh sửa đó, giờ trông khá dễ đọc
Govind Kailas

0

Đây có lẽ là tùy chọn dễ nhất, vì khóa chính được hỗ trợ bởi một chỉ mục phù hợp:

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

Bạn cũng có thể truy vấn bảng danh mục cột:

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

2
Khóa chính không phải là một chỉ mục (mặc dù nó được hỗ trợ bởi một).
mustaccio

0
  1. SYSCAT.INDEXES.UNIQUERULE (Nếu UNIQUERULE là P thì khóa chính)
  2. SYSCAT.TABCONST.TYPE (nếu Loại là P thì ràng buộc khóa chính)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.