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

时间:2011-02-23 18:02:00

标签: 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';

但这些都没有显示所有四个约束。谁能告诉我怎么看所有这些?

非常感谢!

8 个答案:

答案 0 :(得分:54)

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

答案 1 :(得分:20)

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

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

答案 2 :(得分:19)

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

SHOW CREATE TABLE mytable;

这将显示您将以何种形式定义表结构的SQL。

答案 3 :(得分:11)

您可以使用:

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'

答案 4 :(得分:6)

你可以从information_schema.table_constraints这样得到它:

SELECT * 
FROM   information_schema.table_constraints
WHERE  table_schema = schema()
AND    table_name = 'table_name';

答案 5 :(得分:3)

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

 SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';

答案 6 :(得分:2)

不幸的是,MySQL不支持SQL检查约束。当您在查询中定义它们时,它们将被忽略。

答案 7 :(得分:0)

在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;
...