2017-09-25 70 views
0

我對數據庫管理系統很陌生,需要一些關於如何爲這個問題編寫刪除的建議。我一直在搜索,這是我到目前爲止。查詢將不會運行,並拋出一個錯誤:如何正確使用刪除查詢

Violated - child record found

這是一個問題:

刪除成員大衛·瓊斯和所有相關記錄。確保從所有相關關係中刪除相關的元組,並按正確的順序刪除它們。

代碼:

CREATE TABLE Book 
    (bookID INT, 
    ISBN INT, 
    title varchar (25), 
    author varchar (20), 
    publish_year INT, 
    category varchar(20), 
    PRIMARY KEY (bookID)); 

CREATE TABLE Member 
    (memberID INT, 
    lastname varchar (20), 
    firstname varchar (20), 
    address varchar(20), 
    phone_number INT, 
    limit_ INT, 
    PRIMARY KEY (memberID)); 

CREATE TABLE CurrentLoan 
    (memberID INT , 
    bookID INT, 
    loan_date DATE, 
    due_date DATE, 
    PRIMARY KEY (memberID, bookID), 
    FOREIGN KEY (memberID) REFERENCES Member(memberID), 
    FOREIGN KEY (bookID) REFERENCES Book(bookID)); 

CREATE TABLE History 
    (memberID INT, 
    bookID INT, 
    loan_date DATE, 
    return_date DATE, 
    PRIMARY KEY (memberID, bookID, loan_date), 
    FOREIGN KEY (memberID) REFERENCES Member(memberID), 
    FOREIGN KEY (bookID) REFERENCES Book(bookID)); 

INSERT INTO Book VALUES (10, 1113312336, 'The Dog', 'Jack Crow', 1990, 'fiction'); 
INSERT INTO Book VALUES (12, 2221254896, 'Worms', 'Jim Kan', 2013, 'childrens'); 
INSERT INTO Book VALUES (13, 3332546987, 'Crow', 'Jan Flo', 2000, 'fiction'); 
INSERT INTO Book VALUES (14, 4443456215, 'Big Dog', 'Lan Big', 1993, 'children'); 
INSERT INTO Book VALUES (15, 5552314569, 'Green Apple', 'Theo Brown', 1978, 'children'); 
INSERT INTO Book VALUES (16, 6664581631, 'Red Bean', 'Khang Nk', 2017, 'fiction'); 
INSERT INTO Book VALUES (17, 7771452369, 'XML and XQuery Knowledge', 'Author Le', 2017, 'non-fiction'); 
INSERT INTO Book VALUES (18, 8881245525, 'The Dark Room', 'Jack Se', 2017, 'fiction'); 
INSERT INTO Book VALUES (19, 9991123546, 'Lonely Mens', 'Geen Brown', 2014, 'refrence'); 
INSERT INTO Book VALUES (20, 1122112356, 'XML or XQuery', 'Heart Le', 2002, 'fiction'); 
INSERT INTO BOOK VALUES (21, 1212121212, 'The Giving Tree', 'Shel Silverstein', 1964, 'fiction'); 
INSERT INTO BOOK VALUES (22, 1212121212, 'The Giving Tree', 'Shel Silverstein', 1964, 'fiction'); 
INSERT INTO BOOK VALUES (23, 1313131313, 'The Lazy Dog', 'Jake Red', 2016, 'children'); 
INSERT INTO BOOK VALUES (24, 1313131313, 'The Lazy Dog', 'Jake Red', 2016, 'children'); 
INSERT INTO BOOK VALUES (25, 1414141414, 'The Very Blue Boy', 'Ben Jen', 2006, 'fiction'); 

INSERT INTO Member VALUES (001, 'Lee', 'Nancy', 'Brownlea Drive', 1254896325, 2); 
INSERT INTO Member VALUES (002, 'Le', 'Ray', '10th Street', 1234561256, 2); 
INSERT INTO Member VALUES (003, 'Kan', 'Charlie', '5th Street', 1234567236, 2); 
INSERT INTO Member VALUES (004, 'Brown', 'Joe', 'Elm Street', 1234567845, 2); 
INSERT INTO Member VALUES (005, 'Smith', 'John', '33 East', 1234567890, 2); 
INSERT INTO Member VALUES (006, 'Khang', 'Nkaujyi', '358 Spencer', 2145345625, 2); 
INSERT INTO Member VALUES (007, 'Jones', 'David', '4th Street', 14812365789, 2); 

