あなたの質問の説明から、私はあなたがSQL/MySqlを初めて使用していると仮定しています。
あなたはここで正しいところですが。前述のタスクを達成するには、SQLトリガーが必要です。
注:あなた自身でタスクを試してください。あなたがどこかについていたら、 に行ってください。
タスク1:明らかに、テーブルPC
にはUpdate trigger
が必要です。トリガは、更新ごとにPC
で実行されます。トリガは関係なく試みが続いて成功したか否かの、 行を挿入または変更しようとすることによって活性化される前に
A:
しかし、以下は、MySQLマニュアル(link)からステートメントです。
したがって、トリガーを作成してエラーメッセージを表示しても、更新はまだPC
で行われます。
更新プロセスを防止するため、Trigger内でSQLState
を使用します。
MySqlの失敗ごとに一意のSQLState
またはSignal
があり、PC
の更新を防ぐために、適切なSQLState
を設定します。
トリガー:
CREATE TRIGGER BF_UPD_PC
BEFORE UPDATE ON PC FOR EACH ROW
BEGIN
IF NEW.hdisk >= 100*(NEW.ram)
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot add or update row: HardDisk should be at least 100 times more than RAM.';
END IF;
END;
タスク2:
ここで、我々は新しいモデルナンバーがすでに何らかのPC
に割り当てられていないことを確認することができBefore Insert
トリガーを作成する必要があり、Printer
またはLaptop
としてください。
トリガー:
CREATE TRIGGER BF_INS_PRODUCT
BEFORE INSERT ON PRODUCT
BEGIN
IF NEW.model in (select distinct model from pc
union all
select distinct model from printer
union all
select distinct model from laptop)
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot add or update row: Model number already assigned. Please try with another model number';
END IF;
END;
を完了!
希望すると助かります!
これまでに試した質問を追加してください。 –