首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在mysql上创建外键

无法在mysql上创建外键
EN

Stack Overflow用户
提问于 2018-12-15 01:31:07
回答 2查看 57关注 0票数 0

嗨,我正在尝试创建一个简单的MySQL数据库。我编写了以下脚本

代码语言:javascript
复制
CREATE TABLE office (
   num_office varchar(10) NOT NULL,
   name varchar(45),
   address varchar(45),
   numder varchar(4),
   city varchar(45)
 );



CREATE TABLE office_phone(
n_office varchar(10) NOT NULL,
phone varchar(15) NOT NULL,
PRIMARY KEY(n_office,phone),
FOREIGN KEY (n_office) REFERENCES office(num_office)
ON DELETE RESTRICT 
ON UPDATE CASCADE
);

但出现错误代码1822。我怎么才能修复它?在andvance中谢谢你

EN

回答 2

Stack Overflow用户

发布于 2018-12-15 01:37:22

外键只能引用作为主键的列,或者至少在它们上有一个索引(感谢@Uueerdo)。例如:

代码语言:javascript
复制
ALTER TABLE OFFICE ADD CONSTRAINT offnum_unq UNIQUE (NUM_OFFICE);

这将强制被引用的列具有唯一的值,并在其上创建索引。或者你也可以这样做:

代码语言:javascript
复制
CREATE INDEX offnum_idx ON OFFICE(NUM_OFFICE);

现在,您的第二个CREATE应该可以工作了。

票数 1
EN

Stack Overflow用户

发布于 2019-01-02 00:39:37

引用列(作为外键引用的列)应添加索引。您可以将索引添加到"office“表中的"num_office”列,并尝试创建"office_phone“表。请参考以下查询

创建表"office“,并将索引添加到"num_office”

代码语言:javascript
复制
CREATE TABLE office (
  num_office varchar(10) NOT NULL,
  name varchar(45),
  address varchar(45),
  numder varchar(4),
  city varchar(45),
  INDEX num_office_idx (num_office)

);

或者,可以在创建"office“表之后使用以下命令添加索引

代码语言:javascript
复制
ALTER TABLE office Add Index num_office_indx (num_office);

这将允许您使用指向"office“表的"num_office”列的引用键来成功创建表"office_phone“。

代码语言:javascript
复制
CREATE TABLE office_phone(
 n_office varchar(10) NOT NULL,
 phone varchar(15) NOT NULL,
 PRIMARY KEY(n_office,phone),
 FOREIGN KEY (n_office) REFERENCES office(num_office)
 ON DELETE RESTRICT 
 ON UPDATE CASCADE
);

有关更多详细信息,请参阅this页面

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53784397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档