我有这张桌子
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语法,因为它们不会经常更新。问题是,我不知道如何设置索引,以便在要插入的行的day和slot出现时替换索引。目前,每当我用已经存在的class_id插入行时,它就会替换。
如果要插入的值与class_id、day和slot匹配,则需要替换现有记录。
不确定我在解释这个问题上做得是否好,让我举一个例子。如果表中的值如下
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我希望你能理解我的问题,因为我解释得很糟糕。
发布于 2015-02-02 17:08:32
主键必须是唯一的,所以在这种情况下使用class_id根本不起作用。对于您来说,最简单的“修复”方法是将class_id与日期/时隙键组合起来,并将其作为主键be (class_id、day、时隙)。您还可以在class_id上加一个外键。
PRIMARY KEY (class_id, day, slot),
FORIEGN KEY (class_id) REFERENCES class(id) ON DELETE CASCADEhttps://stackoverflow.com/questions/28282806
复制相似问题