Соединение JDBC с MySQL постоянно говорит мне, что я нарушаю ограничение внешнего ключа?Wha? - PullRequest
0 голосов
/ 30 марта 2011

Хорошо, так что я продолжаю получать эту ошибку:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется

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

        //create patron table
        s.executeUpdate ("DROP TABLE IF EXISTS patron");
        s.executeUpdate (
            "CREATE TABLE patron ("
            + "patron_ID CHAR(10),"
            + "PRIMARY KEY (patron_ID),"
            + "fName CHAR(50)NOT NULL, MI CHAR(2), lName CHAR(75)NOT NULL,"
            + "street_Name CHAR(100)NOT NULL, city CHAR(50) NOT NULL, state CHAR(50)NOT NULL,"
            + "zip_Code CHAR(10) NOT NULL, home_Phone CHAR(12)NOT NULL, call_Number CHAR(10)NOT NULL,"
            //+ "FOREIGN KEY (call_Number) references corejava.book(call_Number))");
            + "FOREIGN KEY (call_Number) references " + dbName + ".book (call_Number))");

        count2 = s.executeUpdate (
            "INSERT INTO patron"
            + " VALUES"
            + "('P222200000', 'Harry', 'P','Bradford','1234 Street Place','Silver Spring','Maryland','20906','301-555-9999','MY.111.0001'),"
            + "('P222200001', 'Sally','','Titus','2365 Huckleberry Lane','Silver Spring','Maryland','20906','301-554-9896','SF.111.002'),"
            + "('P222200002', 'Mark', 'C','Bradley','654 Finance Lane','Silver Spring','Maryland','20906','301-665-4978','AV.111.004'),"
            + "('P222200003', 'Carlos','','Iglesias','987 Potter Place','Silver Spring','Maryland','20906','240-702-5648','CO.111.006'),"
            + "('P222200004', 'Chris','','Craig','951 Einstein Way','Silver Spring','Maryland','20906','301-569-4415','IN.111.008'),"
            + "('P222200005', 'Samantha','A','Brikmon',' 8380 Colesville Road','Silver Spring','20906','301-659-5569','CO.111.007'),"
            + "('P222200006', 'Lindsey', '','Saucer','12507 Winexburg Manor Drive','Silver Spring','Maryland','20906','301-632-6635','SF.111.003'),"
            + "('P222200007', 'Judy', 'A','Freud','2518 Woodedge Road','Glenmont','Maryland','20905','240-985-9632','AV.111.005'),"
            + "('P222200008', 'Elizabeth','M','Longhorn','552 Lockwood Drive','Wheaton','Maryland','20904','202-555-6639','IN.111.009'),"
            + "('P222200009', 'Gabriella', 'S','Young','654 Glenallen Road','Silver Spring','Maryland','20906','301-555-9898','MY.111.000')");

        System.out.println (count2 + " rows were inserted");
        s.close();

Ответы [ 4 ]

2 голосов
/ 30 марта 2011

Вы пытаетесь вставить в patron запись с call_Number, которой нет ни в одной строке таблицы book.

2 голосов
/ 30 марта 2011

Это означает, что в ваших вставках в таблицу покровителей в последнем столбце (например, первая запись имеет 'MY.111.0001'), есть некоторые значения, которые не существуют в book.call_number. Это цель внешних ключей, чтобы убедиться, что на данные постоянно ссылаются! Разрешение на вставку оставит некоторое значение patron.call_number недействительным.

1 голос
/ 30 марта 2011

Выполнить:

select * from book where call_number = 'MY.111.0001';

для каждого из номеров вызовов (MY.111.0001 выше, но заменять по очереди), которые вы пытаетесь вставить в patron, чтобы убедиться, что строка существует.

Это должно показать вам, какая конкретная запись вызывает нарушение ограничения, и в этот момент вы либо используете другой номер вызова, либо вставляете строку для этого номера вызова в book.

В качестве альтернативы, вы можетевыполните:

select call_number from book where call_number in (
    'MY.111.0001',
    'SF.111.002',
    'AV.111.004',
    'CO.111.006',
    'IN.111.008',
    'CO.111.007',
    'SF.111.003',
    'AV.111.005',
    'IN.111.009',
    'MY.111.000')

и посмотрите, какие из них не отображаются в выводе.

Если посмотреть на длину первого, как только они выстроятся в линию, я подозреваю, что этопроблема - возможно это должно быть MY.111.001?

1 голос
/ 30 марта 2011

Значения, которые вы вводите в patron.call_number, совпадают со значениями в book.call_number?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...