Если ID
должен быть уникальным, в таблице должно быть определено уникальное ограничение.Это приведет к ошибке, если вы попытаетесь вставить уже существующее значение
ALTER TABLE table_name
ADD CONSTRAINT uk_id UNIQUE( id );
. Вы можете перехватить ошибку и сделать все, что захотите, если будет предпринята попытка вставить дубликат ключа - что-нибудь изигнорирование ошибки при ведении журнала и повторное поднятие исключения для вызова настраиваемого исключения
BEGIN
INSERT INTO table_name( id, value )
VALUES( 4, 100 );
EXCEPTION
WHEN dup_val_on_index
THEN
<<do something>>
END;
Вы также можете закодировать INSERT
, чтобы он вставлял 0 строк (вы все равно хотите, чтобы уникальное ограничение былос точки зрения модели данных и потому, что это дает оптимизатору больше информации и может сделать будущие запросы более эффективными)
INSERT INTO table_name( id, value )
SELECT 4, 100
FROM dual
WHERE NOT EXISTS(
SELECT 1
FROM table_name
WHERE id = 4 )
Или вместо этого можно кодировать MERGE
, чтобы обновить столбец VALUE
из 500до 100 вместо вставки новой строки.