📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == INSERT文は、MySQLのテーブルに新しい行を挿入するためのSQL文である。<br> <br> 基本的な構文として、<code>VALUES</code> 形式、<code>SET</code> 形式、<code>VALUES ROW()</code> 形式が提供されており、用途に応じて使い分けることができる。<br> INSERT文は、単一行だけでなく複数行を一度に挿入することも可能であり、パフォーマンスの観点からは複数行挿…」
 
 
(同じ利用者による、間の1版が非表示)
816行目: 816行目:
</center>
</center>
<br>
<br>
セキュリティ設定の確認と変更方法を以下に示す。<br>
<code>LOAD DATA LOCAL INFILE</code> を使用するには、サーバ側とクライアント側の両方で <code>local_infile</code> を有効化する必要がある。<br>
<br>
<u>※重要</u><br>
<u>MySQL 8.0.20以降では、<code>local_infile</code> はデフォルトで無効化されている。</u><br>
<u>片方でも無効の場合、ERROR 3950 が発生する。</u><br>
<br>
現在の設定値の確認方法を以下に示す。<br>
<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  # local_infile の設定を確認
  # local_infile の設定を確認
  SHOW VARIABLES LIKE 'local_infile';
  SHOW VARIABLES LIKE 'local_infile';
   
  </syntaxhighlight>
  # local_infile を有効化 (サーバ側)
<br>
サーバ側の設定方法を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
  # 方法1 : 実行時に動的変更
  SET GLOBAL local_infile = 1;
  SET GLOBAL local_infile = 1;
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
<u>※重要</u><br>
<syntaxhighlight lang="ini">
<u>MySQL 8.0以降では、local_infile はデフォルトで無効化されている。</u><br>
# 方法2 : my.cnf (永続設定)
<u>セキュリティリスクを理解した上で使用する必要がある。</u><br>
[mysqld]
local_infile=1
</syntaxhighlight>
<br>
クライアント側の設定方法を以下に示す。<br>
<br>
<syntaxhighlight lang="bash">
# 方法1: mysqlコマンドラインクライアントのオプション
mysql --local-infile=1 -u user -p database
</syntaxhighlight>
<br>
<syntaxhighlight lang="ini">
# 方法2: my.cnf (永続設定)
[client]
loose-local-infile=1
</syntaxhighlight>
<br>
MySQL 8.0.21以降では、<code>--load-data-local-dir</code> オプションを使用して、読み込み可能なファイルを特定のディレクトリに制限できる。<br>
<br>
<syntaxhighlight lang="bash">
# 特定ディレクトリからのみロードを許可
mysql --local-infile=0 --load-data-local-dir=/my/local/data -u user -p database
</syntaxhighlight>
<br>
<u>※注意</u><br>
<u>LOAD DATA LOCAL INFILE はセキュリティリスクを伴う。</u><br>
<u>悪意のあるサーバーがクライアントの任意のファイルにアクセスする可能性があるため、信頼できる接続先でのみ使用すること。</u><br>
<br>
<br>
===== トランザクションの活用 =====
===== トランザクションの活用 =====
InnoDBテーブルでは、トランザクション内で複数の挿入を実行することで、パフォーマンスを向上できる。<br>
InnoDBテーブルでは、トランザクション内で複数の挿入を実行することで、パフォーマンスを向上できる。<br>