web-dev-qa-db-ja.com

MySQLでテーブルの一意の制約を表示するにはどうすればよいですか?

作成しましたが、どれなのか忘れてしまいました。

私はただしたい

  1. 見せる。
  2. テーブルのすべての制約を削除します。
26
TIMEX
select distinct CONSTRAINT_NAME
from information_schema.TABLE_CONSTRAINTS
where CONSTRAINT_SCHEMA = 'mysql'
8
Paul Creasey
select distinct CONSTRAINT_NAME
from information_schema.TABLE_CONSTRAINTS
where table_name = 'table_name' and constraint_type = 'UNIQUE';
64
Dave

これはエレガントな出力を生成しませんが、覚えやすいです:

SHOW CREATE TABLE table_name;
8
user12345

OPは、これで実行される単一のテーブルを要求しました。

さらに、最後のwhere句を削除すると、一意の制約によって保護されているデータベースのすべての列が表示されます。

SELECT
  CONSTRAINT_NAME,
  TABLE_NAME,
  COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE
  CONSTRAINT_NAME LIKE 'UNIQ%'
  AND TABLE_SCHEMA = 'your_database_name'
  AND TABLE_NAME = 'your_table_name';

残念ながら、mysqlはクエリ結果に基づくインデックスの削除を容易にしません。次のクエリの出力を実行して、2つのクエリのすべての一意の列を削除できます。

SELECT CONCAT(
  'ALTER TABLE ',
  TABLE_NAME,
  ' DROP INDEX ',
  CONSTRAINT_NAME,
  '; -- drops ',
  COLUMN_NAME,
  ' constraint'
)
FROM information_schema.KEY_COLUMN_USAGE
WHERE
  CONSTRAINT_NAME LIKE 'UNIQ%'
  AND TABLE_SCHEMA = 'your_database_name';
2
adc