Программирование >>  Преобразование значений null 

1 ... 36 37 38 [ 39 ] 40 41 42 ... 219


3 b.column name,

4 a.constraint type

5 from all constraints a,

6 all cons columns b

7 where a.table name = EMP

8 and a.owner = SMEAGOL

9 and a.table name = b.table name

10 and a.owner = b.owner

11 and a.constraint name = b.constraint name

PostgreSQL, MySQL и SQL Server

Делаем запрос к INFORMATION SCHEMA.TABLE CONSTRAINTS и INFORMATION SCHEMA.KEY COLUMN USAGE:

select

a.table name,

a.constraint name,

b.column name,

a.constraint type

from

information schema.table constraints a,

information schema.key column usage b

where

a.table name = EMP

a.table schema = SMEAGOL

a.table name = b.table name

a.table schema = b.table schema

a.constraint name = b.constraint name

Обсуждение

Ограничения - настолько важная часть реляционных баз данных, что даже не стоит объяснять, зачем необходимо знать, какие ограничения наложены на таблицу. Список наложенных на таблицу ограничений может понадобиться для разных целей: если необходимо найти таблицу без первичного ключа, если необходимо выяснить, какие столбцы должны быть внешними ключами, но ими не являются (т. е. данные дочерних таблиц отличаются от данных родительских таблиц, и вы хотите выяснить, почему это произошло), или если необходимо узнать проверочные ограничения (Допускает ли столбец значения NULL? Должны ли значения столбца удовлетворять какому-то специальному условию? и др.).

Как получить список внешних ключей без соответствующих индексов

Задача

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



Решение DB2

Делаем запрос к SYSCAT.TABCONST, SYSCAT.KEYCOLUSE, SYS-CAT.INDEXES и SYSCAT.INDEXCOLUSE:

select

fkeys.tabname,

fkeys.constname,

fkeys.colname,

ind cols.indname

from

select

a.tabschema, a.tabname, a.constname, b.colname

from

syscat.tabconst a,

syscat.keycoluse b

where

a.tabname =

a.tabschema =

SMEAGOL

a.type =

a.tabname =

b.tabname

a.tabschema =

b.tabschema

) fkeys

left join

select

a.tabschema,

a.tabname,

a.indname,

b.colname

from

syscat.indexes a,

syscat.indexcoluse b

where

a.indschema =

b.indschema

a.indname =

b.indname

) ind cols

( fkeys.tabschema = ind cols.tabschema

and fkeys.tabname = ind cols.tabname

and fkeys.colname = ind cols.colname )

where

ind cols.indname is null

Oracle

Делаем запрос к SYS.ALL CONS COLUMNS, SYS.ALL CONSTRA-

INTS и SYS.ALL IND COLUMNS:

select

a.table name,

a.constraint name,

a.column name,

c.index name

from

all cons columns a,

all constraints b,

all ind columns c

where

a.table name

a.owner

b.constraint type

a.owner

EMP SMEAGOL

b.owner



and a.table name

= b.table name

and a.constraint name

= b.constraint name

and a.owner

= c.table owner

( + )

and a.table name

= c.table name

and a.column name

= c.column name

and c.index name

is null

PostgreSQL

Делаем запрос к INFORMATION SCHEMA.KEY COLUMN USAGE,

INFORMATION SCHEMA.REFERENTIAL CONSTRAINTS, INFORMA-

TION SCHEMA.COLUMNS и PG CATALOG.PG INDEXES:

fkeys.table name, fkeys.constraint name, fkeys.column name, ind cols.indexname

a.constraint schema, a.table name, a.constraint name, a.column name

information schema.key column usage a, information schema.referential constraints b a.constraint name = b.constraint name a.constraint schema = b.constraint schema a.constraint schema = SMEAGOL a.table name = EMP

) fkeys left join

a.schemaname, a.tablename, a.indexname, b.column name pg catalog.pg indexes a, information schema.columns b a.tablename = b.table name a.schemaname = b.table schema ) ind cols

( fkeys.constraint schema = ind cols.schemaname and fkeys.table name = ind cols.tablename

and fkeys.column name = ind cols.column name )

ind cols.indexname is null

Для получения информации об индексах, такой как имя индекса, столбцы в индексе и порядковые номера столбцов в индексе, можно использовать команду SHOW INDEX (показать индекс). Кроме того,

можно запросить INFORMATION SCHEMA.KEY COLUMN USAGE

для получения списка внешних ключей данной таблицы. В MySQL 5 внешние ключи должны индексироваться автоматически, но порой этого не происходит. Чтобы выяснить, проиндексирован ли столбец внешнего ключа, выполняется команда SHOW INDEX для конкретной

select

from

select

from

where

select

from

where

where

MySQL



1 ... 36 37 38 [ 39 ] 40 41 42 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика