mysql 语句建表出错,不能建立外键,希望大神帮我看看,代码如下:

DROP TABLE IF EXISTS `t_1` ;
CREATE TABLE `t_1` (
`couId` INT(11) NOT NULL AUTO_INCREMENT,
`couNo` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`couId`)
)
DROP TABLE IF EXISTS `t_2` ;
CREATE TABLE `t_2` (
`couId2` INT(11) NOT NULL AUTO_INCREMENT,
`couNo2` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`couId2`)
)
DROP TABLE IF EXISTS `t_choosecou` ;
CREATE TABLE `t_choosecou` (
`sNo` VARCHAR(20) NOT NULL ,
`couNo` VARCHAR(20) NOT NULL,
`socre` INT(3) DEFAULT NULL,
PRIMARY KEY (`sNo` ,`couNo`),
FOREIGN KEY(sNo)REFERENCES t_2(couNo2)
)

1 t_2(couNo2) ---必须要有索引 解决过程如下:

[email protected] : test 10:36:59> DROP TABLE IF EXISTS `t_choosecou` ;
Query OK, 0 rows affected, 1 warning (0.01 sec)

[email protected] : test 10:36:59> CREATE TABLE `t_choosecou` (
-> `sNo` VARCHAR(20) NOT NULL ,
-> `couNo` VARCHAR(20) NOT NULL,
-> `socre` INT(3) DEFAULT NULL,
-> PRIMARY KEY (`sNo` ,`couNo`),
-> FOREIGN KEY(sNo)REFERENCES t_2(couNo2)
-> );
ERROR 1005 (HY000): Can't create table 'test.t_choosecou' (errno: 150)
[email protected] : test 10:37:00>
[email protected] : test 10:38:21> alter table t_2 add key ind_n2(couNo2);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

[email protected] : test 10:38:47>
[email protected] : test 10:38:54> CREATE TABLE `t_choosecou` (
-> `sNo` VARCHAR(20) NOT NULL ,
-> `couNo` VARCHAR(20) NOT NULL,
-> `socre` INT(3) DEFAULT NULL,
-> PRIMARY KEY (`sNo` ,`couNo`),
-> FOREIGN KEY(sNo)REFERENCES t_2(couNo2)
-> );
Query OK, 0 rows affected (0.01 sec)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-12
把错误信息一起发出来吧,这样不好找的。从语句来看,目测是`sNo` VARCHAR(20) NOT NULL ,和`couId2` INT(11) NOT NULL AUTO_INCREMENT,两个列表数据类型不一样,所以谝译不通过。追问

FOREIGN KEY(sNo)REFERENCES t_2(couNo2)
sno是`sNo` VARCHAR(20) NOT NULL ,而couNo2是`couNo2` VARCHAR(20) DEFAULT NULL,
两个数据类型是一样的,报出错误1005不能建立`t_choosecou`表。

追答

`couId2` INT(11) NOT NULL AUTO_INCREMENT,
这个是自增的不能改为 VARCHAR(20) 吧

追问

表 `t_choosecou`的建立和表t_2的`couId2`没有关系是根据表t_2的`couNo2`来建立外键的吧

相似回答