嗨,我正在尝试创建一个简单的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。我怎么才能修复它?在andvance中谢谢你
发布于 2018-12-15 01:37:22
外键只能引用作为主键的列,或者至少在它们上有一个索引(感谢@Uueerdo)。例如:
ALTER TABLE OFFICE ADD CONSTRAINT offnum_unq UNIQUE (NUM_OFFICE);这将强制被引用的列具有唯一的值,并在其上创建索引。或者你也可以这样做:
CREATE INDEX offnum_idx ON OFFICE(NUM_OFFICE);现在,您的第二个CREATE应该可以工作了。
发布于 2019-01-02 00:39:37
引用列(作为外键引用的列)应添加索引。您可以将索引添加到"office“表中的"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));
或者,可以在创建"office“表之后使用以下命令添加索引
ALTER TABLE office Add Index num_office_indx (num_office);这将允许您使用指向"office“表的"num_office”列的引用键来成功创建表"office_phone“。
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页面
https://stackoverflow.com/questions/53784397
复制相似问题