所以我有这个代码和两个简单的表1-GGroup 2-时间表
这是它们的代码:
CREATE TABLE GGroup(
ClassRoom varchar(7),
GroupNum number(5),
C_Code varchar(6),
C_Name varchar(35), Field
Teacher varchar(30),
primary key (ClassRoom)
);
CREATE TABLE TimeTable(
ClassRoom varchar(7),
StudentID number(9),
FirstName varchar(30),
LastName varchar(30),
primary key(ClassRoom, StudentID),
foreign key(ClassRoom) references GGroup(ClassRoom)
);
而且我已经用np在表GGroup中插入了行!
但是现在我正在尝试插入这一行
insert into GGroup values (
'A/3/54',
1608,
'ISM223',
'Data Warehouse & Data Mining',
'Dr. Yasser Al-Mshhor'
);
我得到了这个错误:
ORA-00001:唯一约束
(SQL_XAKKMDKZQBPBDDQFTDEXENGDH.SYS_C0025290829)违反了ORA-06512: at "SYS.DBMS“_SQL",第1721行
我想这是因为我之前插入的这行:
insert into GGroup values (
'A/3/54',
1608,
'ISM223',
'Data Warehouse & Data Mining',
'Dr. Yasser Al-Mshhor'
);
我怎么才能解决这个问题呢?我对sql了解不多
发布于 2020-02-29 06:27:43
正如其他人已经在上面的答案中指出的那样-你之所以会有这个问题,是因为你正在使用ClassRoom列作为主键在您的GGroup表脚本,即primary key (ClassRoom)
。
主键是什么?
这意味着您不能插入重复的值,即A/3/54
在ClassRoom列。解决此错误的最简单方法之一是添加另一个列,例如GroupId通过更改或删除该表。
注意:如果GGroup表中有很多行,那么使用ALTER table (已经在前面的答案中说明)语句,而不是使用DROP TABLE语句。
步骤1:
DROP TABLE GGroup;
步骤2:
CREATE TABLE GGroup(
GroupId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
ClassRoom varchar(7),
GroupNum number(5),
C_Code varchar(6),
C_Name varchar(35), Field
Teacher varchar(30)
);
完成这两个步骤后,您就可以插入重复的值,而不会获得任何值ORA-00001: unique constraint
错误。
发布于 2020-02-27 21:22:13
表格GGroup
定义列ClassRoom
作为主键。这明确禁止此列中存在重复项。您的代码失败,因为您正在尝试使用ClassRoom
'A/3/54'
,而tabe中已存在该列中具有相同值的另一条记录。
可能的选项:
ClassRoom
将新插入的记录中的值设置为表中尚不存在的值发布于 2020-02-27 21:33:40
主键,必须唯一,您的教室设置为主键,不允许添加两次。
设置另一个变量(如递增的id)作为主键,这样您就可以更频繁地添加房间。
问题是,为什么要两次添加相同的信息?
如果要将房间填充到时间表中,则不需要在GGroup中多次添加房间
https://stackoverflow.com/questions/60434122
复制相似问题