INSERT INTO CurrentLoan VALUES (001, 10, '13-SEP-17', '14-NOV-17'); 
INSERT INTO CurrentLoan VALUES (002, 19, '13-JAN-17', '15-NOV-17'); 
INSERT INTO CurrentLoan VALUES (003, 16, '14-FEB-17', '12-MAR-17'); 
INSERT INTO CurrentLoan VALUES (005, 15, '12-OCT-17', '09-NOV-17'); 
INSERT INTO CurrentLoan VALUES (005, 18, '13-APR-17', '12-MAY-17'); 
INSERT INTO CurrentLoan VALUES (007, 25, '02-OCT-17', '25-DEC-17'); 

INSERT INTO History VALUES (001, 10, '14-Jan-17', '04-OCT-17'); 
INSERT INTO History VALUES (003, 19, '12-Jan-17', '04-NOV-17'); 
INSERT INTO History VALUES (002, 13, '14-APR-17', '08-OCT-17'); 
INSERT INTO History VALUES (005, 20, '14-MAY-17', '04-DEC-17'); 
INSERT INTO History VALUES (007, 25, '02-OCT-16', '25-DEC-16'); 
COMMIT; 

我的查詢:

DELETE FROM Book 
WHERE bookID = 25; 

DELETE FROM MEMBER 
WHERE lastname = 'Jones' AND firstname = 'David'; 

DELETE FROM CurrentLoan 
WHERE memberID = 007; 

DELETE FROM History 
WHERE memberID = 007; 
+0

爲什麼要刪除這本書?這本書與大衛瓊斯有什麼關係?其他人會借這本書嗎? –

+0

查看您要刪除記錄的訂單。您需要先排除子女記錄的順序? –

+0

你必須清除貸款,而不是書。另外,每個成員都有一個主鍵,總是通過主鍵刪除記錄。 '刪除成員,其中姓氏='瓊斯'AND firstname ='大衛';'是不可接受的。如果有一個以上的David Jones會怎麼樣?始終使用主鍵。 – Havenard

回答

2

我不知道DBMS但以下,直到您刪除依賴於記錄不能刪除FK(foriegn鍵)任何關係型數據庫的邏輯FK。在刪除密鑰之前,您需要刪除引用外鍵的所有記錄。如果我正確讀取數據,則有兩個表(Currentloan和History)依賴於Book和Member中的外鍵。在刪除Book和成員中的外鍵之前,您需要刪除Currentloan和History中的記錄。

新建查詢

DELETE FROM CurrentLoan 
WHERE memberID = 007; 

DELETE FROM History 
WHERE memberID = 007; 

DELETE FROM Book 
WHERE bookID = 25; 

DELETE FROM MEMBER 
WHERE lastname = 'Jones' AND firstname = 'David'; 
+0

我重新排列我的查詢順序,它完美地工作,謝謝。 – tubvajlis

+0

你爲什麼要刪除這本書? –

+0

@KeithJohnHutchison你的權利,我不需要刪除書。 – tubvajlis

0
/* 
    delete records from the tables with relations first using the memberID 
    */ 
delete from currentloan where memberID = 7 ; 
delete from history where memberID = 7 ; 
/* 
    delete the member using the memberID 
    */ 
delete from member where memberID = 7 ; 
0

方法刪除名爲大衛·瓊斯AMD相關記錄所有成員的記錄。使用以下內容創建架構和虛擬數據。注意David Jones有兩個記錄。

CREATE TABLE Book 
    (bookID INT, 
    ISBN INT, 
    title varchar (25), 
    author varchar (20), 
    publish_year INT, 
    category varchar(20), 
    PRIMARY KEY (bookID)); 

CREATE TABLE Member 
    (memberID INT, 
    lastname varchar (20), 
    firstname varchar (20), 
    address varchar(20), 
    phone_number INT, 
    limit_ INT, 
    PRIMARY KEY (memberID)); 

CREATE TABLE CurrentLoan 
    (memberID INT , 
    bookID INT, 
    loan_date DATE, 
    due_date DATE, 
    PRIMARY KEY (memberID, bookID), 
    FOREIGN KEY (memberID) REFERENCES Member(memberID), 
    FOREIGN KEY (bookID) REFERENCES Book(bookID)); 

CREATE TABLE History 
    (memberID INT, 
    bookID INT, 
    loan_date DATE, 
    return_date DATE, 
    PRIMARY KEY (memberID, bookID, loan_date), 
    FOREIGN KEY (memberID) REFERENCES Member(memberID), 
    FOREIGN KEY (bookID) REFERENCES Book(bookID)); 

