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

在oracle数据库中,现在已经有student和lesson两个表,还有一个stu_choose_lesson表,这个表建表如下:createtablestu_choo... 在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:此列列表已索引。

请问这是为什么?如果要正确创建索引,应该怎么办?
初学者求助,望各路大神解答,感激不尽。
展开
 我来答
小白聊电子科技
高粉答主

2020-02-19 · 专注电子数码问题解答
小白聊电子科技
采纳数:775 获赞数:75478

向TA提问 私信TA
展开全部

1、在计算机中,打开Oracle的连接程序,用新建的数据库管理员

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

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

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

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

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

匿名用户
推荐于2017-09-24
展开全部
根据你建表的语句,确实不需要再创建索引,因为这两列被你设为主键,所以你再建索引会报错。
创建主键时数据库会创建同名的唯一索引,当然因为是主键的关系,所以和直接创建唯一索引还是有一点区别:作为主键这两列的值不允许为空
追问
如果我非要根据这两列创建索引应该怎么做?移除主键再创建索引吗?语句应该怎么写?感谢!
追答
是的,因为同一列上不允许重复建索引,所以非要创建索引就只能移除主键。但是为什么要这样做?除非这两列的值可以为空。
Oracle 在创建主键时会隐式建立唯一索引。
若要手动创建索引,那就先移除主键约束,然后创建索引,再加上主键约束,这样也是可以的,主键会使用现有索引。也就是说,你先建唯一索引再加主键约束,和直接建主键是一个效果,一步完成的动作何必弄得那么麻烦呢?当然,先建索引再加主键的好处是索引名字可以自己定,强迫症福音,哈哈。以下是官方说明
PRIMARY KEY Constraints and Indexes
Oracle enforces all PRIMARY KEY constraints using indexes. the primary key constraint created for the deptno column is enforced by the implicit creation of:

A unique index on that column

A NOT NULL constraint for that column

Composite primary key constraints are limited to 32 columns, which is the same limitation imposed on composite indexes. The name of the index is the same as the name of the constraint. Also, you can specify the storage options for the index by including the ENABLE clause in the CREATE TABLE or ALTER TABLE statement used to create the constraint. If a usable index exists when a primary key constraint is created, then the primary key constraint uses that index rather than implicitly creating a new one.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华夏日长兴
2015-04-16 · TA获得超过9592个赞
知道大有可为答主
回答量:6305
采纳率:85%
帮助的人:3743万
展开全部
primary key(studentNum,lessonNum),

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

创建惟一索引,当然会报错
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
射手幽灵伊
2015-04-16 · TA获得超过2716个赞
知道大有可为答主
回答量:4955
采纳率:81%
帮助的人:1976万
展开全部
因为已经创建了主键,已默认给建立了索引了。不需要再创建的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式