首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多列的MySQL组合主键

多列的MySQL组合主键
EN

Stack Overflow用户
提问于 2015-02-02 16:59:55
回答 1查看 49关注 0票数 0

我有这张桌子

代码语言:javascript
复制
CREATE TABLE `classes_subjects` (
 `class_id` int(10) unsigned NOT NULL,
 `subject_id` int(10) unsigned NOT NULL,
 `day` tinyint(1) unsigned NOT NULL,
 `slot` tinyint(1) unsigned NOT NULL,
 PRIMARY KEY (`class_id`),
 UNIQUE KEY `day` (`day`,`slot`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

我正在建立一个系统来设置和显示学校的课程,但是我在更新它方面遇到了困难。

基本上,它的工作原理是,我有一个class_id,然后对于每个类,我有从1到5的天数,从1到10的插槽,或者每天代表主题的东西。现在,为了避免构建insert和update功能,我想我可以使用REPLACE语法,因为它们不会经常更新。问题是,我不知道如何设置索引,以便在要插入的行的dayslot出现时替换索引。目前,每当我用已经存在的class_id插入行时,它就会替换。

如果要插入的值与class_iddayslot匹配,则需要替换现有记录。

不确定我在解释这个问题上做得是否好,让我举一个例子。如果表中的值如下

代码语言:javascript
复制
class_id | subject_id | day | slot
1        | 1          | 1   | 1
1        | 2          | 1   | 2

然后,我尝试执行以下语句

代码语言:javascript
复制
REPLACE INTO `classes_subjects` (class_id, subject_id, day, slot) VALUES (1,3,1,1), (1,4,1,3)

然后,这个表应该看起来像

代码语言:javascript
复制
class_id | subject_id | day | slot
1        | 3          | 1   | 1
1        | 2          | 1   | 2
1        | 4          | 1   | 3

我希望你能理解我的问题,因为我解释得很糟糕。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-02 17:08:32

主键必须是唯一的,所以在这种情况下使用class_id根本不起作用。对于您来说,最简单的“修复”方法是将class_id与日期/时隙键组合起来,并将其作为主键be (class_id、day、时隙)。您还可以在class_id上加一个外键。

代码语言:javascript
复制
PRIMARY KEY (class_id, day, slot),
FORIEGN KEY (class_id) REFERENCES class(id) ON DELETE CASCADE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28282806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档