想请问一下,在同一个表内可以创建多个索引和外键吗?
比如一个‘教师_课程_学生’表里面有教师ID,课程ID,学生ID,我想把这3个字段和‘教师表’的ID,‘课程表’的ID。‘学生表’的ID关联起来,请问如何实现,谢谢

解决方案 »

  1.   

    create table 教师_课程_学生(
    教师ID int,
    课程ID int,
    学生ID int,
    CONSTRAINT fk_1 FOREIGN KEY  (教师ID) REFERENCES 教师表(ID),
    CONSTRAINT fk_2 FOREIGN KEY  (课程ID) REFERENCES 课程表(ID),
    CONSTRAINT fk_3 FOREIGN KEY  (学生ID) REFERENCES 学生表(ID)
    )
      

  2.   

    用你写的代码可以实现一个‘教师_课程_学生’关系表里面有教师ID,课程ID,学生ID,把这3个字段和‘教师表’的ID,‘课程表’的ID。‘学生表’的ID关联起来,也就是这个3个字段都是参照教师表,课程表和学生表里面的ID,假如学生表ID改变了,关系表中的学生ID也会跟着改变吗?
    用建立索引吗?还是直接建立外键就可以了?
      

  3.   

    不会改变,而且学生表中的数据MYSQL不会让你改的,MYSQL发现了有外键关联自己,会禁止更改数据
    除非你使用的不是INNODB,在Linux下MySql默认的表类型不是INNODB,不会启用外键功能,windows下则默认是INNODB
      

  4.   


    看来楼主根本没兴趣自己看一下MYSQL手册中的语法介绍啊。
    请自行到MYSQL的手册中看一下这些语法。 CASCADE  可以满足你的要求。
    reference_definition:
        REFERENCES tbl_name (index_col_name,...)
          [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
          [ON DELETE reference_option]
          [ON UPDATE reference_option]reference_option:
        RESTRICT | CASCADE | SET NULL | NO ACTION
    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html