- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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 背景。我在这里有几个问题。
pk_favorite_food
”这样的名称。其背后的目的和用途是什么?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_food
和 FOREIGN KEY
约束的 favorite_food_ibfk_1
。
What does the
REFERENCES
mean?
REFERENCES
是 FOREIGN 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/
我是一名优秀的程序员,十分优秀!