使用外键自动增量创建新表?

时间:2013-10-05 02:45:02

标签: mysql sql

我正在修改一个开源程序,所以我有点过头了。它是一个用于跟踪构建在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)

2 个答案:

答案 0 :(得分:1)

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

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

您可以使用per_ID列创建表follow_up。您可以使用外键,以便该列中的任何值必须首先存在于引用的表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中的行具有引用表中不存在的值。

确保将一行插入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());

答案 1 :(得分:0)

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

CREATE TABLE follow_up (
  per_ID INT,
  FOREIGN KEY (per_ID) REFERENCES person_per (per_ID)
)
engine=MyISAM;