我有一个名为SUBJECT
的表格,其中包含字段SUBJ_ID
和SUBJ_NAME
。另一个表名为COURSES
,其中包含字段COURSE_NAME
,SUBJ_NAME
和SUBJ_ID
。我的目标是在将SUBJ_ID
输入COURSE
时,使用SUBJ_ID
表格中的SUBJECT
自动更新SUBJ_NAME
表格中的COURSE
} table。
例如,SUBJECT
表包含以下数据:
+-----------+-------------+
| course_ID | course_name |
+-----------+-------------+
| 1 | math |
| 2 | physics |
+-----------+-------------+
如果我进入COURSES
表:
INSERT INTO `courses` VALUES('Algebra 101', 'Math');
如何让它自动将SUBJ_ID
更新为等于1?
答案 0 :(得分:3)
将您的表架构更改为以下内容:
课程表
+-----------+---------+------------+
| course_id | subbj_id|course_name |
+-----------+---------+------------+
| 1 | 1 | math |
|-----------+---------+----------- +
主题表
+-----------+-----------+
| subj_id | subj_name |
+-----------+---------+-+
| 1 | math |
|-----------+-----------+
摆脱subj_name
表中的courses
(因为它是多余的,可能会导致数据损坏,就像您的情况一样)。这将规范化您的数据,您将能够通过联接获取信息。
如果您有一个包含subj_id和subj_name的主题表,那么subj_id应该是您的主键(唯一标识符)。你的第二个表,课程,应该有course_id,course_name和subj_id。 course_id应该是您的主键(唯一标识符)。然后,您将在主题表中的subj_id与课程表中的subj_id之间具有一对多的外键。
设置完成后,您将使用此查询:
select c.course_name, s.subj_name from courses AS c inner join subject AS s on c.subj_id = s.subj_id;
这将拉出它所属的课程和主题。
当您需要更新主题名称时,您现在只需要在一个地方subject.subj_name进行更改,并且由于这种关系,它会传播过来。
如果所有这些都太多,请阅读规范化数据并正确设置关系。
祝你好运!