SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 12.10.2014 13:33:56

warma2d
Завсегдатай
Зарегистрирован: 12.08.2012
Сообщений: 33

Можно ли сделать такой составной ключ ?

Добрый день!

Предположим, что таблица состоит из четырех колонок, а именно:

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 мне пишет ошибки разного рода.

Подскажите пожалуйста что-нибудь по данному поводу.

Заранее спасибо!

Неактивен

 

#2 12.10.2014 13:53:55

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

Re: Можно ли сделать такой составной ключ ?

Здравствуйте. Приведите пожалуйста структуру таблицы (show create table `t`) и тот запрос, которым Вы пытаетесь создать составной ключ на связку student_id | subject_id | term.


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

Неактивен

 

#3 13.10.2014 18:49:54

warma2d
Завсегдатай
Зарегистрирован: 12.08.2012
Сообщений: 33

Re: Можно ли сделать такой составной ключ ?

Пожалуйста.

Вывело следующее:

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.

Пытался и другими способами, но никак не могу понять sad

Подскажите пожалуйста какими командами и в какой последовательности можно сделать составной ключ по связке student_id | subject_id | term.

Спасибо!

Отредактированно warma2d (13.10.2014 18:51:01)

Неактивен

 

#4 13.10.2014 18:54:23

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

Re: Можно ли сделать такой составной ключ ?

Попробуйте

CREATE UNIQUE INDEX `ind` ON `student_marks`(`student_id`,`subject_id`,`term`);


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

Неактивен

 

#5 14.10.2014 17:47:02

warma2d
Завсегдатай
Зарегистрирован: 12.08.2012
Сообщений: 33

Re: Можно ли сделать такой составной ключ ?

deadka написал:

Попробуйте

CREATE UNIQUE INDEX `ind` ON `student_marks`(`student_id`,`subject_id`,`term`);

Благодарю - работает, как надо. Оказывается всё так просто! smile

Неактивен

 

Board footer

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