INSERT INTO Book VALUES (10, 1113312336, 'The Dog', 'Jack Crow', 1990, 'fiction'); 
INSERT INTO Book VALUES (12, 2221254896, 'Worms', 'Jim Kan', 2013, 'childrens'); 
INSERT INTO Book VALUES (13, 3332546987, 'Crow', 'Jan Flo', 2000, 'fiction'); 
INSERT INTO Book VALUES (14, 4443456215, 'Big Dog', 'Lan Big', 1993, 'children'); 
INSERT INTO Book VALUES (15, 5552314569, 'Green Apple', 'Theo Brown', 1978, 'children'); 
INSERT INTO Book VALUES (16, 6664581631, 'Red Bean', 'Khang Nk', 2017, 'fiction'); 
INSERT INTO Book VALUES (17, 7771452369, 'XML and XQuery Knowledge', 'Author Le', 2017, 'non-fiction'); 
INSERT INTO Book VALUES (18, 8881245525, 'The Dark Room', 'Jack Se', 2017, 'fiction'); 
INSERT INTO Book VALUES (19, 9991123546, 'Lonely Mens', 'Geen Brown', 2014, 'refrence'); 
INSERT INTO Book VALUES (20, 1122112356, 'XML or XQuery', 'Heart Le', 2002, 'fiction'); 
INSERT INTO BOOK VALUES (21, 1212121212, 'The Giving Tree', 'Shel Silverstein', 1964, 'fiction'); 
INSERT INTO BOOK VALUES (22, 1212121212, 'The Giving Tree', 'Shel Silverstein', 1964, 'fiction'); 
INSERT INTO BOOK VALUES (23, 1313131313, 'The Lazy Dog', 'Jake Red', 2016, 'children'); 
INSERT INTO BOOK VALUES (24, 1313131313, 'The Lazy Dog', 'Jake Red', 2016, 'children'); 
INSERT INTO BOOK VALUES (25, 1414141414, 'The Very Blue Boy', 'Ben Jen', 2006, 'fiction'); 

INSERT INTO Member VALUES (001, 'Lee', 'Nancy', 'Brownlea Drive', 1254896325, 2); 
INSERT INTO Member VALUES (002, 'Le', 'Ray', '10th Street', 1234561256, 2); 
INSERT INTO Member VALUES (003, 'Kan', 'Charlie', '5th Street', 1234567236, 2); 
INSERT INTO Member VALUES (004, 'Brown', 'Joe', 'Elm Street', 1234567845, 2); 
INSERT INTO Member VALUES (005, 'Smith', 'John', '33 East', 1234567890, 2); 
INSERT INTO Member VALUES (006, 'Khang', 'Nkaujyi', '358 Spencer', 2145345625, 2); 
INSERT INTO Member VALUES (007, 'Jones', 'David', '4th Street', 14812365789, 2); 
INSERT INTO Member VALUES (008, 'Jones', 'David', '5th Street', 1234561256, 2); 

INSERT INTO CurrentLoan VALUES (001, 10, '13-SEP-17', '14-NOV-17'); 
INSERT INTO CurrentLoan VALUES (002, 19, '13-JAN-17', '15-NOV-17'); 
INSERT INTO CurrentLoan VALUES (003, 16, '14-FEB-17', '12-MAR-17'); 
INSERT INTO CurrentLoan VALUES (005, 15, '12-OCT-17', '09-NOV-17'); 
INSERT INTO CurrentLoan VALUES (005, 18, '13-APR-17', '12-MAY-17'); 
INSERT INTO CurrentLoan VALUES (007, 25, '02-OCT-17', '25-DEC-17'); 

INSERT INTO History VALUES (001, 10, '14-Jan-17', '04-OCT-17'); 
INSERT INTO History VALUES (003, 19, '12-Jan-17', '04-NOV-17'); 
INSERT INTO History VALUES (002, 13, '14-APR-17', '08-OCT-17'); 
INSERT INTO History VALUES (005, 20, '14-MAY-17', '04-DEC-17'); 
INSERT INTO History VALUES (007, 25, '02-OCT-16', '25-DEC-16'); 
COMMIT; 

兩個記錄名叫大衛·瓊斯

select * from member where firstName = 'David' and lastName = 'Jones' ; 

memberID lastname firstname address phone_number limit_ 
7 Jones David 4th Street 2147483647 2 
8 Jones David 5th Street 1234561256 2 

SQL刪除的成員的記錄,並在條款使用任何相關記錄。

/* 
    delete records from the tables with relations first using the memberIDs 
    related to any David Jones 
    */ 
delete from currentloan where memberID in (
    select memberId from member where firstName = 'David' and lastName = 'Jones' 
) ; 
commit ; 

delete from history where memberID in (
    select memberId from member where firstName = 'David' and lastName = 'Jones' 
) ; 
commit ; 

/* 
    delete any members called David Jones using the firstName and lastName 
    */ 
delete from member where firstName = 'David' and lastName = 'Jones' ; 
commit ; 

/* 
    no records for David Jones 
    */ 

select count(*) count from member where firstName = 'David' and lastName = 'Jones' ; 

/* 
    results 
    */ 
count 
0