ホームページ >データベース >mysql チュートリアル >Bash スクリプトから MySQL にデータを挿入するときに発生する「列数が値数と一致しません」エラーを修正する方法

Bash スクリプトから MySQL にデータを挿入するときに発生する「列数が値数と一致しません」エラーを修正する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-20 22:52:11293ブラウズ

How to Fix

Bash スクリプトを使用した MySQL への値の挿入

MySQL サーバーに接続し、テキスト ファイルからデータを挿入することを目的とした Bash スクリプトを作成しました。ただし、スクリプトの実行中にエラーが発生しました。特に:

ERROR 1136 (21S01) at line 1: Column count doesn't match value count at row 1

問題はコマンドの構造にあります:

echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('cat test.txt');" | mysql -uroot -ptest test;

このコマンドは基本的に、 test.txt ファイルの内容全体を単一の値としてテスト テーブルに追加します。テスト テーブルには 3 つの列 (IP、MAC、SERVER) があるため、値の数 (1) と列の数 (3) の間に不一致が生じます。

この問題を解決するには、次の手順を実行します。テキスト ファイルの各行をデータベースに挿入される個別の値のセットとして扱うように Bash スクリプトを変更する必要があります。スクリプトの修正版は次のとおりです:

#!/bin/bash
inputfile="test.txt"

cat $inputfile | while read ip mac server; do
    echo "INSERT INTO test (IP,MAC,SERVER) VALUES ('$ip', '$mac', '$server');"
done | mysql -uroot -ptest test;

この修正されたスクリプトでは:

  • while ループは test.txt ファイルから各行を読み取り、3 つの値を割り当てます。フィールド (IP、MAC、および SERVER) を変数 $ip、$mac、および $server に変換します。
  • 値はその後フォーマットされます。 SQL INSERT ステートメントを表す文字列に変換されます。
  • 最後に、mysql コマンドが繰り返し実行され、反復ごとにテスト テーブルに新しい行が挿入されます。

ファイルをストリーミングすることによって読み取りと MySQL コマンドの実行を別々に行うことで、テキスト ファイルの各行がデータベース内の個別の行として正しく挿入されていることを確認できます。

以上がBash スクリプトから MySQL にデータを挿入するときに発生する「列数が値数と一致しません」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。