使用/参数将数据从一个MySQL表传输到另一个MySQL表

时间:2011-07-06 02:19:39

标签: mysql database

我有一个名为SUBJECT的表格,其中包含字段SUBJ_IDSUBJ_NAME。另一个表名为COURSES,其中包含字段COURSE_NAMESUBJ_NAMESUBJ_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?

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进行更改,并且由于这种关系,它会传播过来。

如果所有这些都太多,请阅读规范化数据并正确设置关系。

祝你好运!