gpt4 book ai didi

MySQL多列复合主键

转载 作者:行者123 更新时间:2023-11-29 12:26:10 25 4
gpt4 key购买 nike

我有这张 table

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)计划,但我在更新它时遇到了问题。

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

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

不确定我是否很好地解释了这个问题,让我举个例子。如果表中的值是这样的

class_id | subject_id | day | slot
1 | 1 | 1 | 1
1 | 2 | 1 | 2

然后我尝试执行以下语句

REPLACE INTO `classes_subjects` (class_id, subject_id, day, slot) VALUES (1,3,1,1), (1,4,1,3)

表格应该看起来像

class_id | subject_id | day | slot
1 | 3 | 1 | 1
1 | 2 | 1 | 2
1 | 4 | 1 | 3

我希望你理解我的问题,因为我真的搞砸了解释。

最佳答案

主键必须是唯一的,因此在这种情况下使用 class_id 根本不起作用。对您来说,最简单的“修复”是将 class_id 与 day/slot 键结合起来,并将其作为您的主键(class_id,day,slot)。您还可以在 class_id 上添加外键。

PRIMARY KEY (class_id, day, slot),
FORIEGN KEY (class_id) REFERENCES class(id) ON DELETE CASCADE

关于MySQL多列复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28282806/

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