【问题标题】:MYSQL #1005 - Can't create table (errno: 150)MYSQL #1005 - 无法创建表 (errno: 150)
【发布时间】:2013-04-14 13:54:44
【问题描述】:
CREATE TABLE IF NOT EXISTS `userinit` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usn` varchar(20) NOT NULL,
  `pwd` varchar(20) NOT NULL,
  `cmnd` int(9) NOT NULL,
  `dienthoai` varchar(11) NOT NULL,
  PRIMARY KEY (`id`,`usn`,`cmnd`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

这是我在 mysql 中创建的第一个表,然后我进行查询以创建我的第二个表 userinfo,如下

create table userinfo(
    cmnd int(9) primary key not null,
        ngaycapcmnd date,
        noicap varchar(50) character set utf8,
        hoten varchar(50) character set utf8 not null,
        ngaysinh date not null,
        quequan varchar(50) character set utf8,
        diachi varchar(100) character set utf8 not null,
        email varchar(100) unique not null,
        constraint fk_userinfo_userinit foreign key (cmnd) references userinit(cmnd)
)

然后当我按 OK 时显示:#1005 - 无法创建表“xbook.userinfo”(错误号:150)。 我使用最新的xampp。大家能帮我解决一下吗

【问题讨论】:

标签: mysql


【解决方案1】:

这是因为您引用的列没有单独的键,尽管它是复合键的一部分

尝试在其中添加KEY,例如

CREATE TABLE IF NOT EXISTS `userinit` 
(
  ......
  KEY (cmnd),         -- <<=== HERE
  PRIMARY KEY (`id`,`usn`,`cmnd`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

【讨论】:

  • 感谢您回答我的情况,但我认为当我添加语法时:PRIMARY KEY (id,usn,cmnd) 然后 cmnd 自动设置一个键。那里的表 userinit 是通过在 mysql 中使用 Export 生成的。
  • cmnd 没有密钥。只有由idusn 两列复合时,它才会有一个键。
  • 虽然这可以解决创建表的直接问题,但不建议引用非唯一列。
猜你喜欢
  • 2013-07-22
  • 2012-10-07
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2011-02-17
  • 2017-04-09
  • 2016-10-12
  • 1970-01-01
相关资源
最近更新 更多