MySQL:如何在表上看到所有约束?

Ale*_*der 42 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));
Run Code Online (Sandbox Code Playgroud)

并添加了一个约束

alter table t2
add constraint c2 check (b<20);
Run Code Online (Sandbox Code Playgroud)

然后我试着看到所有(四个)约束

show table status
from tenn #-->the name of my database
like 't2';
Run Code Online (Sandbox Code Playgroud)

然后

show create table t2;
Run Code Online (Sandbox Code Playgroud)

然后

select *
from information_schema.key_column_usage
where table_name='t2';
Run Code Online (Sandbox Code Playgroud)

最后

select *
from information_schema.table_constraints
where table_name='t2';
Run Code Online (Sandbox Code Playgroud)

但这些都没有显示出所有四个约束.谁能告诉我怎么看他们所有人?

非常感谢!

RRM*_*RRM 60

select COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME
from information_schema.KEY_COLUMN_USAGE
where TABLE_NAME = 'table to be checked';
Run Code Online (Sandbox Code Playgroud)

  • 截至 2020 年 3 月,此查询未显示表可能具有的任何 CHECK 约束。 (4认同)

Joh*_*ley 22

查看当前表及其约束的解释的最简单方法是使用:

SHOW CREATE TABLE mytable;

这将向您显示将以其当前形式定义表结构的SQL输入.


a_h*_*ame 20

MySQL不支持检查约束.SQL被解析,接受,然后静默忽略,而不向用户发送任何消息.

由于未创建检查约束,您将看不到它.


Abh*_*pta 12

你可以用这个:

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'
Run Code Online (Sandbox Code Playgroud)

或者为了更好的格式化输出使用此:

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'
Run Code Online (Sandbox Code Playgroud)


bla*_*hop 6

您可以这样获得它information_schema.table_constraints

SELECT * 
FROM   information_schema.table_constraints
WHERE  table_schema = schema()
AND    table_name = 'table_name';
Run Code Online (Sandbox Code Playgroud)


sre*_*mer 3

外键约束列在以下命令输出的注释列中:

 SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';
Run Code Online (Sandbox Code Playgroud)