Как установить неуникальный ключ в таблице MYSQL?

12
hakervova
На сайте с 16.05.2007
Offline
146
1837

Здравствуйте.

Была таблица с новостями, хотел почистить от неуникальных записей по названию.

Сделал запрос: ALTER IGNORE TABLE `название таблицы` ADD UNIQUE KEY (title).

В итоге все дубли по титлу удалились. Но теперь при добавлении новости c таким же титлом выдает ошибку: Duplicate entry 'названия статьи' for key 'title'

Как убрать уникальный ключ с title?

63 сайта для размещения вашей статьи с ТИЦ от 10 до 150. (https://searchengines.guru/ru/forum/970831 ) | Магазин услуг и цифровых товаров - http://seomaniya.com/ | Канал "Все о шашках" https://www.youtube.com/damkinet
дани мапов
На сайте с 06.09.2012
Offline
204
#1

DROP INDEX `название_индекса` ON `название_таблицы`;

Если надо создать неуникальный индекс:

CREATE INDEX `title_Index` ON `название_таблицы` (`title`);

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
hakervova
На сайте с 16.05.2007
Offline
146
#2
дани мапов:
DROP INDEX `название_индекса` ON `название_таблицы`;

Если надо создать неуникальный индекс:
CREATE INDEX `title_Index` ON `название_таблицы` (`title`);

Спасибо за помощь, но уже сделал чуть по другому:

alter table `название таблицы` drop index `title`

---------- Post added 12-10-2013 at 15:28 ----------

Хотя и ваш запрос тоже удаляет ключ. Спасибо.

---------- Post added 12-10-2013 at 15:31 ----------

Кстати может еще подскажите как удалить неуникальные значения по title например с 1000 записи? Тоесть если встречаются неуникальные с id 1 по 1000 - чтобы их не трогало, а удаляло только с 1001 записи. Реально?

дани мапов
На сайте с 06.09.2012
Offline
204
#3
hakervova:
Кстати может еще подскажите как удалить неуникальные значения по title например с 1000 записи? Тоесть если встречаются неуникальные с id 1 по 1000 - чтобы их не трогало, а удаляло только с 1001 записи. Реально?

Чтобы у совпадающих по тайтлу записей id было больше 1000 ? Тогда так:


DELETE a
FROM `название_таблицы` a, `название_таблицы` b
WHERE a.title = b.title
AND a.id > b.id
AND b.id > 1000
hakervova
На сайте с 16.05.2007
Offline
146
#4
дани мапов:
Чтобы у совпадающих по тайтлу записей id было больше 1000 ? Тогда так:

DELETE a
FROM `название_таблицы` a, `название_таблицы` b
WHERE a.title = b.title
AND a.id > b.id
AND b.id > 1000

Это если две таблицы?

У меня одна таблица с полем 'title'.

Например уже есть значения:

1

2

1

2

1

2

А я хочу чтобы осталось например:

1

2

1

2

Тоесть до 4-го столбца чтобы неуникальные не трогало, а удаляло только после 4-ой записи. Реально?

siv1987
На сайте с 02.04.2009
Offline
427
#5
hakervova:
Это если две таблицы?

Это если одна таблица. `название_таблицы` заменить на имя вашей таблицы

hakervova
На сайте с 16.05.2007
Offline
146
#6
siv1987:
Это если одна таблица. `название_таблицы` заменить на имя вашей таблицы

Этот запрос находит неуникальные только с id > 1000 и удаляет их.

А надо чтобы запрос проверял и с id от 1 по 1000 и дальше до самого конца, но чтобы удалял только после id> 1000. А если id < 1000 чтобы не удалял.

Возможно?

siv1987
На сайте с 02.04.2009
Offline
427
#7

Эта операция называется делит - удаление, вы ее с чем-то другим путаете. Для выбора и поиска есть другой запрос - селект. Зачем в делит что-то искать, если при этом оно не удаляется?.. Нонсенс.

hakervova
На сайте с 16.05.2007
Offline
146
#8
siv1987:
Эта операция называется делит - удаление, вы ее с чем-то другим путаете. Для выбора и поиска есть другой запрос - селект. Зачем в делит что-то искать, если при этом оно не удаляется?.. Нонсенс.

Так реально сделать то что я написал выше? Можете написать запрос?

siv1987
На сайте с 02.04.2009
Offline
427
#9

Для выбора используйте select, для удаления - delete, вам уже все написали. Либо напишите что вы хотите сделать и зачем вам это нужно

hakervova
На сайте с 16.05.2007
Offline
146
#10

Мне нужно найти неуникальные записи в целой таблице, но удалять их только с id> 1000

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий