Проблема с ключами и уникальными полями

Doker13

Создал таблицу комментариев. Нужно было, чтобы id комментария и id пользователя, который отправил комментарий не повторялись, таким образом отсчет кол-ва комментариев для каждого пользователя начинался заново. Всё работало нормально, id ставились как положено, решил добавить индексы на поля id_comment, id_user, id_send, добавил командой
ALTER TABLE `comments` ADD INDEX ( `id_comment` , `id_user` , `id_send` ) ;
после этого id комментариев стали назначаться по порядку (1,2,3,4,5,6...n). Очистил таблицу и удалил её, снова повторил запрос на создание таблицы и уже id комментариев игнорируют уникальность и просто идут по порядку, в чем проблема?Что должно получится:1 | 1 | 3 | text|2 | 1 | 3 | text|1 | 2 | 2 | text|2 | 2 | 2 | text|3 | 2 | 2 | text|1 | 3 | 1 | text|Запрос на создание таблицы:
CREATE TABLE comments(
 id_comment MEDIUMINT NOT NULL AUTO_INCREMENT,
 id_user INTEGER NOT NULL,
 id_send_user integer NOT NULL,
 author CHAR(32) NOT NULL,
 date CHAR(18) NOT NULL,
 message TEXT NOT NULL,
 img CHAR(50) NOT NULL,
 PRIMARY KEY (id_user,id_comment)
) ENGINE=MyISAM;
12 ответов

Doker13

Проверьте, действительно ли таблица создана на MyISAM.Покажите лог консоли (drop; create; show create; insert; select).PS. В скрипте создания таблицы не нашёл поля id_send.


Doker13

Akina,Извиняюсь, не id_send а id_send_user, торопился просто, когда вопрос задавал. Проверил, тип таблицы MyISAM. Где-то читал, что при добавлении индексов, их сложно потом навсегда удалить из базы, может это именно то? Просто создавалась таблица, всё работало, а теперь из за добавления индексов (абсолютно ненужных, зачем я только их добавил) всё наперекосяк.


Doker13

Где-то читал, что при добавлении индексов, их сложно потом навсегда удалить из базы
ОБС. Забудь поскорее...
Просто создавалась таблица, всё работало, а теперь из за добавления индексов (абсолютно ненужных, зачем я только их добавил) всё наперекосяк.
Хочу увидеть своими глазами. Лог консоли плиз. Или хотя бы проверенные скрипты создания и минимального наполнения (без кириллицы по возможности) для воспроизведения.


Doker13

Akina,Если честно недопонимаю, что за Лог консоли?З.Ы. ради эксперимента, создал такую же таблицу под другим названием, всё работает прекрасно. Всё таки не вся информация о таблице удаляется, что-то где-то остается, вопроса два, что и где.


Doker13

Лог консоли - это покажите все действия которые вы делаете в консоли (в командом окне)Что покажет для проблемной таблицыSHOW INDEX FROM mydb.comments;


Doker13

Alex_Ustinov,
Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Index_type 	
comments | 0 | PRIMARY | 1 | id_user | A | 6 | NULL | NULL | BTREE
comments | 0 | PRIMARY | 2 | id_comment | A | 6 | NULL | NULL | BTREE


Doker13

Doker13,...> и уже id комментариев игнорируют уникальность и просто идут по порядку, в чем проблема?> Запрос на создание таблицы:
CREATE TABLE comments(
 id_comment MEDIUMINT NOT NULL AUTO_INCREMENT,
Проблема в нежелании пользоваться справочной информацией...


Doker13

Stupid_BOT,если вы имеете ввиду убрать автоинкремент, то вы не первый кто это говорит... если не ставить A_I, комментарий будет всегда только один, с id равным нулю


Doker13

> Doker13> если вы имеете ввиду убрать автоинкрементЯ имю ввиду, что сервер выполняет только то, что Вы ему приказываете. Если Вы сами не знаете, что творите, то лучший совет - RTFM.


Doker13

Doker13, для чего у вас два главных ключа?Если нужно добавить уникальные индексы в существующей таблице где уже есть записи которые повторяються:
ALTER IGNORE TABLE `comments` ADD UNIQUE ( `id_comment` , `id_user` , `id_send_user` ) ;
или создать новую таблицу:
DROP TABLE IF EXISTS `comments`;
CREATE TABLE IF NOT EXISTS `comments` (
 `id_comment` mediumint(9) NOT NULL AUTO_INCREMENT,
 `id_user` int(11) NOT NULL,
 `id_send_user` int(11) NOT NULL,
 `author` char(32) COLLATE utf8_unicode_ci NOT NULL,
 `date` char(18) COLLATE utf8_unicode_ci NOT NULL,
 `message` text COLLATE utf8_unicode_ci NOT NULL,
 `img` char(50) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`id_user`),
 UNIQUE KEY `id_comment_2` (`id_comment`,`id_user`,`id_send_user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


Doker13

Doker13, для чего у вас два главных ключа?
Где?


Doker13

Где?
Очевидно, тут:
PRIMARY KEY (id_user,id_comment)