我在MySQL数据库的从表里面添加(alter)外键,语句执行了,可是约束关系却没有生成。请问是什么原因?我的MySQL版本是5.5,GUI为SQLyog Enterprise。MySQLGUI外键 约束关系

解决方案 »

  1.   

    提示什么,
    SHOW CREATE TABLE XX
      

  2.   


    没有提示,语句是执行了,因为SHOW CREATE TABLE XX 时,有生成KEY。不过在点击查看关系按钮时,出现附件的提示。
      

  3.   

    SHOW CREATE TABLE 表名\G;
      

  4.   

    必须是INNODB的表才能建立外键关系
      

  5.   

    生成了key,就是实际在insert的时候,约束关系没有生效。
      

  6.   

    "必须是INNODB的表才能建立外键关系 " 就是说我的表的引擎必须是INNODB?目前貌似我的数据库的引擎为MYISAM,我需要怎么修改呢?
      

  7.   

    alter table tbname engine=innodb
      

  8.   

    关键表的引擎是innodb才能支持外键约束的。
      

  9.   

    MYISAM还不支持事务呢,幸好这次没造成数据丢失
    万一你想让他rollback,结果……哈哈
      

  10.   

    为什么我使用了该句后在查看表的relationships/Foreign Keys时,还是会出现截图中的提示?约束关系似乎也还是不行?
      

  11.   

    示例:
    CREATE TABLE B
      (
         rtuid                VARCHAR(10) NOT NULL ,
        ctuip                VARCHAR(20)  NULL ,
         tuid                 VARCHAR(10)  NULL ,
         slotid               VARCHAR(10)  NULL ,
         `NAME`                VARCHAR(100) ,
         description          VARCHAR(255)  ,
         PRIMARY KEY(rtuid),
         KEY ( ctuip, tuid, slotid)) ;CREATE TABLE A
     (  rtuid                VARCHAR(10) NOT NULL ,
        ctuip                VARCHAR(20)   ,
        tuid                 VARCHAR(10)   ,
        slotid               VARCHAR(10)   ,
        portid               VARCHAR(10)   , 
        Bctuip            VARCHAR(20) NULL,
        Btuid             VARCHAR(10) NULL,
        Bslotid           VARCHAR(10) NULL,
        `NAME`                 VARCHAR(100) ,
        description          VARCHAR(255) ,
        PRIMARY KEY (rtuid),
        KEY (Bctuip, Btuid, Bslotid),
        CONSTRAINT fk_A_id FOREIGN KEY (Bctuip, Btuid, Bslotid)
        REFERENCES B (ctuip, tuid, slotid) ON DELETE SET NULL ON UPDATE RESTRICT);
      

  12.   

    新手上路,不太明白版主的示例的意思?示例里面两个主键相同,索引关联,我试了之后还是不行,我插入的值如截图。请问版主这是什么原因?另外我在插入主键为4的值时有使用alter table tbname engine=innodb。
      

  13.   


    上面附截图的表格的建表语句就是你发的示例:
    CREATE TABLE B
      (
         rtuid                VARCHAR(10) NOT NULL ,
        ctuip                VARCHAR(20)  NULL ,
         tuid                 VARCHAR(10)  NULL ,
         slotid               VARCHAR(10)  NULL ,
         `NAME`                VARCHAR(100) ,
         description          VARCHAR(255)  ,
         PRIMARY KEY(rtuid),
         KEY ( ctuip, tuid, slotid)) ;
    CREATE TABLE A
     (  rtuid                VARCHAR(10) NOT NULL ,
        ctuip                VARCHAR(20)   ,
        tuid                 VARCHAR(10)   ,
        slotid               VARCHAR(10)   ,
        portid               VARCHAR(10)   , 
        Bctuip            VARCHAR(20) NULL,
        Btuid             VARCHAR(10) NULL,
        Bslotid           VARCHAR(10) NULL,
        `NAME`                 VARCHAR(100) ,
        description          VARCHAR(255) ,
        PRIMARY KEY (rtuid),
        KEY (Bctuip, Btuid, Bslotid),
        CONSTRAINT fk_A_id FOREIGN KEY (Bctuip, Btuid, Bslotid)
        REFERENCES B (ctuip, tuid, slotid) ON DELETE SET NULL ON UPDATE RESTRICT); 我最初提问题的建表语句是仿照:
    create table z_laopo  (id int(5) primary key,
                           name char(20),
                           age int(3),
                           zhiye char(20));  ----创建老婆表
    create table z_nanren(id int(5) primary key,
                           name char(20),
                           age int(3),
                           laopo_id int(5),
                           foreign key(laopo_id) references z_laopo(id));
                                                         -------创建男士表
      

  14.   

    用你的代码,在5。.5下测试没有问题
    CREATE TABLE `z_laopo` (
      `id` int(5) NOT NULL,
      `name` char(20) DEFAULT NULL,
      `age` int(3) DEFAULT NULL,
      `zhiye` char(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    CREATE TABLE `z_nanren` (
      `id` int(5) NOT NULL,
      `name` char(20) DEFAULT NULL,
      `age` int(3) DEFAULT NULL,
      `laopo_id` int(5) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `laopo_id` (`laopo_id`),
      CONSTRAINT `z_nanren_ibfk_1` FOREIGN KEY (`laopo_id`) REFERENCES `z_laopo` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
      

  15.   


    目前我这边建表也是没有问题,就是我在插入数据的时候发现我插入下面的语句:
    insert into z_laopo values (1,'fengjie',18,'accontant');
    insert into z_laopo values (2,'cangjingkong',25,'teacher');
    ----向老婆表插入记录
    insert into z_nanren values (1,'nanren_1',24,1)
    insert into z_nanren values (2,'nanren_2',24,2)
    insert into z_nanren values (3,'nanren_3',24,3)
     ----向男士表插入记录
    insert into z_nanren values (3,'nanren_3',24,3)这据应该插不进去,可是我这边却可以插进去?
    另外你那边没有问题,很有可能是你数据库引擎默认为InnoDB.
    请指教!
      

  16.   

    从开始就说过,外键只能用在INNODB引擎的,否则没有作用
      

  17.   

    是啊 所以我现在两个表分别用了alter table tbname engine=innodb,然后插入insert into z_nanren values (4,'nanren_3',24,4)还是还可以插进去,然后说相当于alter table tbname engine=innodb没起作用啊?
      

  18.   

    alter 完表后,你需要添加外键!