2015-02-26 2 views
1

Я сделал некоторые исследования о SQL пакетных вставок - скажем, у меня есть 100k элементы, которые будут вставлены, и я установить размер пакета до 100.Базы данных - столбец идентификатора - идентификатор или нет?

Если столбец ID не помечено как Identity то, что основная вставка будет Работа.

Но я нашел довольно интересный (теоретически до сих пор) проблемы, и мне нужны мнения:

Проблема может быть, если, например, 5 пользователей делают объемные вставки в одно и то же время, как тогда безопасно предоставляют значение столбца ID? Я не могу просто получить table rows count + 1, потому что таким образом у всех этих 5 пользователей будут дубликаты идентификаторов, а операция объемной вставки завершится неудачно.

+0

Почему не используется GUID вместо числового идентификатора? – derdida

+0

Вы пытались рассмотреть здесь, «Сделка», откат и фиксация могут помочь в этом. – bumbumpaw

+0

вставьте NULL в столбец идентичности, он автоматически создаст уникальный идентификатор. –

ответ

1

Вы можете использовать SEQUENCE как генератор UNIQUE ID или попробуйте TRIGGER ON INSERT, чтобы получить уникальный идентификатор.

EDIT

С MySQL вы можете создать триггер для каждой строки

DELIMITER $$ 

CREATE TRIGGER adresse_trigger_insert_check 
BEFORE INSERT ON adresse 
FOR EACH ROW BEGIN 
IF NEW.land IS NULL THEN 
    SET NEW.land := 'XY'; 
END IF; 
END$$ 

DELIMITER ; 
+0

ok, но если я создаю 'before insert trigger', если будет запущен только один раз, даже если я вставляю много строк http://stackoverflow.com/a/17759742/106616 Что теперь? – Tony

+0

@tony С помощью mysql вы можете создать триггер «для каждой строки» (смотрите выше). – twyly

Смежные вопросы