Подтвердить что ты не робот

MySQL: как я могу увидеть ВСЕ ограничения на таблице?

Я изучаю SQL, а то, что меня беспокоит, заключается в том, что я не могу найти ВСЕ ограничения на таблице. Я создал таблицу с

create table t2
(a integer not null primary key,
b integer not null, constraint c1 check(b>0),
constraint fk1 foreign key(a) references t1(a));

и добавил ограничение с помощью

alter table t2
add constraint c2 check (b<20);

Затем я попытался увидеть ВСЕ (четыре) ограничения с помощью

show table status
from tenn #-->the name of my database
like 't2';

а затем

show create table t2;

а затем

select *
from information_schema.key_column_usage
where table_name='t2';

и, наконец,

select *
from information_schema.table_constraints
where table_name='t2';

Но ни один из них не показывает все четыре ограничения. Может ли кто-нибудь сказать мне, как их видеть?

Спасибо большое!

4b9b3361

Ответ 1

select COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME
from information_schema.KEY_COLUMN_USAGE
where TABLE_NAME = 'table to be checked';

Ответ 2

MySQL не поддерживает проверки ограничений. SQL анализируется, принимается, а затем молча игнорируется без каких-либо сообщений пользователю.

Поскольку контрольное ограничение не создано, вы его не увидите.

Ответ 3

Самый простой способ увидеть объяснение текущей таблицы и ее ограничений - использовать:

SHOW CREATE TABLE mytable;

Это покажет вам, что именно SQL будет введен для определения структуры таблицы в ее текущей форме.

Ответ 4

Вы можете использовать это:

select
    table_name,column_name,referenced_table_name,referenced_column_name
from
    information_schema.key_column_usage
where
    referenced_table_name is not null
    and table_schema = 'my_database' 
    and table_name = 'my_table'

Или для лучшего форматированного вывода используйте это:

select
    concat(table_name, '.', column_name) as 'foreign key',  
    concat(referenced_table_name, '.', referenced_column_name) as 'references'
from
    information_schema.key_column_usage
where
    referenced_table_name is not null
    and table_schema = 'my_database' 
    and table_name = 'my_table'

Ответ 5

Ограничения внешнего ключа перечислены в столбце Комментарий на выходе следующей команды:

 SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

Ответ 6

Вы можете использовать Select from information_schema.table_constraints следующим образом:

mysql> select * from information_schema.table_constraints
-> where table_schema = schema()
-> and table_name = 'table_name';

Ответ 7

К сожалению, MySQL не поддерживает ограничения проверки SQL. Когда вы определяете их в своем запросе, они просто игнорируются.

Ответ 8

Экспортировать таблицу базы данных в SQL.

Если у вас есть phpmyadmin, вы можете сделать это, перейдя на вкладку "Экспорт". Если вы выберете метод экспорта "Пользовательский", обязательно выберите "структура" или "структура и данные" в разделе "Параметры, специфичные для формата".

Пример файла экспорта .sql:

--
-- Table structure for table `customers`
--    

CREATE TABLE `customers` (
  `username` varchar(50) NOT NULL,
  `fullname` varchar(100) NOT NULL,
  `postalcode` varchar(50) NOT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
...