Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день!
Предположим, что таблица состоит из четырех колонок, а именно:
mark_id | student_id | subject_id | term .
Сейчас автоинкрементная колонка это только mark_id, она же является основным ключом. Остальные три колонки простые.
При добавлении новой строки в БД необходимо отследить и запретить добавление новой строки, если уже существует строка по связке student_id + subject_id + term. Другими словами, получается, что нужно сделать составной ключ по связке student_id + subject_id + term. Однако при попытке его сделать через phpmyadmin, то mysql мне пишет, что такой составной ключ сделать невозможно поскольку необходима хотя бы 1 автоинкрементная колонка в этом составном ключе.
Поэтому возникает вопрос: реально ли сделать составной ключ только по связке student_id + subject_id + term так, чтобы mark_id в составном ключе не участвовал ?
Если да, то какой последовательностью команд это можно реализовать? Поскольку я пытаюсь, а mysql мне пишет ошибки разного рода.
Подскажите пожалуйста что-нибудь по данному поводу.
Заранее спасибо!
Неактивен
Здравствуйте. Приведите пожалуйста структуру таблицы (show create table `t`) и тот запрос, которым Вы пытаетесь создать составной ключ на связку student_id | subject_id | term.
Неактивен
Пожалуйста.
Вывело следующее:
mysql> SHOW CREATE TABLE `student_marks`;
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student_marks | CREATE TABLE `student_marks` (
`mark_id` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) NOT NULL,
`subject_id` int(11) NOT NULL,
`mark` tinyint(4) NOT NULL,
`term` tinyint(4) NOT NULL,
PRIMARY KEY (`mark_id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 |
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Пытался сначала скинуть Primary key: ALTER TABLE student_marks DROP PRIMARY KEY, он пишет ошибку: Incorrect table definition; there can be only one auto column and it must be defined as a key.
Пытался и другими способами, но никак не могу понять
Подскажите пожалуйста какими командами и в какой последовательности можно сделать составной ключ по связке student_id | subject_id | term.
Спасибо!
Отредактированно warma2d (13.10.2014 18:51:01)
Неактивен
Попробуйте
Неактивен
deadka написал:
Попробуйте
CREATE UNIQUE INDEX `ind` ON `student_marks`(`student_id`,`subject_id`,`term`);
Благодарю - работает, как надо. Оказывается всё так просто!
Неактивен