我想问如何通过PHP或者mysql获得一个表的外键参照情况,desc tablename、show columns from talbename只能知道该列是主键,外键,我想获得具体的情况。比方:
CREATE TABLE Users(
   ID int UNSIGNED NOT NULL auto_increment,
   RoleID int UNSIGNED NOT NULL,
   DepartmentID int UNSIGNED NOT NULL,   foreign key (RoleID) references Roles(ID),
   foreign key (DepartmentID) references Departments(ID),
   PRIMARY KEY (ID)
);
我想获得Users表的外键情况,想知道本表有哪此字段具有参照关系,参照哪个表的哪个字段。

解决方案 »

  1.   

    你能不能登录到服务器上?describe tables操作最能看清楚。
      

  2.   

    我一般是直接导出表结构(mysql或者phpmyadmin都行),因为设置过外键参照的表会提示限制导出,其实也就可以获得它实际的外键参照情况了。比如某个表使用导出会提示:ALTER TABLE `users_profile`
      ADD CONSTRAINT `users_profile_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`);
      

  3.   

    mysql>show create table `Users`;
      

  4.   

    describe tables 只可以知道哪些表是FK,不能知道具体参照哪个表的那个键,
    show create table `Users`; 只是一个表结构,同样没有参照情况。To Exbox:
    导出,能否具体讲一下,你是说导出到一个文件,再从导出文件里得到参照情况?
      

  5.   

    show create table `Users`;
    可以得到
    CREATE TABLE Users( 
      ID int UNSIGNED NOT NULL auto_increment, 
      RoleID int UNSIGNED NOT NULL, 
      DepartmentID int UNSIGNED NOT NULL,   foreign key (RoleID) references Roles(ID), 
      foreign key (DepartmentID) references Departments(ID), 
      PRIMARY KEY (ID) 
    ); 
    这个建表串,你可以利用正则解析foreign key那两行。
      

  6.   

    但是有时候获取不了。用show create table `Users`; 得到:
    CREATE TABLE Users( 
      ID int UNSIGNED NOT NULL auto_increment, 
      RoleID int UNSIGNED NOT NULL, 
      DepartmentID int UNSIGNED NOT NULL,   PRIMARY KEY  (`ID`),
      KEY `RoleID` (`RoleID`),
      KEY `DepartmentID` (`DepartmentID`)
    ); 这种情况你根本就不知道他是参照什么表哪个字段的,我比较了一下,当表是myisam引擎是会是这样,如果是innodb则会完全显示出来,这是为什么?又如何解决呢?
      

  7.   

    myisam引擎仍未支持外键,innodb才支持,so.....
      

  8.   

    不好意思,回复得太慢。但是
    CREATE TABLE Users( 
      ID int UNSIGNED NOT NULL auto_increment, 
      RoleID int UNSIGNED NOT NULL, 
      DepartmentID int UNSIGNED NOT NULL,   PRIMARY KEY  (`ID`), 
      KEY `RoleID` (`RoleID`), 
      KEY `DepartmentID` (`DepartmentID`) 
    )engine=myisam;
    一样能创建表啊,myisam是怎么处理外键的,约束关系还存在吗? 
      

  9.   

    myisam不支持外健,innodb才支持!
      

  10.   

    select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME =$tablename and CONSTRAINT_NAME LIKE 'fk_%';