3
MySQL 데이터베이스의 특정 InnoDB 테이블에서 외래 키를 프로그래밍 방식으로 찾고 싶습니다.Perl/DBI/MySQL/InnoDB를 사용하여 외래 키 정보 찾기
저는 Perl을 사용하고 있는데, 나는 $dbh->foreign_key_info
을 우연히 발견했습니다. 나는 그것을 사용하려고 시도했지만 약간 결함이있는 것 같다.
ON DELETE 및 ON UPDATE 정보를 반환 할 수는 없지만 반환 할 수는 없습니다. 또한 정기적 인 색인을 반환합니다.
도움 주셔서 감사합니다.
use strict;
use warnings;
use DBI;
use Data::Dumper;
my $dbh = DBI->connect("DBI:mysql:database=db;host=localhost", "user", "password");
my $sth = $dbh->foreign_key_info(undef, undef, undef, undef, undef, "table_name");
print Dumper $sth->fetchall_hashref("FK_NAME");
그리고 출력은 : 아직 MySQL의 드라이버에서 지원되지 않을 수 있습니다처럼
$VAR1 = {
'some_table_ibfk_3' => {
'PK_NAME' => undef,
'DEFERABILITY' => undef,
'FKTABLE_CAT' => undef,
'PKTABLE_SCHEM' => 'db',
'UNIQUE_OR_PRIMARY' => undef,
'PKTABLE_CAT' => undef,
'FKTABLE_NAME' => 'some_table',
'FKTABLE_SCHEM' => 'db',
'PKTABLE_NAME' => 'some_other_table',
'FKCOLUMN_NAME' => 'some_other_table_id',
'FK_NAME' => 'some_table_ibfk_3',
'DELETE_RULE' => undef,
'PKCOLUMN_NAME' => 'id',
'KEY_SEQ' => '1',
'UPDATE_RULE' => undef
},
'user_id_2' => {
'PK_NAME' => undef,
'DEFERABILITY' => undef,
'FKTABLE_CAT' => undef,
'PKTABLE_SCHEM' => undef,
'UNIQUE_OR_PRIMARY' => undef,
'PKTABLE_CAT' => undef,
'FKTABLE_NAME' => 'some_table',
'FKTABLE_SCHEM' => 'db',
'PKTABLE_NAME' => undef,
'FKCOLUMN_NAME' => 'some_other_table_id',
'FK_NAME' => 'user_id_2',
'DELETE_RULE' => undef,
'PKCOLUMN_NAME' => undef,
'KEY_SEQ' => '2',
'UPDATE_RULE' => undef
},
'PRIMARY' => {
'PK_NAME' => undef,
'DEFERABILITY' => undef,
'FKTABLE_CAT' => undef,
'PKTABLE_SCHEM' => undef,
'UNIQUE_OR_PRIMARY' => undef,
'PKTABLE_CAT' => undef,
'FKTABLE_NAME' => 'some_table',
'FKTABLE_SCHEM' => 'db',
'PKTABLE_NAME' => undef,
'FKCOLUMN_NAME' => 'id',
'FK_NAME' => 'PRIMARY',
'DELETE_RULE' => undef,
'PKCOLUMN_NAME' => undef,
'KEY_SEQ' => '1',
'UPDATE_RULE' => undef
},
'some_table_ibfk_1' => {
'PK_NAME' => undef,
'DEFERABILITY' => undef,
'FKTABLE_CAT' => undef,
'PKTABLE_SCHEM' => 'db',
'UNIQUE_OR_PRIMARY' => undef,
'PKTABLE_CAT' => undef,
'FKTABLE_NAME' => 'some_table',
'FKTABLE_SCHEM' => 'db',
'PKTABLE_NAME' => 'user_bk2',
'FKCOLUMN_NAME' => 'user_id',
'FK_NAME' => 'some_table_ibfk_1',
'DELETE_RULE' => undef,
'PKCOLUMN_NAME' => 'id',
'KEY_SEQ' => '1',
'UPDATE_RULE' => undef
},
'some_table_ibfk_2' => {
'PK_NAME' => undef,
'DEFERABILITY' => undef,
'FKTABLE_CAT' => undef,
'PKTABLE_SCHEM' => 'db',
'UNIQUE_OR_PRIMARY' => undef,
'PKTABLE_CAT' => undef,
'FKTABLE_NAME' => 'some_table',
'FKTABLE_SCHEM' => 'db',
'PKTABLE_NAME' => 'user_bk2',
'FKCOLUMN_NAME' => 'coach_id',
'FK_NAME' => 'some_table_ibfk_2',
'DELETE_RULE' => undef,
'PKCOLUMN_NAME' => 'id',
'KEY_SEQ' => '1',
'UPDATE_RULE' => undef
}
};
감사합니다. Joel. 부끄러운 일은 아직 완전히 구현되지 않았습니다. 여기 regexes가 ... – aidan