sql - 我如何允许sql中的重复值?

标签 sql oracle database-design sql-insert primary-key

所以我有这个代码和简单的两个表 1-G群 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: unique constraint (SQL_XAKKMDKZQBPBDDQFTDEXENGDH.SYS_C0025290829) violated ORA-06512: at "SYS.DBMS_SQL", line 1721

我认为这是因为我之前插入的这一行:

insert into GGroup values (
    'A/3/54', 
    1608, 
    'ISM223', 
    'Data Warehouse & Data Mining', 
    'Dr. Yasser Al-Mshhor'
);

我该如何解决这个问题?我对sql不是很了解

最佳答案

正如其他人在上面的回答中所指出的那样 - 您遇到此问题是因为您在 GGroup 中使用 ClassRoom 列作为 Primary Key 表脚本,即 主键 (ClassRoom)

什么是主键?

  • 一张表只能有一个主键。
  • PRIMARY KEY 约束唯一标识表中的每条记录。
  • 主键必须包含 UNIQUE 值,不能包含 NULL 值。

这意味着您不能在 ClassRoom 列中插入重复值,即 A/3/54。解决此错误的最简单方法之一是添加另一列,例如GroupId 通过更改或删除表。

注意:如果 GGroup 表中有很多行,则使用 ALTER TABLE(已在之前的答案中显示)语句而不是使用 DROP TABLE 语句。

第一步:

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 错误。

关于sql - 我如何允许sql中的重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60434122/

相关文章:

php - 跟踪点 : insert or update?

sql - 如何保证动态SQL存储过程的安全?

mysql - 从第一个表中不存在的另一个表中复制数据。

database - 在 Oracle 数据库的索引列上使用 where 子句从 View 中选择

oracle - PLS-00222在此范围内不存在名称为 'WRITE_ERROR_LOG'的功能

database - N表有1个:1 relationship with a common table?如何保证唯一性

sql - 连接具有缺失值的 SQL View

SQL:Left Outer Join 可以根据列内的数据切换要连接的列

sql - bool 给出无效数据类型 - Oracle

database - 在数据库列中存储分隔列表真的那么糟糕吗?