SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.12.2011 13:09:34

Dezmont
Участник
Зарегистрирован: 01.12.2011
Сообщений: 4

Уникальные значения полей в столбце

Добрый день, подскажите пожалуйста. Предположим у меня есть форма из 10 полей. Есть таблица мускул из 11 столбцов (10 как в форме+1 id PK auto_increment). Нужно сделать так, чтобы ещё в определённом столбце VARCHAR не повторялись значения. Как это лучше реализовать? Посредством PHP или каким-то запросом в базе MySQL?

Неактивен

 

#2 01.12.2011 13:30:58

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Уникальные значения полей в столбце

1. Создать уникальный ключ по этому полю.
2. Перед вставкой данных в БД проверять, не присутствует ли в этом поле такое же значение.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#3 01.12.2011 14:49:34

Dezmont
Участник
Зарегистрирован: 01.12.2011
Сообщений: 4

Re: Уникальные значения полей в столбце

Neval написал:

1. Создать уникальный ключ по этому полю.
2. Перед вставкой данных в БД проверять, не присутствует ли в этом поле такое же значение.

А зачем ещё и уникальный ключ создавать? Оо
Если перед вставкой посредством РНР проверять, то вообще с БД ничё делать не надо. Я думал может БД сама может проверить есть ли идентичное значение в столбце... и вывести что-нить (например ошибку).

Неактивен

 

#4 01.12.2011 15:10:40

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Уникальные значения полей в столбце

Тут зависит от того, на кого Вы хотите эту проверку повесить - или на бизнес-логику.
Если на базу - то создайте уникальный индекс. В этом случае, если Вы не хотите, чтобы mysql-сервер вернул ошибку - проверяйте перед вставкой сами. Или же не проверяйте, в этом случае mysql-сервер выругается.

А можно базу и не нагружать этим, а проверять на уровне бизнес-логики перед вставкой/обновлением.

Можно и просто в insert-запросе сделать проверку на наличие такого значения в базе, правда запрос довольно-таки длинный получается smile.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 01.12.2011 15:28:05

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Уникальные значения полей в столбце

Dezmont написал:

А зачем ещё и уникальный ключ создавать? Оо

Нельзя быть уверенным на 100%, что не произойдёт чего-то не ожиданного. Добавленная по ошибке дублирующая запись может сильно вылезти боком, по сему лучше всего перестраховаться на уровне БД.

Dezmont написал:

Если перед вставкой посредством РНР проверять, то вообще с БД ничё делать не надо. Я думал может БД сама может проверить есть ли идентичное значение в столбце... и вывести что-нить (например ошибку).

Она сама может, но либо она вернёт ошибку, которую надо будет ещё правильно обработать, либо она ничего не вернёт (при INSERT IGNORE), но при этом и не добавит запись, о чём Вы не сможете узнать без дополнительной проверки.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#6 01.12.2011 15:32:27

Dezmont
Участник
Зарегистрирован: 01.12.2011
Сообщений: 4

Re: Уникальные значения полей в столбце

Neval написал:

Нельзя быть уверенным на 100%, что не произойдёт чего-то не ожиданного. Добавленная по ошибке дублирующая запись может сильно вылезти боком, по сему лучше всего перестраховаться на уровне БД.

smile)) Очень интересное заключение... :DDD
Я для того и проверяю, чтобы на 100% быть увереным, что дублирующая запись не добавится.

Ясно. Средствами PHP тогда просто проверю.

Отредактированно Dezmont (01.12.2011 15:32:59)

Неактивен

 

#7 01.12.2011 16:12:57

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Уникальные значения полей в столбце

Dezmont написал:

smile)) Очень интересное заключение... :DDD

На самом деле это реалии жизни и многолетняя практика wink Будете потом щи лаптем хлебать big_smile

Дело Ваше, варианты у Вас есть smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson