如何在MySQL中使用关键字'references'?

时间:2010-02-03 13:44:44

标签: mysql reference

创建表时如何使用references关键字?

假设我要创建两个表personhobby,我希望爱好表ID引用人的ID?

person table
- id
- name

hobby
- id
- person_id
- hobby_name

我该怎么做?

5 个答案:

答案 0 :(得分:31)

与此类似地创建爱好表:

CREATE TABLE hobby (
  id INT NOT NULL AUTO_INCREMENT,
  person_id INT NOT NULL,
  hobby_name VARCHAR(255),
  PRIMARY KEY(id),
  FOREIGN KEY(person_id) REFERENCES person(id))

答案 1 :(得分:6)

以下是directly from MySQL website示例:

CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT, parent_id INT,
                    INDEX par_ind (parent_id),
                    FOREIGN KEY (parent_id) REFERENCES parent(id)
                    ON DELETE CASCADE
) ENGINE=INNODB;

答案 2 :(得分:6)

CREATE TABLE person (person_id INT NOT NULL, 
PRIMARY KEY (person_id));

CREATE TABLE hobby (hobby_id INT NOT NULL, person_id INT NOT NULL,
PRIMARY KEY(hobby_id),
FOREIGN KEY(person_id) REFERENCES person(person_id));

references关键字用于定义外键关系中使用的表和列。这意味着爱好表中的记录必须具有person表中存在的person_id,否则在插入时您将收到该键不存在的错误。

要回答上面关于“ON DELETE CASCADE”的内容的问题,它允许您删除父键记录(亲自)及其相应的子记录(爱好),而不必先删除所有子记录。 / p>

为了澄清,如果您有子记录附加到主键条目,并且您尝试删除主键条目,如:

DELETE FROM person where person_id = 1;

没有DELETE ON CASCADE,如果业余爱好中的任何记录的person_id为1,您将收到错误。在执行上述删除之前,您将首先删除所有这些记录。使用DELETE ON CASCADE时,上述删除将成功并自动删除链接到从主键表中删除的person_id的表爱好表中的任何和所有记录。

答案 3 :(得分:1)

引用关键字实际上用于了解外键的来源。 这意味着哪个是表名,该表中的名称是什么。

我说这是对的:

def autv(self):
    if not self._utv:
        raise FileNotFoundError("No data loaded.")
    ut = self._utv
    try:
        self._utv = (ut
                                    .rdd
                                    .map(lambda x: (x.id, (x.t, x.w)))
                                    .reduceByKey(lambda accum, x: (accum[0] + x[0], accum[1] + x[1]))
                                    .map(lambda row: Row(user_id=row[0],
                                                         weight=row[1][1],
                                                         topics=row[1][0]))
                                    .toDF()).cache()
        return self
    except AttributeError as e:
        logging.error(e)
    return None

然后,看看这一行: FOREIGN KEY(person_id)参考人(person_id));

这里person_id是外键,它来自人员表,在该表中,它的名字是person_id ... 就是这样。

答案 4 :(得分:-1)

以下是如何使用它的示例。

create table hobby(id int references person(id),person_id int,hobby_varchar(20), primary key(id));

就其含义而言,references允许我们指定外键引用的目标表列。