Mysql 使用外键自动递增创建新表?
我正在修改一个开源程序,所以我有点不知所措。这是一个基于mysql的个人信息跟踪系统 其中有一个表“person\u per”,它是“peru ID”列。 当一个新人加入时,他们会得到下一个号码 我想要一个新的表“follow_up”。我需要这个表有一个“peru ID”列。(如果它在另一个表上,我可以有一个重复的名称吗?),这样任何新的信息仍然链接到主记录 我最担心的是新记录会在“follow_up”表中出现一行。看起来奴隶/主人可能是实现这一点的方法,但我不知道如何实现这一点 我不确定这是否相关Mysql 使用外键自动递增创建新表?,mysql,sql,Mysql,Sql,我正在修改一个开源程序,所以我有点不知所措。这是一个基于mysql的个人信息跟踪系统 其中有一个表“person\u per”,它是“peru ID”列。 当一个新人加入时,他们会得到下一个号码 我想要一个新的表“follow_up”。我需要这个表有一个“peru 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)
是的,您可以在两个不同的表中使用相同的列名。您实际上不需要将此作为一个问题来问,您自己很容易测试:
CREATE TABLE test.t1 ( per_ID INT );
CREATE TABLE test.t2 ( per_ID INT );
您可以创建一个表follow\u-up
,其中包含一个per\u-ID列。您可以使用外键,以便该列中的任何值必须首先存在于引用的表person\u-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\u up中插入行的最简单方法是运行额外的INSERT,您可以使用以下函数查找生成的per\u ID:
INSERT INTO person_per ... /* whatever you normally insert */
INSERT INTO follow_up (per_ID) VALUES (LAST_INSERT_ID());
无论出于何种原因,都需要“引擎”声明
CREATE TABLE follow_up (
per_ID INT,
FOREIGN KEY (per_ID) REFERENCES person_per (per_ID)
)
engine=MyISAM;
mysql>创建表后续(per_ID INT,外键(per_ID)引用person_per(per_ID));错误1005(HY000):无法创建表“cla components.follow_up”(错误号:150)mysql>这里有一个很好的错误排除总结:MyISAM不支持外键,所以它成功也就不足为奇了。它接受并忽略了您的FK声明。您会发现,您现在对插入违反引用完整性的数据没有任何限制。