Как удалить строку из таблицы MySQL при наличии ограничения внешнего ключа? - PullRequest
0 голосов
/ 09 мая 2018

Я пытался удалить запись из таблицы через http://localhost/phpmyadmin. Он вернул следующую ошибку:

"Невозможно удалить или обновить родительскую строку: не удалось выполнить ограничение внешнего ключа (press. prodstock, CONSTRAINT fk_prodstock_prodlist1 FOREIGN KEY (item_code) ССЫЛКИ prodlist (id) ВКЛ УДАЛИТЬ НЕТ ДЕЙСТВИЙ ПО ОБНОВЛЕНИЮ НЕТ ДЕЙСТВИЙ) "

Я написал код JAVA, чтобы удалить его из NetBeans:

 private void loginBut46ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    if (prodlist.getSelectedRowCount() == 0) {

            JOptionPane.showMessageDialog(rootPane, "Select Raw to View!");

        } else {
            int r = prodlist.getSelectedRow();
            String id = prodlist.getValueAt(r,0).toString();
            String item_code = prodlist.getValueAt(r,1).toString();
        try {
           DB.DB.statement("delete from prodlist where id = '"+id+"' ");
            DB.DB.statement("delete from prodstock where item_code='"+item_code+"'");
        } catch (Exception ex) {
            Logger.getLogger(Stock.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    }  

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

При удалении данных, на которые ссылаются другие данные (и на которые ссылается ограничение внешнего ключа), необходимо сначала удалить данные ссылки или обновить данные ссылки, чтобы они больше не ссылались на них (или установить ограничение для выполнения). один или другой автоматически для вас).

Вы можете удалить ограничение, сделать то, что вам нужно сделать, и добавить ограничение обратно (что может быть необходимо в некоторых случаях со ссылками на себя или циклические ссылки); но это должно быть последним средством, поскольку вы в основном говорите базе данных: «позвольте мне на некоторое время разорвать контракт с данными»; и рискует быть неспособным добавить ограничение обратно, если что-то пошло не так. Это также устраняет ограничение в глобальном масштабе, позволяя любому клиенту нарушить договор в течение этого времени.

0 голосов
/ 10 мая 2018

Для удаления этой строки сначала необходимо удалить ограничение внешнего ключа. Вы не можете удалить первичный ключ данных, вы удалили ограничение внешнего ключа. Перейдите по этой ссылке: Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется

...