0

javaを介して(mysqlを使用して)テーブルを更新したい。

I have a Test table with structure

id(pk)  name address

そして別のテーブル

Practice with following structure

    p_id  id(fk)   branch

ここで Test テーブルを更新したいのですが、外部キー制約に従って、その外部キー制約を取得します

「親行を削除または更新できません: 外部キー制約が失敗しました

"子テーブルでも使用しているため。更新したい場合、どうすれば Test テーブルを更新できますか?

私はこのように努力しています。

UPDATE Test SET  Test.id=1,NAME='XYZ'

したがって、外部キー制約を削除してから、必要に応じてテーブルを更新し、これらの制約を再度適用する必要がありますか?

このような場合、Test テーブルを更新するにはどうすればよいですか?

4

2 に答える 2

3

私はあなたがやろうとしていることは次のとおりだと思います:

UPDATE Test SET NAME='XYZ' WHERE id = 1

を実行した場合、すべてのテストレコードを、、およびUPDATE Test SET id=1, Name = 'XYZ'に設定しようとします。id=1Name = 'XYZ'

。を含む行を複数持つことはできないため、クエリは間違いなく失敗しますid=1

id=3を含むテストレコードがあり、そのテストレコードを参照するプラクティスレコードがあり、SQLコマンドがすべてのIDを1に変更しようとしている場合、外部キー制約の失敗が発生します。

したがって、外部キー制約は失敗します。

正しいSQLクエリがあることを確認しますか?

于 2012-06-12T05:10:12.633 に答える
1

基本的にあなたの声明から私が理解している,UPDATE Test SET Test.id=1,NAME='XYZ'のは、データとともに主キーも更新しようとしているということです。

上記の操作を行いたい場合は、次のことをお勧めします。

アルゴリズム:

ステップ 1: 新しい PK で新しいレコードを追加します。
ステップ 2: 新しい PK で子を更新し
ます。 ステップ 3: 古いレコードを削除します。

    insert into test(id,name,address) values(5,'name','address');
          --where 5 is your new PK.

    --Updating the child table
    update practice set p_id=5 where p_id=1 
          --where 1 is your old id in Test.

    --delete the record
    delete from test where id=1 

お役に立てれば。

于 2012-06-12T07:17:16.270 に答える