0

外部キーについて理解できません。子行を追加/更新できないというデータベース エラー 1452 が発生しましたが、それが何を意味するのかわかりません。

別のテーブルから値を取得する必要があるという答えを探し回っていると思いますが、それが正しいかどうかはわかりません。

テーブルに行を挿入しようとすると、そのエラーが発生します。CI を使用して挿入したい他の値の場合と同様に、外部キーの値を指定するにはどうすればよいですか?

助けてください

ここに私が挿入しようとしているものがあります:

$salarystuff = array('salary' => $salary, 'from_date' => $salary_from_date, 'to_date' => $salary_to_date);
$this->db->insert('salaries', $salarystuff);

テーブル salaries には、emp_no、salary、to date および from date の列があります。上記のように id 以外のすべてを挿入しましたが、id は別のテーブルから必要です。エラーメッセージは次のとおりです。

子行を追加または更新できません: 外部キー制約が失敗しました ( employees. salaries, CONSTRAINT salaries_ibfk_1FOREIGN KEY ( emp_no) REFERENCES employees( emp_no) ON DELETE CASCADE)

4

1 に答える 1

1

子行を追加/更新できないというデータベース エラー 1452 が発生しましたが、それが何を意味するのかわかりません。

これは通常、行を挿入しようとしているテーブルに、別のテーブルへの外部キー参照を保持する列が少なくとも 1 つあることを意味します。つまり、その列に指定する値は、その他のテーブルに既に存在している必要があります。(存在しない従業員の給与を保存しても意味がありません。)

子行を追加または更新できません: 外部キー制約が失敗しました (employees.salaries, CONSTRAINT salaries_ibfk_1 FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE)

「salaries」に行を挿入する場合、「emp_no」に指定する値は「employees」にすでに存在している必要があります。

可能な値はすべて「employees.emp_no」にあります。これらすべての可能な値の中から正しい「emp_no」を選択する方法は、アプリケーションに依存します。

ほとんどの場合、ユーザーは従業員番号と従業員名のドロップダウン リストから従業員番号を選択し、新しい給与を入力することを期待しています。ユーザーが「開始日」と「終了日」を入力するか、自動的に入力するかはアプリケーションに依存します。ユーザーが名前を選択して給与を入力した後、「開始日」と「終了日」がユーザーによって入力されるか、コードによって計算された後、それらの値を新しい行として「給与」に挿入できます。

いずれにせよ、データベース挿入ステートメントに関する限り、CI コードは他のすべての列を処理するのとまったく同じように「emp_no」を処理する必要があります。

于 2012-12-27T20:38:51.437 に答える