0

私はMysqlでこのスクリプトを使用しています:

CONSTRAINT `customer_contact_geolocation_id_fk` FOREIGN  KEY(`customer_contact_geolocation`, `customer_contact_company_id`) 
REFERENCES `geolocation` (`geolocation_id`, `geolocation_company_id`) ON DELETE NO ACTION
)     
ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

これは create table ステートメントの一部です。インポートすると、エラーが表示されません。しかし、ワークベンチでテーブルを確認すると、外部キーが作成されていません。また、私のアプリでは機能していません。このコンポジット fk を機能させるには、設定を変更する必要がありますか?

より単純なスクリプトを追加します。

DROP TABLE IF EXISTS `companies`;
CREATE TABLE `companies` (
`company_id` int(11) NOT NULL AUTO_INCREMENT,
`company_name` varchar(200) NOT NULL,
`company_address` varchar(200) NOT NULL,
`company_tax_id` varchar(200) NOT NULL,
`company_minimun_margin` float NOT NULL,
`company_currency` varchar(20) NOT NULL,
`company_fiscal_currency` varchar(20) NOT NULL,
`company_max_rows` int(11) DEFAULT NULL,
`company_max_file_size` int(11) DEFAULT NULL,
PRIMARY KEY (`company_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `geolocation`;

CREATE TABLE `geolocation` (
`geolocation_id` varchar(20) NOT NULL,
`geolocation_company_id` int(11) NOT NULL,
`geolocation_name` varchar(200) NOT NULL,
`geolocation_parent` varchar(20) DEFAULT NULL,
`geolocation_child` varchar(1) NOT NULL,
PRIMARY KEY (`geolocation_id`,`geolocation_company_id`),
KEY `com_id_dem_com_id_fk` (`geolocation_company_id`),
CONSTRAINT `com_id_dem_com_id_fk` FOREIGN KEY (`geolocation_company_id`) REFERENCES    `companies` (`company_id`) ON DELETE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

次の fk を使用すると、fk はワークベンチに表示されません (次の結果が表示されます:

     10:18:43   ALTER TABLE `geolocation` ADD FOREIGN KEY (`geolocation_parent`, `geolocation_company_id`) REFERENCES `geolocation` (`geolocation_id`, `geolocation_company_id`)    0 row(s) affected Records: 0  Duplicates: 0  Warnings: 0    0.136 sec

)

ALTER TABLE `geolocation`
ADD FOREIGN KEY (`geolocation_parent`, `geolocation_company_id`)
REFERENCES `geolocation` (`geolocation_id`, `geolocation_company_id`);

この fk に変更すると:

ALTER TABLE `geolocation`
ADD FOREIGN KEY (`geolocation_parent`)
REFERENCES `geolocation` (`geolocation_id`);

すべてがうまく機能しますが、コンポジット fk が必要です。

前もって感謝します。

よろしく、ダニエル

4

1 に答える 1

0

問題は mysql ではなく、Mysql Workbench にありました。Workbench は fk を表示しませんが、存在します。Toad を試してみましたが、それが表示されます。また、「SHOW CREATE TABLE tbl_name」を使用すると、目的の出力が表示されます。

助けてくれてありがとう。

よろしく、ダニエル

于 2013-10-14T20:02:41.450 に答える