Ошибка нарушения уникального ограничения, но я не использовал уникальное ограничение в Oracle SQL?

#oracle #constraints #unique

Вопрос:

Я продолжаю получать это сообщение об ошибке:

ORA-00001: уникальное ограничение (SQL_HZWNCULHFYLOUVQBOPQMRYNLQ.SYS_C0062427812) нарушено ORA-06512: в «SYS.DBMS_SQL», строка 1721

Это потому, что код в столбце MusicID повторяется. Однако я не наложил никаких уникальных ограничений на этот столбец, так почему же это происходит?

по сути, в таблице загрузки музыки команда patel11 insert-это строка, в которой появляется ошибка, и поэтому результирующая таблица не включает эту строку. Хотя я никак не могу понять, почему?

Я включил код для таблицы загрузки музыки сначала до н. э. Вот где моя проблема, но затем в качестве правки ниже я включил полный код до сих пор на случай, если моя проблема в другом месте кода.

 CREATE TABLE music_download_table
    (
        userID  VARCHAR2(10) NOT NULL,
        musicID VARCHAR2(10) NOT NULL,
        downloadDate DATE NOT NULL,
        CONSTRAINT fk_usertable FOREIGN KEY(userID) REFERENCES user_table(userID),
        CONSTRAINT fk_musictable FOREIGN KEY(musicID) REFERENCES music_table(musicID)
    );
--check music download table
DESC music_download_table;
--insert rows into music download table
INSERT INTO music_download_table VALUES('kendj3', 'M002', '03-May-18');
INSERT INTO music_download_table VALUES('johnsj9', 'M005', '01-May-19');
INSERT INTO music_download_table VALUES('patel11', 'M002', '06-May-18');
INSERT INTO music_download_table VALUES('johnsj9', 'M001', '06-May-19');
INSERT INTO music_download_table VALUES('kendj3', 'M003', '01-Aug-19');
INSERT INTO music_download_table VALUES('keita77', 'M004', '02-Aug-19');
INSERT INTO music_download_table VALUES('Simpb91', 'M007', '05-Sep-18');
--show table
SELECT * FROM music_download_table;```


--below is the full code for this so far if that helps anyone figure it out?

``--create user table
CREATE TABLE user_table
    (
        userID  VARCHAR2(10) PRIMARY KEY, 
        names VARCHAR2(25) NOT NULL, 
        emailAddress VARCHAR2(50) NOT NULL
    );
--check table
DESC user_table
--insert rows into user table
INSERT INTO user_table VALUES('kendj3', 'Kenderine, J', 'kendj3@hotmail.co.uk');
INSERT INTO user_table VALUES('patel11', 'Patel, F', 'patel11@ntl.co.uk');
INSERT INTO user_table VALUES('flak05', 'Flavel, K', 'flak05@freeserve.co.uk');
INSERT INTO user_table VALUES('johnsj9', 'Johnson, J', 'johnsj9@msn.co.uk');
INSERT INTO user_table VALUES('keita77', 'Keita, R', 'keita77@hotmail.co.uk');
INSERT INTO user_table VALUES('Simpb91', 'Simpson, B', 'Simpb91@tesco.co.uk');
--show user table
SELECT * FROM user_table;
--create category table
CREATE TABLE category_table
    (
        categoryCode VARCHAR2(4) PRIMARY KEY,
        title VARCHAR2(20) NOT NULL
    );
--check table
DESC category_table;
--create music table
CREATE TABLE music_table
    (
        musicID VARCHAR2(10) PRIMARY KEY,
        title VARCHAR2(40) NOT NULL,
        categoryCode VARCHAR2(4) NOT NULL,
        costPerDownload NUMBER(4,2) CHECK(costPerDownload > 0),
        CONSTRAINT fk_categorytable FOREIGN KEY(categoryCode) REFERENCES category_table(categoryCode)
    );
--check table
DESC music_table;
--insert rows into music table
INSERT INTO music_table VALUES('M001', 'James Bond: Golden Eyes', 'C13', '0.99');
INSERT INTO music_table VALUES('M002', 'Lake House', 'C13', '1.99');
INSERT INTO music_table VALUES('M003', 'Dvorak: Symphony No 9', 'C11', '1.49');
INSERT INTO music_table VALUES('M004', 'Handel:Water Music', 'C11', '1.79');
INSERT INTO music_table VALUES('M005', 'Sense and Sensibility', 'C13', '1.50');
INSERT INTO music_table VALUES('M006', 'Beatles:Yesterday', 'C12', '1.10');
INSERT INTO music_table Values('M007', 'Elton John: Your Song', 'C12', '0.89');
--show music table
SELECT * FROM music_table;
--create music download table
CREATE TABLE music_download_table
    (
        userID  VARCHAR2(10) NOT NULL,
        musicID VARCHAR2(10) NOT NULL,
        downloadDate DATE NOT NULL,
        CONSTRAINT fk_usertable FOREIGN KEY(userID) REFERENCES user_table(userID),
        CONSTRAINT fk_musictable FOREIGN KEY(musicID) REFERENCES music_table(musicID)
    );
--check music download table
DESC music_download_table;
--insert rows into music download table
INSERT INTO music_download_table VALUES('kendj3', 'M002', '03-May-18');
INSERT INTO music_download_table VALUES('johnsj9', 'M005', '01-May-19');
INSERT INTO music_download_table VALUES('patel11', 'M002', '06-May-18');
INSERT INTO music_download_table VALUES('johnsj9', 'M001', '06-May-19');
INSERT INTO music_download_table VALUES('kendj3', 'M003', '01-Aug-19');
INSERT INTO music_download_table VALUES('keita77', 'M004', '02-Aug-19');
INSERT INTO music_download_table VALUES('Simpb91', 'M007', '05-Sep-18');
--show table
SELECT * FROM music_download_table;
--insert rows into category table
INSERT INTO category_table VALUES('C11', 'Classic');
INSERT INTO category_table VALUES('C12', 'Pop-Rock');
INSERT INTO category_table VALUES('C13', 'Movie Soundtrack');
--show category table ```
 

Комментарии:

1. Вы уверены, что уникальное ограничение не было добавлено после создания таблицы? Или триггер, который вставляется в другое место с уникальным ограничением?

2. Я удалил таблицу, а затем воссоздал ее снова, используя этот код, и все равно получил ошибку. Идентификатор внешнего ключа MusicID берется из другой таблицы, а идентификатор MusicID является первичным ключом в этой таблице и поэтому имеет уникальные ограничения — имеет ли это значение?

3. кроме того, что такое триггер?

4. Расширенная версия также кажется нормальной . Вам нужно начать с того , чтобы посмотреть user_constraints all_constraints или посмотреть, dba_constraints что SYS_C0062427812 это такое — с какой схемой и таблицей это связано, так как, похоже, это не так. Не могли бы вы, возможно, иметь синоним к тому же имени таблицы в другой схеме?

5. Похоже, что вы используете LiveSQL на основе имени схемы. Нам нужно увидеть весь ваш сценарий, чтобы мы могли запустить его и на LiveSQL