2011-02-23 10 views
31

私はSQLを勉強しています。私が気になるのは、テーブルにすべての制約を見つけることができないようです。私はその後、その後、MySQL:テーブルのすべての制約を表示するにはどうすればよいですか?

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

show create table t2; 
でALL(4)制約を参照しようとした

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); 

に制約を追加しました

、次に

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

し、最終的に

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

しかし、これらのショーのいずれもすべての4つの制約。誰も私にそれらのすべてを見る方法を教えてもらえますか?

ありがとうございます!

+1

あなたが実行したクエリの結果は何ですか? * P.S私が聞いたことは、mysqlがチェック制約をサポートしていないということです。 – user194076

+0

あなたはCONSTRAINT_COLUMN_USAGEを試しましたか? – user194076

+0

情報スキーマのビューではなく、直接システムテーブルに問い合わせることができます – user194076

答えて

18

MySQLはチェック制約をサポートしていません。 SQLは解析され、受け入れられ、静かに無視されます。

チェック制約は作成されないため、表示されません。

3

外部キー制約は、次のコマンドからの出力のコメント欄に記載されています:

SHOW TABLE STATUS FROM db_name LIKE 'tbl_name'; 
+0

これは私のためには機能しませんでした。 5.5.35-0ubuntu0.12.04.2):コメントフィールドは空白ですが、RR Madhavの解決策では制約が列として返されます。 – msanford

10

あなたは、この使用することができます。この

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' 

それとも、より良いフォーマットされた出力用の:

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

きれいで、きれいで、最小の解決策。 –

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

輸出SQLでデータベーステーブル:あなたはこのようinformation_schema.table_constraintsから選択を使用することができます。

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

現在のテーブルの説明とその制約を確認する最も簡単な方法は、使用することです:

SHOW CREATE TABLE mytable;

これは、あなたに正確に何が表示されますSQLは、現在の形式でテーブル構造を定義するために入力されます。

1

残念ながら、MySQLはSQLチェック制約をサポートしていません。クエリでそれらを定義すると、無視されます。

関連する問題