0

primary key複数のテーブルマッピングを持つテーブルを更新することは可能ですか? マスターテーブルのIDを更新するにはどうすればよいですか?

CREATE TABLE Master (id INT, name VARCHAR(20),address VARCHAR(20),Primary key(id));

CREATE TABLE Slave_1 (id INT,s1_id INT,area VARCHAR(20),project VARCHAR(20),primary key(s1_id),Foreign Key (id) references Master(id));

CREATE TABLE Slave_2 (id INT,s2_id INT,area VARCHAR(20),project VARCHAR(20),primary key(s2_id),Foreign Key (id) references Master(id));
4

4 に答える 4

0

次のことができます。

  1. 外部キー制約を無効にします。

  2. ID/参照を更新

  3. 外部キー制約を有効にします。

于 2013-08-08T08:33:11.480 に答える
0

制約を変更しないとできません。

これはデータベースの制限であり、休止状態の制限ではありません。

idテーブルのを変更すると、スレーブの列には参照がありませんMasterid

idスレーブ テーブルの sを変更しようとした場合も同様です。

また、なぜ主キーを変更しようとするのですか? これは非常に珍しいことです。

于 2013-08-08T08:33:39.847 に答える
0

主キーを変更することは非常に悪い習慣です。

新しいマスター レコードを作成し、スレーブが新しい​​レコードを指すようにしてから、古いレコードを削除することはできませんか。これは、純粋な SQL を必要とせず、制約を無効にすることなく、Hibernate で機能します。

于 2013-08-08T08:41:32.253 に答える
0

まず、IDの変更は普段誰もやってはいけないことです。しかし、何らかの理由がある場合、Hibernate (つまり、マップされたクラス) を使用して実行することはできません。Hibernate はそれを許容せず、エンティティ ID を変更しようとするとエラーが発生します。

変更するには、ネイティブ クエリを使用する必要があります。おそらく、これを行う最も安全で簡単な方法は、DB に任せることです。外部キー列に対して「カスケード更新時」アクションを定義するだけで済みます。

CREATE TABLE Master (id INT, name VARCHAR(20),address VARCHAR(20),Primary key(id));

CREATE TABLE Slave_1 (id INT,s1_id INT,area VARCHAR(20),project VARCHAR(20),primary key(s1_id),Foreign Key (id) references Master(id) **on update cascade**);

CREATE TABLE Slave_2 (id INT,s2_id INT,area VARCHAR(20),project VARCHAR(20),primary key(s2_id),Foreign Key (id) references Master(id) **on update cascade**);

このように、マスター テーブルの ID 列を変更すると、すべての参照列に自動的にカスケードされます。

于 2013-08-08T08:43:55.250 に答える