Чистый универсальный
Единственный гарантированный переносимый способ сделать это во всех мыслимых базах данных и иметь только одну единственную реализацию; чтобы приложение генерировало ключи как UUID s и вставляло их как обычные поля. Положительным моментом является то, что вам не нужно полагаться на какую-то конкретную языковую или библиотечную реализацию для получения ключа, он у вас уже есть.
Альтернативой UUID , если вы выполняете хранилище данных и не обновляете строки после того, как они INSERT
ed, является криптографическим хэшем содержимого строки. Пусть ваше приложение объединит все содержимое полей в одну строку и извлечет хеш SHA1 этой строки. Этот ключ для всех практических целей гарантированно будет уникальным для этого содержимого. Также упрощает репликацию и поиск дубликатов.
Последовательные числа не являются окончанием всех первичных ключей.
UUID ключи легче переносить, и в 2011 году они бывают такими же быстрыми, когда индексация и место не должно быть проблемой, если у вас нет данных размера Facebook или Google, а затем у вас есть деньги на покупку дискового пространства, которое вам нужно, они также используют что-то, кроме числа long
.
Еще одним преимуществом является то, что вы также можете сделать репликацию намного проще, потому что вам не нужно беспокоиться о каждой базе данных, которую вы пытаетесь синхронизировать с наличием дублирующего ключа.
Универсальный SQL
Вы можете просто пропустить поле в операторе INSERT
, и база данных позаботится о создании значения для вас.
PHP сделает поиск автоматически сгенерированных ключей проблематичным, если сделать это общим способом. Все, что я могу найти в этой теме, очень специализировано для любой используемой базы данных, и, похоже, нет общего API, эквивалентного JDBC для PHP.
Если вы использовали Java
Если вы используете логическое выполнение (String sql,
int autoGeneratedKeys) в классе Statement . Вы можете сказать ему, в каком индексе поля находится автоматически сгенерированный ключ, и он вернет его, используя ResultSet getGeneratedKeys () .
Oracle Specific
Если вы установите значение DEFAULT
в нужном поле автоинкремента в DDL
для вызова функции, которая выбирает следующее значение из sequence
, вы также можете реализовать желаемое поведение автоинкремента в Oracle.
Примечание
UUID иногда называют GUID и технически различны, но концептуально одно и то же.