0

我正在修改一个开源程序,所以我有点不知所措。这是一个建立在mysql上的跟踪个人信息的系统。

有一个表“person_per”,其中有一个“per_ID”列。添加新人时,他们会得到下一个数字。

我想要一个新表“follow_up”。我需要这个表有一个“per_ID”列。(如果它在不同的表上,我可以有一个重复的名称吗?)所以任何新信息仍然链接到主记录。

我最担心的是新记录会在“follow_up”表上占一行。看起来奴隶/主人可能是这样做的方式,但我不知道如何做到这一点。

我不确定这是否相关....

mysql> SHOW INDEXES FROM person_per;
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table      | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| person_per |          0 | PRIMARY  |            1 | per_ID      | A         |         413 |     NULL | NULL   |      | BTREE      |         |               |
| person_per |          1 | per_ID   |            1 | per_ID      | A         |         413 |     NULL | NULL   |      | BTREE      |         |               |
+------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
4

2 回答 2

1

是的,您可以在两个不同的表中使用相同的列名。你真的不需要问这个问题,你自己测试很容易:

CREATE TABLE test.t1 ( per_ID INT );
CREATE TABLE test.t2 ( per_ID INT );

您可以创建一个follow_up带有 per_ID 列的表。您可以使用外键,以便该列中的任何值必须首先存在于引用的表中person_per

CREATE TABLE follow_up (
  /* perhaps other columns too */
  per_ID INT,
  FOREIGN KEY (per_ID) REFERENCES person_per (per_ID)
);

但这并不能保证在被引用表中 per_ID 的每个值的后续操作中都存在一行。它仅防止follow_up 中的行具有引用表中不存在的值。

确保将行插入 follow_up 的最简单方法是运行额外的 INSERT,您可以发现使用LAST_INSERT_ID()函数生成的 per_ID:

INSERT INTO person_per ... /* whatever you normally insert */

INSERT INTO follow_up (per_ID) VALUES (LAST_INSERT_ID());
于 2013-10-05T16:45:33.013 回答
0

无论出于何种原因,都需要“引擎”声明。

CREATE TABLE follow_up (
  per_ID INT,
  FOREIGN KEY (per_ID) REFERENCES person_per (per_ID)
)
engine=MyISAM;
于 2013-10-11T14:48:21.913 回答