Как показать уникальные ограничения таблицы в MySQL?

Я создал их, но я забыл, какие они есть.

Я просто хочу

  • показать их.
  • удалить все ограничения в таблице.

Ответы

Ответ 1

select distinct CONSTRAINT_NAME
from information_schema.TABLE_CONSTRAINTS
where CONSTRAINT_SCHEMA = 'mysql'

Ответ 2

select distinct CONSTRAINT_NAME
from information_schema.TABLE_CONSTRAINTS
where table_name = 'table_name' and constraint_type = 'UNIQUE';

Ответ 3

Это не дает элегантный результат, но его легко запомнить:

SHOW CREATE TABLE table_name;

Ответ 4

ОП запросил одну таблицу, что будет делать.

Кроме того, удаление последнего предложения 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';