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