在mysql创建如下表的时候,提示错误,请大家帮忙看看,谢谢!mysql>create table Course(
Cno char(4) primary key,
Cname CHAR(40),
Cpno char(4),
Ceredit snallint,
FOREIGN KEY Cpno REFERENCES Course(Cno)
);无法创建成功,提示外键这行出错,这个是<数据库系统概论>里面创建课程表的例子。谁帮忙解答下,谢谢!

解决方案 »

  1.   

    smallint写错了。请忽略,谢谢!
      

  2.   

    为了建立两个MySQL表之间的一个外键关系,必须满足以下三种情况:    * 两个表必须是InnoDB表类型。
        * 使用在外键关系的域必须为索引型(Index)。
        * 使用在外键关系的域必须与数据类型相似。
      

  3.   


    mysql> create table Course( 
    -> Cno char(4) primary key,                                                    
    -> Cname char(40),                                                             
    -> Cpno char(4),  
    /*表内创建索引*/                                                               
    -> INDEX using BTREE (Cpno), 
    -> Ceredit smallint,                                                           
    -> foreign key Cpno references Course(Cno))                                     
    -> ENGINE=InnoDB;                                                           
    ERROR 1064 (42000): You have an error in your SQL syntax; 
    check the manual that corresponds to your MySQL server version for the right syntax to use near 'references Course(Cno))
    engine=InnoDB; 谢谢楼上2位的回复,我根据WWWWA的意见,参考了mysql官方手册,但是还是没成功。错误提示如上所示,请帮忙看看,谢谢!
      

  4.   

    CREATE TABLE Course( 
     Cno CHAR(4) PRIMARY KEY,                                                    
     Cname CHAR(40),                                                             
     Cpno CHAR(4),  
    /*表内创建索引*/                                                               
     INDEX USING BTREE (Cpno), 
     Ceredit SMALLINT,                                                           
     FOREIGN KEY (Cpno) REFERENCES Course(Cno))                                     
     ENGINE=INNODB;                         
      

  5.   

    create table Course( 
    Cno char(4) primary key,                                                    
    Cname char(40),                                                             
    Cpno char(4),  
    INDEX using BTREE (Cpno), 
    Ceredit smallint,                                                           
    foreign key (Cpno) references Course(Cno)
    ) ENGINE=InnoDB;     
    语法说明上有这个()
      

  6.   

    确实是这样,非常谢谢2位!
    当我在创建SC表的时候create table SC(
    Sno char(7),
    index using btree (Sno),
    Cno char(4),
    index using btree (Cno),
    Grade smallint,
    primary key(Sno,Cno),
    foreign key (Sno) references student(Sno),
    foreign key (Cno) references Course(Cno))
    engine=Innodb;这个提示了"cant`t create table databook.sc errno 150"
    当我将Sno char(7)改为Sno char(9)的时候,可以创建成功,难道char(7)和char(9)不是同一种数据类型?mysql刚学,谢谢!