iteye_15704 2009-02-12 02:24
浏览 388
已采纳

mysql5.0设置外键奇怪报错

debian mysql5.0

create table parent( id int not null primary key ) engine = innodb;
create table child(
id int ,
parent_id int,
index par_id (parent_id),
foreign key (parent_id) references parent(id)
) engine=innodb;

这个是手册上的例子,没有问题,通过

DROP TABLE IF EXISTS myweb_kind;
CREATE TABLE IF NOT EXISTS myweb_kind (
id tinyint(4) unsigned NOT NULL auto_increment PRIMARY KEY,
kind char(20) NOT NULL
) ENGINE=INNODB DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

-- 内容的子类
DROP TABLE IF EXISTS myweb_category;
CREATE TABLE IF NOT EXISTS myweb_category (
id tinyint(4) unsigned NOT NULL auto_increment PRIMARY KEY,
category char(20) NOT NULL,
kind_id tinyint(4) NOT NULL,
INDEX (kind_id),
FOREIGN KEY (kind_id) REFERENCES myweb_kind(id)
) ENGINE=INNODB DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

can't create table './myweb/myweb_category.dfm

这是我的例子,错误信息如上
一样的用户,一样的语法(exist之类的去掉也是一样问题)

我又用了django的orm试了一下,
django把这项工作分为三步
两个create,最后再alter category
我用sqlall 把语句打出来,然后自己在控制台里输入,还是报错,郁闷坏了

[b]问题补充:[/b]
index是不能去掉的,mysql规定了,使用外键的列必须是索引的,根据CU上的回答,这个问题解决了,外键列与引用表中的列必须是相同的数据结构,完全相同,所以,还得加上unsigned,这样就可以了

只是,不知道该怎么算分,自己给自己么
[b]问题补充:[/b]
呵呵,没见过这么求分的,其实我也没几分,不过重要的是共同进步

  • 写回答

2条回答 默认 最新

  • 马勒格彼得 2009-02-13 08:56
    关注

    才五分而已,你就给我吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用