gpt4 book ai didi

mysql - 关于mysql建表的几个问题

转载 作者:行者123 更新时间:2023-11-29 01:17:30 24 4
gpt4 key购买 nike

CREATE TABLE favorite_food(
person_id SMALLINT UNSIGNED,
food VARCHAR(20),
CONSTRAINT pk_favorite_food PRIMARY KEY(person_id,food),
CONSTRAINT fk_fav_food_person_id FOREIGN KEY (person_id)
REFERENCES person (person_id)
);

我是 MySQL 的新手,完全来自 HTML 和 JS 背景。我在这里有几个问题。

  1. 为什么我们需要给 CONSTRAINT 一个像“pk_favorite_food”这样的名称。其背后的目的和用途是什么?
  2. 引用文献是什么意思?
  3. CONSTRAINT pk_favorite_food PRIMARY KEY(person_id,food),为什么我们在这里添加两列作为主键。

最佳答案

首先

Why do we need to give a CONSTRAINT a name like "pk_favorite_food". What is the purpose and use behind it?

不需要为约束分配一个名称,如果您不这样做,MySQL 会在内部为您分配一个名称。它只是一个标识符,这使得以后修改或删除约束更容易。

如果您创建没有该约束名称的表,然后执行 SHOW CREATE TABLE favodite_food;,您将看到一个与您在上面定义的名称有点相似的名称,但由 MySQL 自动分配。自动创建的标识符可能类似于主键的 idx_favorite_foodFOREIGN KEY 约束的 favorite_food_ibfk_1

第二

What does the REFERENCES mean?

REFERENCESFOREIGN KEY 约束中使用的关键字,用于指示 FOREIGN KEY 列引用了哪个表中的列。读取 the MySQL reference on FOREIGN KEY constraints 为完整的句法细节。在您的示例中,它看起来有点奇怪,因为它出现在自己的行中。真的,它属于FOREIGN KEY定义。

在它所属的那一行看到可能会更清楚一点:

/* REFERENCES is a component of this FOREIGN KEY definition */
CONSTRAINT fk_fav_food_person_id FOREIGN KEY (person_id) REFERENCES person (person_id)

第三

CONSTRAINT pk_favorite_food PRIMARY KEY(person_id,food), Why do we add two columns as Primary Key here.

PRIMARY KEY 的 2 部分称为 复合键。当您不需要单个标识列(如自动增量值)时使用它,但这两列的组合在表中必须是唯一的,因此也可以唯一标识表中的行。因此,在上面的示例中,它强制执行这样一个事实,即任何 person_id 都不能有两行具有相同的 food:

INSERT INTO favorite_food (person_id, food) VALUES (1, 'apples'); /* works */
INSERT INTO favorite_food (person_id, food) VALUES (1, 'bananas'); /* works */
INSERT INTO favorite_food (person_id, food) VALUES (1, 'apples'); /* Fails! Person 1 already has apples and the pair must be unique */

关于mysql - 关于mysql建表的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13606183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com