4

mysqlを使用してどの列がCASCADEに設定されているかを知る方法があるかどうか知りたいです。DESCTABLEを実行します。明らかなものは何も生成されていないようです。助言がありますか?

4

2 に答える 2

4

MySQL 5.1.10以降、以下に結合することにより、INFORMATION_SCHEMAテーブルからこの情報を取得できます。REFERENTIAL_CONSTRAINTSKEY_COLUMN_USAGE

SELECT kcu.COLUMN_NAME
FROM   INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
  JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
 USING (CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME)
WHERE  'CASCADE' IN (rc.DELETE_RULE, rc.UPDATE_RULE)
   AND kcu.TABLE_SCHEMA = DATABASE()
   AND kcu.TABLE_NAME = 'my_table'
于 2012-08-31T05:39:11.900 に答える
2

次のものを使用できます。

show create table tableName;

これにより、カスケード削除への参照を含む作成テーブルが出力されます。

ドキュメントから引っ掛かった例:

mysql> SHOW CREATE TABLE ibtest11c\G
*************************** 1. row ***************************
       Table: ibtest11c
Create Table: CREATE TABLE `ibtest11c` (
  `A` int(11) NOT NULL auto_increment,
  `D` int(11) NOT NULL default '0',
  `B` varchar(200) NOT NULL default '',
  `C` varchar(175) default NULL,
  PRIMARY KEY  (`A`,`D`,`B`),
  KEY `B` (`B`,`C`),
  KEY `C` (`C`),
  CONSTRAINT `0_38775` FOREIGN KEY (`A`, `D`)
REFERENCES `ibtest11a` (`A`, `D`)
ON DELETE CASCADE ON UPDATE CASCADE,    // <--- This is what you are looking for
  CONSTRAINT `0_38776` FOREIGN KEY (`B`, `C`)
REFERENCES `ibtest11a` (`B`, `C`)       // <--- This is what you are looking for
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB CHARSET=latin1
1 row in set (0.01 sec)
于 2012-08-31T05:35:39.360 に答える