这是原有的文件,里面创建了下列各表,不能改动。
CREATE TABLE Proceeding (
ISBN VarChar(20) Primary Key,
BookName VarChar (80),
Year Integer,
Publisher VarChar (20)
);CREATE TABLE Article (
aID VarChar(30) Primary Key,
Title VarChar(80),
Subject VarChar(30)
);CREATE TABLE Researcher (
rID VarChar(15) Primary Key,
Name VarChar(50),
Institution VarChar(30)
);CREATE Table PublishedIn (
aID VarChar(30), ISBN VarChar(20),
Primary Key (aID, ISBN),
Foreign Key (aID) References Article(aID),
Foreign Key (ISBN) References Proceeding(ISBN)
);CREATE Table WrittenBy (
rID VarChar(15), aID VarChar(30),
Primary Key (rID, aID),
Foreign Key (rID) References Researcher(rID),
Foreign Key (aID) References Article(aID)
);Q1. Remove all the records related to the article titled “LawnyDesmid: Deployment of Redundancy”, this article is incorrect and we do not want to keep them in our online database.
我原先是这样做的,
DELETE
FROM WrittenBy
WHERE Article.Title = 'LawnyDesmid: Deployment of Redundancy' AND
      Article.aID = WrittenBy.aID;
DELETE
FROM PulbishedIn
WHERE Article.Title = 'LawnyDesmid: Deployment of Redundancy' AND
      Article.aID = WrittenBy.aID; 
DELETE
FROM Article
WHERE Article.Title = 'LawnyDesmid: Deployment of Redundancy';
但出错,因为他们都是有联系的,所以我该成:
ALTER TABLE WrittenBy ADD CONSTRAINT C_20 FOREIGN KEY (aID) REFERENCES Article ON DELETE CASCADE;
ALTER TABLE PublisedIn ADD CONSTRAINT C_20 FOREIGN KEY (aID) REFERENCES Article ON DELETE CASCADE;
DELETE
FROM Article
WHERE Article.Title = 'LawnyDesmid: Deployment of Redundancy';
但还是出错,说foreign key在之前已经定义过了。该如何处理啊?Q2. A researcher with ID “912” just published his article “An Efficient Zero-Knowledge Argument for MultiSignatures” having an article ID of “81” in the subject of “Signatures” on “ePrint”, update the database accordingly.
我原先是这样写的:
INSERT INTO Article (aID, Title, Subject)
VALUES ('81', 'An Efficient Zero-Knowledge Argument for MultiSignatures', 'Signature');
INSERT INTO WrittenBy(rID, aID)
VALUES ('912', '81');CREATE TABLE TEMP21 as
SELECT ISBN
FROM Proceeding
WHERE Proceeding.BookName = 'ePrint';INSERT INTO PublishedIn(aID, ISBN)
VALUES ('81', TEMP21.ISBN);
出错,因为values值里不能有列,TEMP21.ISBN
原先想
INSERT INTO PublishedIn(aID, ISBN)
VALUES ('81', NULL);
然后再将null值改为TEMP21.ISBN,但发现ISBN时表proceeding的primary key,不能为空。该如何处理?

解决方案 »

  1.   

    1、在增加前先删除ALTER TABLE WrittenBy drop CONSTRAINT C_20;
    2、INSERT INTO PublishedIn(aID, ISBN) select '81', ISBN from TEMP21;
      

  2.   

    谢谢,第二个问题解决了,但第一个还是不行。
    ALTER TABLE WrittenBy DROP FOREIGN KEY (aID) REFERENCES Article(aID)
                               *
    ERROR at line 1:
    ORA-00905: missing keyword
    我想是因为是primary key之一所以不能drop。
    我想过把drop整个table,然后再建一个,进行修改,但想到还要insert into一系列的值才可以。
    有没有更好的办法啊?
      

  3.   

    你语法有错误,并不是主键就不能DROP的,你可以查到相关的的约束名称
    select * from user_constraints t where t.table_name=upper('WrittenBy');
    然后使用下面的语句删除
    ALTER TABLE WrittenBy drop CONSTRAINT cascade;