【求助】oracle中sql语句 此列列表已索引的解决办法

在oracle数据库中,现在已经有student和lesson两个表,还有一个stu_choose_lesson表,这个表建表如下:

create table stu_choose_lesson(
studentNum VARCHAR2(16) not null,
lessonNum VARCHAR2(16) not null,
primary key(studentNum,lessonNum),
foreign key(studentNum) references student,
foreign key(lessonNum) references lesson
);

现在需要在stu_choose_lesson表中依据“studentNum”和“lessonNum”字段创建索引,写出如下语句:

create UNIQUE INDEX stu_choose_lesson_Ind
on stu_choose_lesson(studentNum,lessonNum);

执行的时候报错,为ORA-01408:此列列表已索引。

请问这是为什么?如果要正确创建索引,应该怎么办?
初学者求助,望各路大神解答,感激不尽。
最新回答
心里下着雨

2026-10-29 16:32:49

1、在计算机中,打开Oracle的连接程序,用新建的

数据库管理员
。

2、 接着,在【Oracle服务器】的窗口上,在输入窗口中输入SQL查询语句,并单击【执行】按钮,可以看到查询不到索引表,需要调整SQL语句。

3、然后,在【SQL工作表】的窗口上,输入查询索引表的SQL语句。

4、接着,在【SQL工作表】的窗口上,输查询索引表的SQL语句,并单击【执行】按钮。

5、 然后,在【SQL工作表】的窗口上,可以看到SQL语句执行成功的提示信息,查询到用户的索引表中的字段。

6、接着,在【SQL工作表】的窗口上,修改索引表的名称,并单击【执行】按钮,就完成了。

青春明媚╮仍带伤

2026-02-10 15:15:05

根据你建表的语句,确实不需要再创建索引,因为这两列被你设为主键,所以你再建索引会报错。
创建主键时数据库会创建同名的唯一索引,当然因为是主键的关系,所以和直接创建唯一索引还是有一点区别:作为主键这两列的值不允许为空
我想静静

2026-03-02 00:56:13

primary key(studentNum,lessonNum),

你用这两个列创建了主键后,就已经创建了一个唯一索引了,你再用
create UNIQUE INDEX stu_choose_lesson_Ind
on stu_choose_lesson(studentNum,lessonNum);

创建惟一索引,当然会报错
墨染离殇ㄘ

2026-03-15 00:37:15

因为已经创建了主键,已默认给建立了索引了。不需要再创建的。