0

これを行う最善の方法を考えていました。

2 つのテーブルを持つデータベースがあります。

最初のテーブル

id - primary key
title

セカンドテーブル

id - primary key
first_id
order

first_id と order の組み合わせが存在するかどうかを挿入するときに確認する最善の方法は何だろうと思っていました。

たとえば、first_id = 10 で order = 1 のレコードを Second Table に挿入しようとすると、それが既に存在し、新しいレコードを挿入する代わりに更新します。列の組み合わせを一意にすることについてどこかで読みましたが、その方法がわかりませんでした。

編集:申し訳ありませんが、MySQLを使用していることを忘れていました

4

4 に答える 4

2

仮定sql -server...

if exists ( select 1 from table2 where  id=@id and firstId=@firstid)
begin
  update table2 set(...)
end
begin
insert into table2 select ...
end

first_id が table1 の ID への外部キーであることを確認してください。

于 2012-05-21T12:28:14.153 に答える
0

データをテーブルに直接挿入する場合は、Royiの回答のようなトリガーを作成できます。

データのペアを挿入しようとしたときに挿入が失敗する場合、つまり、一意性制約を作成する場合は、このリンクが役立つ可能性があります。

これを行う別の方法は、ストアドプロシージャを介してデータを挿入し、挿入する前にチェックを実行することです。

-サッド

于 2012-05-21T12:34:59.447 に答える
0

このように、更新シナリオでは、テーブルを 1 回だけスキャンします。インサートでも同じパフォーマンスです。

UPDATE Second Table SET order = 1 WHERE first_id = 10
if ROW_COUNT() = 0 
begin
   INSERT INTO Second Table (first_id, order) VALUES (10, 1)
end
于 2012-05-21T12:40:42.010 に答える
0

MSSQL の場合、次のようなものを使用できます。

IF NOT EXISTS (SELECT id from Second Table WHERE first_id = 10 AND order = 1)
BEGIN
   INSERT INTO Second Table (first_id, order) VALUES (10, 1)
END
ELSE
BEGIN
   UPDATE Second Table SET order = 1 WHERE first_id = 10
END

一意にすることに関しては、それらの値を2回挿入できないようにするだけですが、挿入する前にこれを確認したほうがよいと思います。(両方の組み合わせが完璧だと思います)

これを防ぐために、first_id と order UNIQUE の組み合わせを作成できます。

于 2012-05-21T12:33:03.467 に答える