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

はい、2 つの異なるテーブルで同じ列名を使用できます。実際にこれを質問する必要はありませんでした。自分でテストするのは非常に簡単です。

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

follow_upper_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 の行が、参照先のテーブルに存在しない値を持つことを防ぐだけです。

行が 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 に答える