2016-07-24 8 views
0

Здравствуйте, я очень недавно познакомился с Кассандрой и начал изучать ее пару дней назад. У меня вопрос, когда дело доходит, если не существует функции. Есть ли, если нет работы только на 1 столбец?. Меня беспокоит, что если у меня есть семейство столбцов, которое содержит 3 свойства, такие какКассандра, если не существует, чтобы обеспечить уникальные электронные письма

ID (UUID: первичный ключ), адрес электронной почты (текст) и имя (текст). и это сохраняется в базе данных

 1, "[email protected]" , "John" 

Если кто-то пытается зарегистрировать и ставит «[email protected]» и «Джон» в качестве имени будет этот проход и будет принят? Очевидно, будут люди с одинаковым именем и разными электронными письмами, и я не хочу, чтобы эта вставка была отклонена. Я по существу просто хочу отклонить Insertion, если письмо уже существует в базе данных и ничего больше.

ответ

1

Когда вы выполняете INSERT ... ЕСЛИ НЕ СУЩЕСТВУЕТ, тогда он гарантирует, что вставка выполняется только тогда, когда запись не существует с одним и тем же ПК. Помните, что без предложения IF EXISTS это будет как UPDATE для этого PK, то есть INSERT с использованием того же PK - это просто ОБНОВЛЕНИЕ в Cassandra, и если вы не хотите этого поведения, тогда именно здесь IF NOT EXISTS aka Lightweight Transaction (LWT) помогает , Поэтому в вашем случае, если кто-то добавит «[email protected]» и «John», тогда он будет продолжать, пока идентификатор отличается. Обратите внимание, что «ЕСЛИ НЕ СУЩЕСТВУЕТ» здесь просто гарантирует, что существующее значение идентификатора не будет перезаписано Поскольку ваш идентификатор имеет тип UUID, похоже, что у вас может быть тот же адрес электронной почты для разных идентификаторов, который, как я думаю, может быть не таким, каким вы хотите. Если вы хотите отклонить вставку, если почта уже существует, тогда будет лучше используйте email_address как PK, и это гарантирует, что никакая вставка с существующим PK не будет разрешена.