MySQL: как сделать данные уникальными для нескольких строк в таблице? - PullRequest
0 голосов
/ 04 марта 2010

Как бы я поступил следующим образом ( интересует только то, как сделать UNIQUE (заголовок, описание) ) в phpMyAdmin?:

CREATE TABLE `myData` (
    id serial primary key,
    title varchar(255) not null,
    description varchar(255) not null,
    UNIQUE (title, description)
);

И, кстати, чтобы не открывать еще один вопрос по SO, я хотел бы знать, какие другие типы я могу использовать для длинных строк? Потому что 225 символов слишком малы для наших целей. Хотя я знаю, что varchar может принимать до 65 535 символов с MySQL 5.0.3. Но могу ли я указать эти поля как MEDIUMTEXT (мой клиент хочет, чтобы они были как таковые для совместимости)? При этом я получаю сообщение об ошибке, поскольку « столбец BLOB / TEXT ... используется в спецификации ключа без длины ключа ». Что мне тогда делать? Мне нужно, чтобы эти два поля были уникальными - чтобы я мог хранить похожие заголовки, даже если описания различны, но когда есть заголовки и описания, которые соответствуют заголовкам и описаниям входящих данных, я не хочу хранить эти входящие данные .

Ответы [ 4 ]

1 голос
/ 04 марта 2010

Максимальная длина ключа по умолчанию составляет 1000 байт для MyISAM и 3072 байт для InnoDB (с дополнительным требованием, чтобы каждый столбец в ключе не превышал 767 байт).

Если ваша таблица InnoDB или MyISAM с однобайтовой кодировкой, то вы можете создать ограничение в порядке.

Если это не так, то вы можете создать индекс с префиксом, но имейте в виду, что индекс будет поддерживать уникальность только внутри префикса.

Однако будет гораздо лучше, если вы хэшируете свой заголовок и описание и вместо этого сохраняете хеш в уникальном столбце.

0 голосов
/ 04 марта 2010

Если у вас уже есть созданная таблица, перейдите к ее структуре в PhpMyAdmin, выберите два столбца (заголовок, описание) с флажками слева. затем щелкните значок U в строке элементов управления под описанием таблицы. Это добавит уникальный индекс к двум выбранным полям.

Замечания Quassnoi о длине индекса и использовании альтернативы хэша заметны. Также обратите внимание, что текстовые столбцы UTF-8 требуют трех байтов на символ в индексах, поэтому индексирование текстовых столбцов UTF-8 довольно дорого.

0 голосов
/ 04 марта 2010
CREATE TABLE `myData` (
`id` INT( 12 ) NOT NULL ,
`title` TEXT NOT NULL ,
`description` TEXT NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`title` (255) ,
`description` (255)
)
);

MySQL будет хранить полную информацию из заголовка и описания, но будет индексировать только 255 первых символов из этих полей. Это означает, что вы напечатаете 2 заголовка из 255 одинаковых символов, а затем что-то другое - это даст вам ошибку удвоения.

0 голосов
/ 04 марта 2010

Чтобы создать УНИКАЛЬНОЕ с помощью PhpMyAdmin (надеюсь, это был ваш вопрос;)), выполните следующие действия:

Перейдите в таблицу и выберите «структуру», затем добавьте индекс в 2 строки (внизу слева), выберите два поля и «indextyp: unique» и все готово.

Edit: Добавлены скриншоты, он немецкий, но должен выглядеть так же. Я действительно надеюсь, что сработает, если нет, я не понял ваш вопрос и все ваши комментарии.

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step1.png

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step2.png

он хранится в «индексе», потому что «уникальный» - это просто особый тип индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...