まず、存在しない場合にのみ挿入を行うために、通常のINSERT文を使用することはできません。代わりに、以下の手順を使用してください。
- テーブルにUNIQUE制約を追加するか、一意のインデックスを作成します。これにより、重複するレコードの挿入を防ぐことができます。
例:
ALTER TABLE テーブル名
ADD CONSTRAINT 制約名 UNIQUE (カラム名);
または、
CREATE UNIQUE INDEX インデックス名 ON テーブル名 (カラム名);
- 以下のようなストアドプロシージャを作成します。この例では、テーブル「テーブル名」にカラム「カラム名」が存在しない場合にのみ、新しい行が挿入されます。
DELIMITER $$
CREATE PROCEDURE プロシージャ名()
BEGIN
DECLARE rows_count INT;
-- カウントの取得
SELECT COUNT(*) INTO rows_count FROM テーブル名 WHERE カラム名 = 値;
-- カウントが0の場合にのみ挿入
IF rows_count = 0 THEN
INSERT INTO テーブル名 (カラム名) VALUES (値);
END IF;
-- その他の処理を追加する場合はここに記述します
END $$
DELIMITER ;
- ストアドプロシージャを呼び出すことで、存在しない場合にのみ挿入されます。
CALL プロシージャ名();
これにより、ストアドプロシージャが呼び出され、カウントが0の場合にのみ新しい行が挿入されます。
以上が、MySQLのストアドプロシージャを使用して、存在しない場合にのみ挿入を行う方法です。