无法在mysql

时间:2018-12-14 17:31:07

标签: mysql

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

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。 我该如何解决? 谢谢您

2 个答案:

答案 0 :(得分:1)

外键只能引用作为主键或至少具有索引的列(感谢@Uueerdo)。例如:

ALTER TABLE OFFICE ADD CONSTRAINT offnum_unq UNIQUE (NUM_OFFICE);

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

CREATE INDEX offnum_idx ON OFFICE(NUM_OFFICE);

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

答案 1 :(得分:1)

引用列(您引用为外键的列)应在其中添加索引。您可以将索引添加到“办公室”表中的“ num_office”列,然后尝试创建“ office_phone”表。请参考以下查询

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

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)

);

或者您可以在创建“办公室”表后使用添加索引

ALTER TABLE office Add Index num_office_indx (num_office);

这将使您可以成功创建带有引用键的“ office_phone”表,该引用键指向“ office”表的“ num_office”列。

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页以获取更多详细信息