ホームページ > データベース > mysql チュートリアル > Excel データの Mysql へのインポートに関するよくある質問のまとめ: インポート中に発生した外部キ​​ー制約にどう対処するか?

Excel データの Mysql へのインポートに関するよくある質問のまとめ: インポート中に発生した外部キ​​ー制約にどう対処するか?

WBOY
リリース: 2023-09-08 17:22:51
オリジナル
1771 人が閲覧しました

Excel データの Mysql へのインポートに関するよくある質問のまとめ: インポート中に発生した外部キ​​ー制約にどう対処するか?

Excel データの Mysql へのインポートに関するよくある質問のまとめ: インポート中に発生した外部キ​​ー制約にどう対処するか?

データのインポートは、データベース管理における一般的なタスクの 1 つです。Excel を使用してデータを Mysql データベースにインポートすると、外部キー制約の問題が発生する可能性があります。ここでは、いくつかの一般的な外部キー制約の問題とその解決策をコード例とともに示します。

  1. 外部キー制約により挿入エラーが発生する
    Mysql で、外部キー制約のあるテーブルにデータを挿入しようとすると、挿入された外部キー値が関連付けられたテーブルで見つかった場合、対応する主キー値が見つからない場合、挿入は失敗します。この問題を解決する方法は、挿入する前に、対応する主キー値が関連テーブルに存在するかどうかを確認することです。

サンプル コード:

import java.sql.*;

public class ImportData {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
            stmt = conn.createStatement();
            
            // 检查关联表是否存在对应的主键值
            String checkQuery = "SELECT id FROM parent_table WHERE id = '123'";
            ResultSet rs = stmt.executeQuery(checkQuery);
            if (!rs.next()) {
                System.out.println("关联表中不存在对应的主键值,插入失败!");
                return;
            }
            
            // 插入数据到子表
            String insertQuery = "INSERT INTO child_table (parent_id, value) VALUES ('123', 'abc')";
            int affectedRows = stmt.executeUpdate(insertQuery);
            if (affectedRows > 0) {
                System.out.println("数据插入成功!");
            } else {
                System.out.println("数据插入失败!");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
ログイン後にコピー
  1. 外部キー制約により更新が失敗する
    挿入操作と同様に、外部キー制約データを使用してテーブルを更新する場合は、また、更新された外部キー値が、関連付けられたテーブル内で対応する主キー値を見つけることができないため、更新も失敗します。同様に、更新する前に、対応する主キー値が関連テーブルに存在するかどうかを確認する必要があります。

サンプル コード:

import java.sql.*;

public class ImportData {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
            stmt = conn.createStatement();
            
            // 检查关联表是否存在对应的主键值
            String checkQuery = "SELECT id FROM parent_table WHERE id = '123'";
            ResultSet rs = stmt.executeQuery(checkQuery);
            if (!rs.next()) {
                System.out.println("关联表中不存在对应的主键值,更新失败!");
                return;
            }
            
            // 更新带有外键约束的表中的数据
            String updateQuery = "UPDATE child_table SET value = 'xyz' WHERE parent_id = '123'";
            int affectedRows = stmt.executeUpdate(updateQuery);
            if (affectedRows > 0) {
                System.out.println("数据更新成功!");
            } else {
                System.out.println("数据更新失败!");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
ログイン後にコピー

概要:
Excel を使用してデータを Mysql データベースにインポートする場合、外部キー制約の問題は比較的一般的です。この種の問題を解決する鍵は、操作を挿入または更新する前に、対応する主キー値が関連テーブルに存在するかどうかを確認することです。上記のコード例を通じて、これらのソリューションをより深く理解し、適用して、データのインポート プロセスをよりスムーズにすることができます。

以上がExcel データの Mysql へのインポートに関するよくある質問のまとめ: インポート中に発生した外部キ​​ー制約にどう対処するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート