日期:2014-05-20  浏览次数:20826 次

请教下MYSQL的外键的问题。
create table studcourse
(stucourseid int primary key auto_increment,
 sid int references student(sid),
 cid int references course(cid),
 grade int(3) not null

 );

这样子创建,设置了外键么。这是奥忍考的,可是我电脑上只有MYSQL,本来这么写也没问题。

结果我SHOW create table studcourse的时候,没有看到外键的信息。
studcourse | CREATE TABLE `studcourse`
`stucourseid` int(11) NOT NULL AUTO_IN
`sid` int(11) DEFAULT NULL,
`cid` int(11) DEFAULT NULL,
`grade` int(3) NOT NULL,
PRIMARY KEY (`stucourseid`)
ENGINE=InnoDB DEFAULT CHARSET=utf8 |

但是接着,我想添加外键。
alter table studcourse add foreign key(sid) references student(cid);

结果提示错误

Can't create table 'hibernate.#sql-7c8_1' (errno: 150)



------解决方案--------------------
程序里很少用外键了
------解决方案--------------------
估计你使用的是MyISAM 数据引擎,所以不支持外键,你可以将数据库引擎改为innodb试一下应该就可以了。
以你的代码为例

reate table studcourse(
 stucourseid int primary key auto_increment,
 sid int references student(sid),
 cid int references course(cid),
 grade int(3) not null,
 CONSTRAINT FOREIGN KEY (`sid`) references `student`(`sid`),
 CONSTRAINT FOREIGN KEY (`cid`) references `course`(`cid`)
 )engine=innoDB;

执行这上面的sql之前要保证student 和course这两个表也是innoDB才行,至于怎么修改数据库引擎可以在网上找。




create table t5 (c1 int ,c2 int, CONSTRAINT FOREIGN key (`c2`) references `t3`(`c1`))engine=innoDB
------解决方案--------------------
引用:
估计你使用的是MyISAM 数据引擎,所以不支持外键,你可以将数据库引擎改为innodb试一下应该就可以了。
以你的代码为例

reate table studcourse(
 stucourseid int primary key auto_increment,
 sid int references student(sid),