【发布时间】:2012-09-20 14:26:15
【问题描述】:
最近遇到了 MySQL 本身和 MySQL 中的 Composite Primary Keys 的话题,特别是它的用处和优缺点,来自site
我想玩这个,所以我以这种方式创建了三个表:
CREATE TABLE person(
personId INT(11) NOT NULL,
personName VARCHAR(20) NOT NULL,
PRIMARY KEY(personId)
)
CREATE TABLE language(
languageId INT(11) NOT NULL,
languageName VARCHAR(20) NOT NULL,
PRIMARY KEY(personId)
)
CREATE TABLE personLanguage(
personId INT(11) NOT NULL,
languageId INT(11) NOT NULL,
description VARCHAR(20) NOT NULL,
PRIMARY KEY(personId, languageId),
FOREIGN KEY (personId) REFERENCES person(personId) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (languageId) REFERENCES language(languageId) ON UPDATE CASCADE ON DELETE CASCADE
)
我可以将数据插入到人员和语言表中——直截了当,我的问题是:
-
对于 personLanguage 表,我是否只需要插入描述列,而其他列是自动引用的,还是我还需要在 personLanguage 表中插入其他两列的值
是否有可能在插入其他两个表中的数据后自动更新 personLanguage 表中的 personId 和 languageId,据我所知,何时以人员或语言完成某些更新/删除表它在 personLanguage 表的两列上反映相同
如何获取三个表相关的数据,例如我需要知道 personId=1 的人说哪种语言?它也是使用连接的直接查询还是因为我使用复合主键而有其他方法可以做
很多问题困扰着我,我真的找不到一个完整的工作示例来检查使用复合主键的确切利弊。如果有人可以使用我的示例详细说明这一点,那将非常有帮助。
我知道我已经问了一些基本的,一些毫无意义的问题,但请耐心等待,并就这个话题提出一些好的看法
【问题讨论】:
标签: mysql composite-primary-key