SHOW CREATE TABLE
は私が期待しているように外部キー制約を表示していません。実証するためにSHOW CREATE TABLEの出力に外部キーの制約がありません
、ここMySQL manualからの例です:
CREATE TABLE parent (
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (
id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
) ENGINE=INNODB;
mysql> SHOW CREATE TABLE child\G
*************************** 1. row ***************************
Table: child
Create Table: CREATE TABLE "child" (
"id" int(11) default NULL,
"parent_id" int(11) default NULL,
KEY "par_ind" ("parent_id")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
その出力では、私のようなものを参照すると予想しているでしょう:その作成テーブル出力に
CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`)
REFERENCES `parent` (`id`) ON DELETE CASCADE
をしかしはっきりそれはありません。
制約は、しかし、存在するように見えるん:
mysql> SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE table_schema=database()\G
*************************** 1. row ***************************
CONSTRAINT_CATALOG: NULL
CONSTRAINT_SCHEMA: test_fk
CONSTRAINT_NAME: child_ibfk_1
TABLE_CATALOG: NULL
TABLE_SCHEMA: test_fk
TABLE_NAME: child
COLUMN_NAME: parent_id
ORDINAL_POSITION: 1
POSITION_IN_UNIQUE_CONSTRAINT: 1
REFERENCED_TABLE_SCHEMA: test_fk
REFERENCED_TABLE_NAME: parent
REFERENCED_COLUMN_NAME: id
*************************** 2. row ***************************
CONSTRAINT_CATALOG: NULL
CONSTRAINT_SCHEMA: test_fk
CONSTRAINT_NAME: PRIMARY
TABLE_CATALOG: NULL
TABLE_SCHEMA: test_fk
TABLE_NAME: parent
COLUMN_NAME: id
ORDINAL_POSITION: 1
POSITION_IN_UNIQUE_CONSTRAINT: NULL
REFERENCED_TABLE_SCHEMA: NULL
REFERENCED_TABLE_NAME: NULL
REFERENCED_COLUMN_NAME: NULL
2 rows in set (0.01 sec)
mysql> SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE table_schema=database()\G
*************************** 1. row ***************************
CONSTRAINT_CATALOG: NULL
CONSTRAINT_SCHEMA: test_fk
CONSTRAINT_NAME: child_ibfk_1
TABLE_SCHEMA: test_fk
TABLE_NAME: child
CONSTRAINT_TYPE: FOREIGN KEY
*************************** 2. row ***************************
CONSTRAINT_CATALOG: NULL
CONSTRAINT_SCHEMA: test_fk
CONSTRAINT_NAME: PRIMARY
TABLE_SCHEMA: test_fk
TABLE_NAME: parent
CONSTRAINT_TYPE: PRIMARY KEY
2 rows in set (0.01 sec)
は、私は自分のデザインの例と同じ結果を得ます。
何が起こっているのでしょうか?
UPDATE 2011-01-08:私は、これはsql_modeの変数とは何かを持っていると思います。しかし、現時点では、SHOW CREATE TABLE出力からどのモード設定で制約を除外するのか分かりません。
制約は私にはOKを示します。どのMySQLバージョンを使用していますか?テーブルを作成するときにエラーが発生していませんか? – Quassnoi