Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用外键自动递增创建新表?_Mysql_Sql - Fatal编程技术网

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

Mysql 使用外键自动递增创建新表?,mysql,sql,Mysql,Sql,我正在修改一个开源程序,所以我有点不知所措。这是一个基于mysql的个人信息跟踪系统 其中有一个表“person\u per”,它是“peru ID”列。 当一个新人加入时,他们会得到下一个号码 我想要一个新的表“follow_up”。我需要这个表有一个“peru ID”列。(如果它在另一个表上,我可以有一个重复的名称吗?),这样任何新的信息仍然链接到主记录 我最担心的是新记录会在“follow_up”表中出现一行。看起来奴隶/主人可能是实现这一点的方法,但我不知道如何实现这一点 我不确定这是否

我正在修改一个开源程序,所以我有点不知所措。这是一个基于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声明。您会发现,您现在对插入违反引用完整性的数据没有任何限制。