文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…
編集の要約なし
 
1行目: 1行目:
== 概要 ==
== 概要 ==
MySQLのテーブルは、リレーショナルデータベースにおいてデータを格納する基本的な構造単位である。<br>
テーブルは、行 (レコード) と列 (カラム) で構成されたデータの集合であり、各カラムにはデータ型と制約が定義される。<br>
<br>
MySQLにおけるテーブルの主要な操作には、テーブルの作成、変更、削除、レコードの挿入・更新・削除がある。<br>
また、テーブルの構造を確認したり、テーブル一覧を取得することも可能である。<br>
<br>
テーブルは、ストレージエンジンによって管理される。<br>
MySQLでは、InnoDB、MyISAM、MEMORY、CSV、ARCHIVE等の複数のストレージエンジンが利用可能である。<br>
MySQL 5.5以降、InnoDBがデフォルトのストレージエンジンとして設定されている。<br>
<br>
InnoDBは、トランザクション対応 (ACID準拠)、行レベルロック、外部キーサポートを提供し、本番環境での使用に適している。<br>
MyISAMは、トランザクション未対応でテーブルレベルロックを使用するが、読み取り専用または読み取り中心のアプリケーションに適している。<br>
MEMORYストレージエンジンは、データをメモリ内に格納するため高速であるが、サーバ再起動時にデータは消失する。<br>
<br>
テーブルには、文字コードと照合順序を設定することができ、多言語対応や大文字小文字の区別等の挙動を制御できる。<br>
また、制約 (<code>NOT NULL</code>、<code>PRIMARY KEY</code>、<code>FOREIGN KEY</code>、<code>UNIQUE</code>、<code>CHECK</code>) を設定することにより、データの整合性を保つことができる。<br>
<br>
MySQLでは、通常のテーブルの他に、一時テーブル (TEMPORARY TABLE) を作成することもできる。<br>
一時テーブルは、現在のセッション内でのみ可視であり、セッション終了時に自動的に削除される。<br>
<br><br>
<br><br>


== テーブルの作成 ==
== テーブルの作成 ==
==== 文字コード ====
==== 基本構文 ====
テーブルの作成時において、文字コードを指定する。<br>
テーブルを作成するには、<code>CREATE TABLE</code>文を使用する。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  CREATE TABLE <テーブル名> (
  CREATE TABLE table_name (
     <カラム名 1> <型名>
     column1 datatype [constraint],
     <カラム名 2> <型名>
     column2 datatype [constraint],
     -- ...
     ...,
     CHARACTER SET=utf8mb4  -- テーブル全体の文字コードをutf8mb4に指定する場合
     table_level_constraint
);
  ) table_options;
-- または
CREATE TABLE <テーブル名> (
    <カラム名 1> <型名> CHARACTER SET=utf8mb4  -- 特定のカラムの文字コードをutf8mb4に指定する場合
    <カラム名 2> <型名>
    -- ...略
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
MySQLのデフォルトの文字コードを確認する。<br>
<center>
{| class="wikitable"
|+ 主要なカラムオプション
|-
! オプション !! 説明
|-
| <code>NOT NULL</code> || NULL値を禁止する
|-
| <code>DEFAULT</code> || デフォルト値を設定する
|-
| <code>AUTO_INCREMENT</code> || 自動インクリメント値を生成する
|-
| <code>UNIQUE</code> || 一意性を保証する
|-
| <code>PRIMARY KEY</code> || 主キーを定義する
|-
| <code>CHECK</code> || 条件を指定してデータを検証する (MySQL 8.0.16以降)
|-
| <code>COMMENT</code> || カラムにコメントを付与する
|-
| <code>VISIBLE</code> / <code>INVISIBLE</code> || カラムの可視性を制御する (MySQL 8.0以降)
|}
</center>
<br>
<center>
{| class="wikitable"
|+ 主要なテーブルオプション
|-
! オプション !! 説明
|-
| <code>ENGINE</code> || ストレージエンジンを指定する。
|-
| <code>DEFAULT CHARSET</code> || デフォルトの文字コードを指定する。
|-
| <code>DEFAULT COLLATE</code> || デフォルトの照合順序を指定する。
|-
| <code>COMMENT</code> || テーブルにコメントを付与する。(最大2048文字)
|-
| <code>AUTO_INCREMENT</code> || AUTO_INCREMENT値の初期値を設定する。
|}
</center>
<br>
例として、基本的なテーブル作成の構文を以下に示す。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  Show Variables Like "chara%";
  CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    age INT CHECK (age >= 18)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
MySQLのデフォルトの文字コードを設定する場合は、my.cnfファイルを編集する。<br>
==== ストレージエンジンの指定 ====
<u>my.cnfファイルを変更した後は、MySQLを再起動する必要がある。</u><br>
MySQLでは、テーブルごとにストレージエンジンを指定できる。<br>
<syntaxhighlight lang="ini">
<br>
# my.cnfファイル
下表に、主要なストレージエンジンを示す。<br>
<br>
[mysqld]
<center>
character-set-server=utf8mb4  # MySQLサーバのデフォルトの文字コードを指定する
{| class="wikitable"
|+ 主要ストレージエンジンの比較
[client]
! ストレージエンジン !! トランザクション !! ロック方式 !! 外部キー !! 全文検索 !! 用途
default-character-set=utf8mb4  # MySQLクライアントのデフォルトの文字コードを指定する
|-
</syntaxhighlight>
| InnoDB || 対応 (ACID準拠) || 行レベル || サポート || MySQL 5.6以降 || 本番環境、トランザクション処理
|-
| MyISAM || 未対応 || テーブルレベル || 未サポート || サポート || 読み取り専用、読み取り中心
|-
| MEMORY || 未対応 || テーブルレベル || 未サポート || 未サポート || 高速一時データ、キャッシュ
|-
| CSV || 未対応 || テーブルレベル || 未サポート || 未サポート || CSVファイル形式でのストレージ
|-
| ARCHIVE || 未対応 || 行レベル || 未サポート || 未サポート || 圧縮ストレージ、ログデータ
|}
</center>
<br>
InnoDBは、MySQL 5.5以降でデフォルトのストレージエンジンとして設定されている。<br>
InnoDBは、トランザクション対応、行レベルロック、外部キー制約、クラッシュリカバリ機能を提供する。<br>
<br>
ストレージエンジンを指定する構文を以下に示す。<br>
<br>
<br>
既存のテーブルの文字コードは、INFORMATION_SCHEMAデータベースのTABLESテーブルから確認することができる。<br>
<code>TABLE_COLLATION</code>カラムの値が、そのテーブルに設定された文字コードに相当する。<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  SELECT TABLE_NAME,TABLE_COLLATION
  CREATE TABLE t1 (
     FROM INFORMATION_SCHEMA.TABLES
    id INT PRIMARY KEY,
     WHERE TABLE_SCHEMA='<データベース名>';
     data VARCHAR(100)
) ENGINE=InnoDB;
 
CREATE TABLE t2 (
    id INT PRIMARY KEY,
     cache_data VARCHAR(255)
) ENGINE=MEMORY;
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
既存のテーブルの文字コードを変更する。<br>
既存テーブルのストレージエンジンを変更することも可能である。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  ALTER TABLE <テーブル名> CONVERT TO CHARACTER SET <文字コード>;
  ALTER TABLE table_name ENGINE=InnoDB;
# 例: 文字コードをutf8mb4に変更
ALTER TABLE <テーブル名> CONVERT TO CHARACTER SET utf8mb4
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== 既存のテーブルの存在を確認して作成 ====
==== 既存のテーブルの存在を確認して作成 ====
既存のテーブルが存在していない場合はテーブルを作成する。<br>
既存のテーブルが存在していない場合はテーブルを作成する。<br>
これは、テーブルの重複、または、既存のテーブルを上書き/削除することを防ぐことができる。<br>
これは、テーブルの重複、または、既存のテーブルを上書き / 削除することを防ぐことができる。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  CREATE TABLE IF NOT EXISTS <テーブル名> (
  CREATE TABLE IF NOT EXISTS table_name (
     <カラム名 1> <型名>
     column1 datatype,
     CHARACTER SET=utf8mb4      -- 文字コード
     column2 datatype
    COLLATE utf8mb4_general_ci  -- 照合順序
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
文字コードと照合順序を指定した構文を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
CREATE TABLE IF NOT EXISTS users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_general_ci;
</syntaxhighlight>
<br>
<u><code>IF NOT EXISTS</code> 句を指定すると、テーブルが既に存在する場合はエラーにならず、警告のみが出力される。</u><br>
<br>
<br>
==== テーブルのクローニングおよびコピー ====
==== テーブルのクローニングおよびコピー ====
<code>CREATE TABLE ... LIKE</code>文、または、<code>CREATE TABLE ... AS SELECT</code>文を使用して、<br>
<code>CREATE TABLE ... LIKE</code>文、または、<code>CREATE TABLE ... AS SELECT</code>文を使用して、<br>
元のテーブルに定義されているカラム属性やインデックス等、別のテーブルの定義に基づいて空のテーブルを作成する。<br>
元のテーブルに定義されているカラム属性やインデックス等、別のテーブルの定義に基づいて空のテーブルを作成する。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  CREATE TABLE <新しいテーブル名> LIKE <クローン元のテーブル名>;
  CREATE TABLE new_table LIKE original_table;
 
  -- または
  -- または
  CREATE TABLE <新しいテーブル名> AS SELECT * FROM <クローン元のテーブル名>;
 
  CREATE TABLE new_table AS SELECT * FROM original_table;
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
下表に、<code>CREATE TABLE ... LIKE</code>文と<code>CREATE TABLE ... AS SELECT</code>文の違いを示す。<br>
<br>
<center>
{| class="wikitable"
|+ CREATE TABLE ... LIKE と CREATE TABLE ... AS SELECT の比較
! 項目 !! CREATE TABLE ... LIKE !! CREATE TABLE ... AS SELECT
|-
| データのコピー || コピーしない (空のテーブル) || コピーする
|-
| インデックス || コピーする || 主キーのみコピー
|-
| 外部キー制約 || コピーする || コピーしない
|-
| DEFAULT値 || コピーする || コピーしない
|-
| AUTO_INCREMENT || コピーする || コピーしない
|}
</center>
<br>
テーブル構造のみをコピーして、その後でデータを挿入する場合は、以下のようにする。<br>
<br>
<syntaxhighlight lang="mysql">
CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;
</syntaxhighlight>
<br><br>
== 一時テーブル ==
==== 一時テーブルの作成 ====
==== 一時テーブルの作成 ====
MySQLでは、一時テーブルは現在のセッション内でのみ表示され、セッションがクローズされると自動的に削除される。<br>
MySQLでは、一時テーブルは現在のセッション内でのみ表示され、セッションがクローズされると自動的に削除される。<br>
81行目: 202行目:
(既存のテーブルは、一時テーブルが削除されるまで非表示になる)<br>
(既存のテーブルは、一時テーブルが削除されるまで非表示になる)<br>
<br>
<br>
InnoDBでは、圧縮一時テーブルはサポートされていない。<br>
* 一時テーブルを作成する構文
<code>innodb_strict_mode</code>オプションが有効(デフォルト)な場合、<br>
*: <syntaxhighlight lang="mysql">
<code>ROW_FORMAT=COMPRESSED</code>、または、<code>KEY_BLOCK_SIZE</code>が指定されている場合、<code>CREATE TEMPORARY TABLE</code>文はエラーとなる。<br>
CREATE TEMPORARY TABLE temp_table_name (
<code>innodb_strict_mode</code>オプションが無効な場合は、警告が出力されて、圧縮されていない行形式を使用して一時テーブルが作成される。<br>
    column1 datatype,
    column2 datatype
);
-- または
CREATE TEMPORARY TABLE IF NOT EXISTS temp_table_name (
    column1 datatype,
    column2 datatype
);
</syntaxhighlight>
*: <br>
* 一時テーブルの使用例
*: <syntaxhighlight lang="mysql">
CREATE TEMPORARY TABLE temp_results (
    user_id INT,
    total_amount DECIMAL(10,2)
);
INSERT INTO temp_results
SELECT user_id, SUM(amount)
FROM orders
GROUP BY user_id;
-- 一時テーブルを使用した処理
SELECT * FROM temp_results WHERE total_amount > 1000;
-- セッション終了時に自動的に削除される
</syntaxhighlight>
<br>
==== 一時テーブルの特徴と注意事項 ====
<center>
{| class="wikitable"
|+ 一時テーブルの主要な特徴
|-
! 特徴 !! 説明
|-
| セッションスコープ
|
* 一時テーブルは、作成したセッション内でのみ可視である
* 他のセッションからは参照できない
|-
| 自動削除
|
* セッション終了時に自動的に削除される
* 明示的に削除する場合は、<code>DROP TEMPORARY TABLE</code>文を使用する
|-
| 名前の競合
|
* 一時テーブルと同名の通常テーブルが存在する場合、一時テーブルが優先される
* 一時テーブルが削除されるまで、通常テーブルは非表示になる
|-
| データベース依存性
|
* 一時テーブルは、データベース (スキーマ) と疎な関係を持つ
* データベースを削除しても、一時テーブルは自動的には削除されない
|-
| 権限
|
* <code>CREATE TEMPORARY TABLES</code>権限が必要
* 作成後は、<code>DROP TABLE</code>、<code>INSERT</code>、<code>UPDATE</code>、<code>SELECT</code>等の操作が可能
|}
</center>
<br>
<center>
{| class="wikitable"
|+ InnoDBにおける一時テーブルの制約
|-
! 制約 !! 説明
|-
| 圧縮一時テーブルは未サポート
|
* <code>innodb_strict_mode</code>が有効 (デフォルト) な場合、<br><code>ROW_FORMAT=COMPRESSED</code>または<code>KEY_BLOCK_SIZE</code>を指定するとエラーになる。
* <code>innodb_strict_mode</code>が無効な場合は、警告が出力され、圧縮されていない行形式で作成される。
|-
| <code>innodb_file_per_table</code>オプション || InnoDB一時テーブルの作成には影響しない。
|}
</center>
<br>
MySQL 8.0では、TempTableストレージエンジンがデフォルトの内部一時テーブル用エンジンとして使用される。<br>
<br>
<code>temptable_max_ram</code> システム変数 (デフォルト1[GiB]) により、メモリ使用量を制御できる。<br>
メモリ超過時は、メモリマップファイルまたはInnoDBオンディスクに自動的に遷移する。<br>
<br>
==== トランザクションと一時テーブル ====
一時テーブルとトランザクションの関係には注意が必要である。<br>
<br>
<br>
<code>innodb_file_per-table</code>オプションは、InnoDB一時テーブルの作成には影響しない。<br>
<code>START TRANSACTION</code> 文 または <code>BEGIN</code> 文の中において、一時テーブルを作成後に <code>ROLLBACK</code> 文を実行する場合、<br>
一時テーブル自体は削除されないが、レコードは全て削除される。<br>
つまり、一時テーブルを作成する <code>CREATE TEMPORARY TABLE</code> 文は、<code>ROLLBACK</code> 文の対象にならず、レコードを複製する箇所のみがロールバックされる。<br>
<br>
動作例を以下に示す。<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  CREATE TEMPORARY TABLE <テーブル名> (
START TRANSACTION;
     <カラム名 1> <型名> <カラム 1のオプション>
 
     <カラム名 2> <型名> <カラム 2のオプション>
  CREATE TEMPORARY TABLE temp_data (
    -- ...略
     id INT,
     value VARCHAR(100)
  );
  );
INSERT INTO temp_data VALUES (1, 'test');
ROLLBACK;
-- 一時テーブル自体は存在するが、レコードは削除される
SELECT * FROM temp_data;  -- 結果: 0行
</syntaxhighlight>
<br><br>
== テーブルの確認 ==
==== テーブル一覧の確認 ====
* 現在使用しているデータベースのテーブル一覧を確認する。
*: <syntaxhighlight lang="mysql">
USE database_name;
SHOW TABLES;
</syntaxhighlight>
*: <br>
* 特定のデータベースのテーブル一覧を確認する。
*: <syntaxhighlight lang="mysql">
SHOW TABLES FROM database_name;
</syntaxhighlight>
*: <br>
* パターンマッチングを使用してテーブルを検索する。
*: <syntaxhighlight lang="mysql">
SHOW TABLES LIKE 'user%';
</syntaxhighlight>
*: <br>
* <code>INFORMATION_SCHEMA</code> データベースの <code>TABLES</code> テーブルから、詳細情報を取得する。
*:<syntaxhighlight lang="mysql">
SELECT TABLE_NAME, ENGINE, TABLE_ROWS, TABLE_COLLATION
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'database_name';
</syntaxhighlight>
<br>
==== テーブル構造の確認 ====
テーブルの構造を確認するには、<code>DESCRIBE</code> 文 または <code>SHOW CREATE TABLE</code> 文を使用する。<br>
<br>
<code>DESCRIBE</code>文は、カラム名、型、NULL許可、Key、Default、Extraの情報を表示する。<br>
<br>
<syntaxhighlight lang="mysql">
DESCRIBE table_name;
-- 省略形
DESC table_name;
</syntaxhighlight>
<br>
特定のカラムのみを確認する場合は、以下のようにする。<br>
<br>
<syntaxhighlight lang="mysql">
DESCRIBE table_name column_name;
</syntaxhighlight>
<br>
<code>SHOW CREATE TABLE</code> 文は、完全な <code>CREATE TABLE</code> 文を表示する。<br>
<br>
<syntaxhighlight lang="mysql">
SHOW CREATE TABLE table_name;
</syntaxhighlight>
<br>
この構文は、テーブルの完全な定義 (インデックス、外部キー制約、ストレージエンジン、文字コード等) を確認する場合に便利である。<br>
<br>
詳細なカラム情報を確認する場合は、<code>SHOW FULL COLUMNS</code> 文を使用する。<br>
<br>
<syntaxhighlight lang="mysql">
SHOW FULL COLUMNS FROM table_name;
</syntaxhighlight>
<br>
<code>SHOW FULL COLUMNS</code> 文は、照合順序、コメント、権限情報を含む詳細情報を表示する。<br>
<br>
==== テーブルのステータス確認 ====
テーブルのステータス情報を確認するには、<code>SHOW TABLE STATUS</code> 文を使用する。<br>
<br>
<syntaxhighlight lang="mysql">
SHOW TABLE STATUS LIKE 'table_name';
</syntaxhighlight>
<br>
<code>SHOW TABLE STATUS</code> 文の出力には、以下に示す情報が含まれる。<br>
<br>
<center>
{| class="wikitable"
|+ SHOW TABLE STATUS文の主な出力項目
|-
! 項目 !! 説明
|-
| <code>Name</code> || テーブル名
|-
| <code>Engine</code> || ストレージエンジン
|-
| <code>Version</code> || テーブルフォーマットバージョン
|-
| <code>Row_format</code> || 行フォーマット (Dynamic、Fixed、Compressed等)
|-
| <code>Rows</code> || 行数の推定値
|-
| <code>Avg_row_length</code> || 平均行長
|-
| <code>Data_length</code> || データファイルのサイズ (バイト)
|-
| <code>Index_length</code> || インデックスファイルのサイズ (バイト)
|-
| <code>Collation</code> || デフォルトの照合順序
|-
| <code>Create_time</code> || テーブル作成時刻
|-
| <code>Update_time</code> || 最終更新時刻
|-
| <code>Comment</code> || テーブルコメント
|}
</center>
<br>
特定のデータベースの全テーブルのステータスを確認する場合は、以下のようにする。<br>
<br>
<syntaxhighlight lang="mysql">
SHOW TABLE STATUS FROM database_name;
</syntaxhighlight>
<br><br>
== テーブルの変更 ==
==== テーブル名の変更 ====
テーブル名を変更するには、<code>RENAME TABLE</code> 文を使用する。<br>
<br>
<syntaxhighlight lang="mysql">
RENAME TABLE old_name TO new_name;
</syntaxhighlight>
<br>
複数のテーブルを同時にリネームすることも可能である。<br>
この構文は、テーブル名を入れ替える場合に便利である。<br>
<u>複数のリネーム操作は、アトミックに実行される。</u><br>
<br>
<syntaxhighlight lang="mysql">
RENAME TABLE t1 TO temp, t2 TO t1, temp TO t2;
</syntaxhighlight>
<br>
データベース間でテーブルを移動することもできる。<br>
<br>
<syntaxhighlight lang="mysql">
RENAME TABLE db1.table_name TO db2.table_name;
</syntaxhighlight>
<br>
一時テーブル (TEMPORARY TABLE) には、<code>RENAME TABLE</code> 文を使用できないことに注意する。<br>
一時テーブルをリネームする場合は、<code>ALTER TABLE</code> 文を使用する。<br>
<br>
<syntaxhighlight lang="mysql">
ALTER TABLE temp_table RENAME TO new_temp_table;
</syntaxhighlight>
<br>
==== AUTO_INCREMENTの設定 ====
<code>AUTO_INCREMENT</code> 属性は、整数カラムに対して自動的に増分値を生成する。<br>
<br>
テーブル作成時に <code>AUTO_INCREMENT</code> の初期値を設定する構文を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
CREATE TABLE table_name (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data VARCHAR(100)
) AUTO_INCREMENT = 1000;
</syntaxhighlight>
<br>
既存テーブルの <code>AUTO_INCREMENT</code> 値を変更する構文を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
ALTER TABLE table_name AUTO_INCREMENT = 1;
</syntaxhighlight>
<br>
現在の <code>AUTO_INCREMENT</code> 値を確認する場合は、以下のようにする。<br>
<br>
<syntaxhighlight lang="mysql">
SELECT AUTO_INCREMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'database_name'
  AND TABLE_NAME = 'table_name';
</syntaxhighlight>
<br>
MySQL 8.0では、<code>AUTO_INCREMENT</code> 値がREDOログに永続化されるため、サーバ再起動後もリセットされない。<br>
MySQL 5.7以前では、サーバ再起動後に最大値+1にリセットされる動作であった。<br>
<br>
InnoDBの <code>AUTO_INCREMENT</code> 動作を制御するシステム変数として、<code>innodb_autoinc_lock_mode</code> がある。<br>
* 0 (Traditional)
*: テーブルレベルのAUTO_INCロックを使用
* 1 (Consecutive)
*: 単純なINSERTでは軽量ロック、バルクINSERTではテーブルレベルロック
* 2 (Interleaved)
*: ロックなし (MySQL 8.0のデフォルト)
<br>
==== テーブルコメント ====
テーブルにコメントを付与することで、テーブルの目的や仕様を文書化できる。<br>
<br>
テーブル作成時にコメントを付与する構文を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50)
) COMMENT = 'ユーザー情報を管理するテーブル';
</syntaxhighlight>
<br>
<u>テーブルコメントは、最大2048文字まで設定可能である。</u><br>
<u>カラムコメントは、最大1024文字まで設定可能である。</u><br>
<br>
カラムにコメントを付与する構文を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
CREATE TABLE products (
    product_id INT PRIMARY KEY COMMENT '商品ID',
    product_name VARCHAR(100) COMMENT '商品名',
    price DECIMAL(10,2) COMMENT '価格 (税込)'
);
</syntaxhighlight>
<br>
既存テーブルのコメントを変更する場合は、以下のようにする。<br>
<br>
<syntaxhighlight lang="mysql">
ALTER TABLE table_name COMMENT = '新しいコメント';
</syntaxhighlight>
<br>
コメントを確認する方法を以下に示す。<br>
<syntaxhighlight lang="mysql">
-- テーブルコメントを確認
SHOW CREATE TABLE table_name;
   
   
  -- または
  -- または
   
   
  CREATE TEMPORARY TABLE IF NOT EXISTS <テーブル名> (
  SELECT TABLE_COMMENT
    <カラム名 1> <型名> <カラム 1のオプション>
FROM INFORMATION_SCHEMA.TABLES
    <カラム名 2> <型名> <カラム 2のオプション>
WHERE TABLE_SCHEMA = 'database_name'
     -- ...略
  AND TABLE_NAME = 'table_name';
-- カラムコメントを確認
SELECT COLUMN_NAME, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
  AND TABLE_NAME = 'table_name';
</syntaxhighlight>
<br><br>
 
== 文字コードと照合順序 ==
==== テーブルの文字コード ====
テーブルの作成時において、文字コードを指定する。<br>
<br>
<syntaxhighlight lang="mysql">
CREATE TABLE table_name (
    column1 VARCHAR(255),
     column2 TEXT
) CHARACTER SET utf8mb4;
-- または、特定のカラムに文字コードを指定
CREATE TABLE table_name (
    column1 VARCHAR(255) CHARACTER SET utf8mb4,
    column2 TEXT
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
一時テーブルを作成するには、<code>CREATE TEMPORARY TABLES</code>権限が必要となる。<br>
MySQLのデフォルトの文字コードを確認する。<br>
<br>
<br>
ただし、セッションが一時テーブルを作成した後は、サーバはそのテーブルに対するそれ以上の権限を確認しないため、<br>
<syntaxhighlight lang="mysql">
セッションの作成により、<code>DROP TABLE</code>文、<code>INSERT</code>文、<code>UPDATE</code>文、<code>SELECT</code>文等のあらゆる操作をテーブル上で実行できる。<br>
SHOW VARIABLES LIKE 'chara%';
</syntaxhighlight>
<br>
<br>
<u>一時テーブルは、データベース(スキーマ)と非常に疎な関係を持っており、データベースの削除後も、そのデータベース内で作成された一時テーブルは自動的には削除されない。</u><br>
MySQLのデフォルトの文字コードを設定する場合は、my.cnfファイルを編集する。<br>
my.cnfファイルを変更した後は、MySQLを再起動する必要がある。<br>
<br>
<syntaxhighlight lang="ini">
# my.cnfファイル
[mysqld]
character-set-server=utf8mb4  # MySQLサーバのデフォルトの文字コードを指定する
[client]
default-character-set=utf8mb4  # MySQLクライアントのデフォルトの文字コードを指定する
</syntaxhighlight>
<br>
既存のテーブルの文字コードは、<code>INFORMATION_SCHEMA</code> データベースの <code>TABLES</code> テーブルから確認することができる。<br>
<code>TABLE_COLLATION</code> カラムの値が、そのテーブルに設定された文字コードに相当する。<br>
<br>
<syntaxhighlight lang="mysql">
SELECT TABLE_NAME, TABLE_COLLATION
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'database_name';
</syntaxhighlight>
<br>
既存のテーブルの文字コードを変更する。<br>
<br>
<syntaxhighlight lang="mysql">
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4;
</syntaxhighlight>
<br>
<br>
<u>※注意</u><br>
<u><code>START TRANSACTION</code>文または<code>BEGIN</code>文の中において、一時テーブルを作成後に<code>ROLLBACK</code>文を実行する場合、</u><br>
<u>一時テーブル自体は削除されないが、レコードは全ては削除される。</u><br>
<u>つまり、一時テーブルを作成する<code>CREATE TEMPORARY TABLE</code>文は、<code>ROLLBACK</code>文の対象にならず、レコードを複製する箇所のみがロールバックされる。</u><br>
<br><br>
== 照合順序 ==
==== 照合順序とは ====
==== 照合順序とは ====
MySQLにおいて、照合順序(Collation)はテーブルや列ごとに設定することができる。<br>
MySQLにおいて、照合順序 (Collation) はテーブルや列ごとに設定することができる。<br>
照合順序は、文字列の比較やソートの際に使用され、異なる言語や地域に合わせてテキストの比較を行うために重要である。<br>
照合順序は、文字列の比較やソートの際に使用され、異なる言語や地域に合わせてテキストの比較を行うために重要である。<br>
<br>
<br>
124行目: 598行目:
例えば、大文字小文字を区別やアクセントを考慮するかどうか等の違いがある。<br>
例えば、大文字小文字を区別やアクセントを考慮するかどうか等の違いがある。<br>
<br>
<br>
* utf8mb4_general_ci
下表に、代表的な照合順序を示す。<br>
*: 大文字小文字を区別せず、アクセントを区別しない。
<br>
*: 通常の比較の場合には適しているが、文字の並び順は一般的な場合に従う。
<center>
*: <br>
{| class="wikitable"
* utf8mb4_bin
|+ 代表的な照合順序
*: バイナリ比較を行う。
|-
*: 大文字小文字やアクセント等を区別して、バイト単位で比較する。
! 照合順序 !! 説明
*: これは厳密なバイナリ比較が必要な場合に使用される。
|-
*: <br>
| <code>utf8mb4_general_ci</code>
* utf8_general_ci
|
*: utf8mb4と同様、大文字小文字を区別せず、アクセントを区別しない。
* 大文字小文字を区別せず、アクセントを区別しない
*: ただし、utf8mb4よりも少ない文字セットを使用する。
* 通常の比較の場合には適しているが、文字の並び順は一般的な場合に従う
*: <br>
|-
* latin1_swedish_ci
| <code>utf8mb4_unicode_ci</code>
*: ラテン1文字セットに基づいた照合順序であり、スウェーデンの標準に従う。
|
*: 大文字小文字を区別せず、アクセントを区別しない。
* Unicode標準 (UCA) に基づいた比較を行う
* <code>utf8mb4_general_ci</code>よりも正確なソート結果を返すが、やや低速である
|-
| <code>utf8mb4_unicode_520_ci</code>
|
* Unicode 5.2.0標準に基づいた比較を行う
* <code>utf8mb4_unicode_ci</code>よりも新しいUnicode規則に対応する
|-
| <code>utf8mb4_0900_ai_ci</code>
|
* Unicode 9.0標準に基づいた比較を行う
* MySQL 8.0のデフォルトの照合順序である
* ai (Accent Insensitive)、ci (Case Insensitive) を意味する
|-
| <code>utf8mb4_0900_as_cs</code>
|
* Unicode 9.0標準に基づいた比較を行う
* as (Accent Sensitive)、cs (Case Sensitive) を意味する
* 大文字小文字およびアクセントを区別する
|-
| <code>utf8mb4_0900_as_ci</code>
|
* Unicode 9.0標準に基づいた比較を行う
* アクセントを区別するが、大文字小文字は区別しない
|-
| <code>utf8mb4_ja_0900_as_cs</code>
|
* 日本語向けの照合順序である (MySQL 8.0以降)
* JIS X 4061規格に基づいた日本語のソート順を提供する
|-
| <code>utf8mb4_ja_0900_as_cs_ks</code>
|
* 日本語向けの照合順序であり、カナの区別 (ks: Kana Sensitive) を行う
* ひらがなとカタカナを区別して比較する
|-
| <code>utf8mb4_bin</code>
|
* バイナリ比較を行う
* 大文字小文字やアクセント等を区別して、バイト単位で比較する
* これは厳密なバイナリ比較が必要な場合に使用される
|-
| <code>utf8_general_ci</code>
|
* utf8mb4と同様、大文字小文字を区別せず、アクセントを区別しない
* ただし、utf8mb4よりも少ない文字セットを使用する (3バイトUTF-8)
|-
| <code>latin1_swedish_ci</code>
|
* ラテン1文字セットに基づいた照合順序であり、スウェーデンの標準に従う
* 大文字小文字を区別せず、アクセントを区別しない
|-
| <code>latin1_bin</code>
|
* ラテン1文字セットのバイナリ比較を行う
* 大文字小文字およびアクセントを区別する
|-
| <code>binary</code>
|
* 全てのデータをバイト列として比較する
* 文字セットに依存しない厳密なバイナリ比較を行う
|}
</center>
<br>
<br>
照合順序の詳細を知りたい場合は、MySQLの公式ドキュメントを参照すること。<br>
照合順序の詳細を知りたい場合は、MySQLの公式ドキュメントを参照すること。<br>
* MySQL 8
* https://dev.mysql.com/doc/refman/8.0/en/charset-mysql.html
*: https://dev.mysql.com/doc/refman/8.0/en/charset-mysql.html
<br>
<br>
==== 使用できる照合順序の確認 ====
==== 使用できる照合順序の確認 ====
使用できる文字コードと照合順序の組み合わせは、<code>INFORMATION_SCHEMA</code>データベースの<code>COLLATION_CHARACTER_SET_APPLICABILITY</code>テーブルから確認できる。<br>
使用できる文字コードと照合順序の組み合わせは、<code>INFORMATION_SCHEMA</code> データベースの <code>COLLATION_CHARACTER_SET_APPLICABILITY</code> テーブルから確認できる。<br>
利用できる照合順序がMySQLのバージョンによって異なるため、どのような照合順序が使用できるかどうかを確認する必要がある。<br>
利用できる照合順序がMySQLのバージョンによって異なるため、どのような照合順序が使用できるかどうかを確認する必要がある。<br>
<br>
<syntaxhighlight lang="mysql">
SELECT COLLATION_NAME, CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
WHERE COLLATION_NAME = 'collation_name';
</syntaxhighlight>
<br>
例として、照合順序にutf8mb4_general_ciが使用できるかどうかを確認する。<br>
<br>
<syntaxhighlight lang="mysql">
SELECT COLLATION_NAME, CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
WHERE COLLATION_NAME = 'utf8mb4_general_ci';
</syntaxhighlight>
<br>
利用可能な全ての照合順序を一覧表示する場合は、以下のようにする。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  SELECT COLLATION_NAME,CHARACTER_SET_NAME
  SHOW COLLATION;
    FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
    WHERE COLLATION_NAME='<照合順序>';
   
   
  -- 例: 照合順序にutf8mb4_general_ciが使用できるかどうかを確認
  -- 特定の文字セットの照合順序のみを表示
  SELECT COLLATION_NAME,CHARACTER_SET_NAME
  SHOW COLLATION WHERE Charset = 'utf8mb4';
    FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY
    WHERE COLLATION_NAME='utf8mb4_general_ci';
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== カラムの文字コードと照合順序の確認 ====
==== カラムの文字コードと照合順序の確認 ====
カラムに設定された文字コードと照合順序を確認する場合は、<code>INFORMATION_SCHEMA.COLUMNS</code> テーブルを使用する。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
  SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = '<テーブル名>'
WHERE TABLE_SCHEMA = 'database_name'
    AND table_schema = '<データベース名>'   -- オプション
  AND TABLE_NAME = 'table_name';
    AND column_name LIKE '<ワイルドカード>' -- オプション
</syntaxhighlight>
<br>
特定のカラムのみを確認する場合は、<code>WHERE</code> 句で条件を追加する。<br>
<br>
<syntaxhighlight lang="mysql">
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
  AND TABLE_NAME = 'table_name'
  AND COLUMN_NAME LIKE 'column%';
</syntaxhighlight>
<br>
==== テーブル作成時における文字コードと照合順序の指定 ====
テーブル作成時において、文字コードと照合順序を指定する構文を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
CREATE TABLE table_name (
    column1 VARCHAR(255) COLLATE utf8mb4_unicode_ci,
    column2 INT
  ) CHARACTER SET utf8mb4
  COLLATE utf8mb4_general_ci;
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
 
カラムごとに異なる照合順序を指定することも可能である。<br>
==== テーブル作成時における照合順序の指定 ====
<br>
以下の例では、データベースの作成時において、照合順序をutf8mb4_unicode_ciに指定している。<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  CREATE TABLE <テーブル名> (
  CREATE TABLE table_name (
     <カラム名 1> VARCHAR(255) COLLATE utf8mb4_unicode_ci,
     column1 VARCHAR(255) COLLATE utf8_general_ci,
    <カラム名 2> INT
     column2 INT,
);
     column3 TEXT COLLATE utf8_unicode_ci
CREATE TABLE <テーブル名> (
    <カラム名 1> VARCHAR(255) COLLATE utf8_general_ci,
     <カラム名 2> INT,
     <カラム名 3> TEXT COLLATE utf8_unicode_ci
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
<u>※注意</u><br>
<u>テーブルに照合順序を指定した場合、カラムに照合順序が指定されていない場合は、テーブルの照合順序が継承される。</u><br>
<u>テーブル全体に対する照合順序を一括で指定する方法は提供されていないことに注意する。</u><br>
<u>テーブルにも照合順序が指定されていない場合は、データベースのデフォルトの照合順序が継承される。</u><br>
<br>
<br>
==== 既存のテーブルやカラムの照合順序の変更 ====
==== 既存のテーブルやカラムの文字コードと照合順序の変更 ====
既存のテーブルやカラムの照合順序を変更することも可能である。<br>
既存のテーブルやカラムの照合順序を変更することも可能である。<br>
<br>
<br>
===== テーブルの照合順序の変更 =====
===== テーブルの照合順序の変更 =====
テーブルの照合順序を変更する。<br>
テーブルの照合順序を変更する。<br>
<u>ただし、各カラムの照合順序は変更されないことに注意する。</u><br>
ただし、各カラムの照合順序は変更されないことに注意する。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  ALTER TABLE tbl_name
  ALTER TABLE table_name
    CHARACTER SET <文字コード>
  CHARACTER SET utf8mb4
    COLLATE <照合順序>
COLLATE utf8mb4_general_ci;
   
-- 例: sample_tableテーブルの照合順序をutf8mb4_general_ciに変更する
ALTER TABLE sample_table
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_general_ci
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<u>この構文は、テーブルのデフォルト照合順序のみを変更し、既存カラムの照合順序は変更しない。</u><br>
<u>新しく追加されるカラムには、変更後の照合順序が適用される。</u><br>
<br>
<br>
===== 全ての文字カラムの照合順序の変更 =====
===== 全ての文字カラムの照合順序の変更 =====
全ての文字カラムの文字コードおよび照合順序を変更する。<br>
全ての文字カラムの文字コードおよび照合順序を変更する。<br>
これは、テーブルの文字コードと各カラムの文字コードを揃える時に使用すると便利である。<br>
これは、テーブルの文字コードと各カラムの文字コードを揃える時に使用すると便利である。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  ALTER TABLE <テーブル名>
  ALTER TABLE table_name
    CONVERT TO CHARACTER SET <文字コード>
  CONVERT TO CHARACTER SET utf8mb4
    COLLATE <照合順序>
COLLATE utf8mb4_general_ci;
   
-- 例: sample_tableテーブルの文字コードをutf8mb4、照合順序をutf8mb4_general_ciに変更する
ALTER TABLE sample_table
    CONVERT TO CHARACTER SET utf8mb4
    COLLATE utf8mb4_general_ci
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<code>CONVERT TO CHARACTER SET</code> 句を使用すると、既存の全ての文字カラムの文字コードと照合順序が一括変更される。<br>
データの変換も自動的に行われる。<br>
<br>
<br>
===== 任意のカラムの照合順序の変更 =====
===== 任意のカラムの照合順序の変更 =====
以下の例では、テーブルの任意のカラムの照合順序を<code>utf8mb4_unicode_ci</code>に変更している。<br>
特定のカラムのみの照合順序を変更する場合は、以下のようにする。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  ALTER TABLE <テーブル名> MODIFY <カラム名> <カラムの型名: CHAR, VARCHAR, TEXT> COLLATE utf8mb4_unicode_ci;
  ALTER TABLE table_name
  MODIFY column_name VARCHAR(255) COLLATE utf8mb4_unicode_ci;
-- 例: sample_tableテーブルのsample_colカラムをutf8mb4_unicode_ciに変更する
  ALTER TABLE sample_table MODIFY sample_col VARCHAR(255) COLLATE utf8mb4_unicode_ci;
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
 
<code>MODIFY</code> 句を使用する場合は、カラムの型も再指定する必要がある。<br>
<br>
==== デフォルトの照合順序 ====
==== デフォルトの照合順序 ====
テーブルにおけるデフォルトの照合順序を確認する場合、<br>
テーブルにおけるデフォルトの照合順序を確認する場合、<br>
テーブル自体に照合順序が指定されていない場合、テーブルはデータベースのデフォルトの照合順序を継承する。<br>
テーブル自体に照合順序が指定されていない場合、テーブルはデータベースのデフォルトの照合順序を継承する。<br>
<br>
<br>
デフォルトのテーブル照合順序を確認する。<br>
テーブルのデフォルト照合順序を確認する。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  SHOW TABLE STATUS LIKE '<テーブル名>';
  SHOW TABLE STATUS LIKE '<テーブル名>';
238行目: 800行目:
<br>
<br>
これは、テーブルのステータス情報を表示する。<br>
これは、テーブルのステータス情報を表示する。<br>
出力結果において、<code>Collation</code>カラムの値がテーブルの照合順序である。<br>
出力結果において、<code>Collation</code> カラムの値がテーブルの照合順序である。<br>
<br>
<br>
もし、テーブルに照合順序が指定されていない場合、データベースのデフォルトの照合順序が表示される。<br>
もし、テーブルに照合順序が指定されていない場合、データベースのデフォルトの照合順序が表示される。<br>
<br><br>
<br>
 
データベースのデフォルト照合順序を確認する場合は、以下のようにする。<br>
== テーブルの削除 ==
<br>
<u><code>DROP TABLE</code>文により削除したテーブルは、復元することができないことに注意する。</u><br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  DROP TABLE <テーブル名>;
  SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'database_name';
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
複数のテーブルを一括して削除する場合、カンマ区切りでテーブル名を列挙する。<br>
サーバ全体のデフォルト照合順序を確認する場合は、以下のようにする。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  DROP TABLE <テーブル名 1>, <テーブル名 2>, <テーブル名 3>;
  SHOW VARIABLES LIKE 'collation%';
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>


== レコードの削除 ==
== 制約 ==
==== DELETE文 ====
==== NOT NULL ====
<code>DELETE</code>文は、テーブル内のレコードを削除するクエリである。<br>
<code>NOT NULL</code> 制約は、カラムにNULL値を禁止する。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  DELETE FROM <テーブル名>;
  CREATE TABLE product (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(16) NOT NULL,
    price INT
);
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
<code>WHERE</code>句で条件を指定しない場合、テーブル内の全てのデータが削除される。<br>
<code>NOT NULL</code> 制約が設定されたカラムには、必ず値を挿入する必要がある。<br>
特定のレコードのみを削除する場合は、必ず<code>WHERE</code>句で条件指定をする。<br>
NULL値を挿入しようとすると、エラーが発生する。<br>
<syntaxhighlight lang="mysql">
DELETE FROM <テーブル名> WHERE <カラム名> = <値>;
</syntaxhighlight>
<br>
<br>
==== TRUNCATE文 ====
既存カラムに<code>NOT NULL</code> 制約を追加する場合は、以下のようにする。<br>
<code>TRUNCATE</code>文は、テーブル内のレコードを完全に削除するクエリである。<br>
<br>
<br>
<code>TRUNCATE</code>文は<code>DELETE</code>文とは異なり、<code>WHERE</code>句での条件指定ができない。<br>
そのため、テーブル内のレコードは必ず全て削除される。<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  TRUNCATE TABLE <テーブル名>;
  ALTER TABLE table_name
MODIFY column_name datatype NOT NULL;
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
<code>TRUNCATE</code>文は、条件を指定してデータの削除ができないことに注意する。<br>
==== CHECK ====
<br><br>
<code>CHECK</code> 制約は、条件を指定して、条件を満たさないデータを禁止する。<br>
 
<code>CHECK</code> 制約は、MySQL 8.0.16以降でサポートされている。<br>
== テーブルの確認 ==
<br>
現在使用しているデータベースのテーブルを確認する。<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
USE <データベース名>;
  CREATE TABLE user (
SHOW TABLES;
     user_id INT PRIMARY KEY,
</syntaxhighlight>
     age INT,
<br><br>
     city_code CHAR(4),
 
     gender CHAR(1),
== 制約 ==
    CONSTRAINT agecity_check CHECK (age >= 18 OR city_code = '0003'),
==== NOT NULL ====
    CONSTRAINT gendercheck CHECK (gender IN ('M', 'F'))
NULL値を禁止する。<br>
<syntaxhighlight lang="sql">
  CREATE TABLE product 
(
     product_id      INT PRIMARY KEY,
     product_name     VARCHAR(16) UNIQUE NOT NULL,
     price            INT
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== CHECK ====
<code>CHECK</code> 制約は、テーブルレベルまたはカラムレベルで指定できる。<br>
条件を指定して、条件を満たさないデータを禁止する。<br>
<br>
  <syntaxhighlight lang="sql">
  <syntaxhighlight lang="mysql">
  CREATE TABLE user
  CREATE TABLE products (
(
     product_id INT PRIMARY KEY,
  user_id     INT PRIMARY KEY,
    price DECIMAL(10,2) CHECK (price > 0),
  age        INT,
     discount_rate DECIMAL(3,2) CHECK (discount_rate BETWEEN 0 AND 1)
  city_code  CHAR(4),
  gender      CHAR(1),
  CONSTRAINT  agecity_check  CHECK(age >= 18 OR city_code = '0003'),
  CONSTRAINT  gendercheck     CHECK(gender IN('M', 'F')))
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== UNIQUE KEY ====
==== UNIQUE KEY ====
<code>UNIQUE</code> 制約は、カラムに重複したデータを禁止する。<br>
<code>UNIQUE</code> 制約の特徴を以下に示す。<br>
* 重複したデータを禁止する。
* 重複したデータを禁止する。
* 複数のカラムに設定できる。
* 複数のカラムに設定できる。
* ただし、<code>NULL</code>を禁止するわけではない。
* NULL値は禁止しない。(NULL値は複数許可される)
<br>
<br>
  <syntaxhighlight lang="sql">
  <syntaxhighlight lang="mysql">
  CREATE TABLE user
  CREATE TABLE user (
(
     user_id INT PRIMARY KEY,
     user_id     INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE,
     telephone   CHAR(8),
     telephone CHAR(8),
     addreess    VARCHAR(255),
     address VARCHAR(255),
     UNIQUE (telephone, address)
     UNIQUE (telephone, address)
  );
  );
</syntaxhighlight>
<br>
複数のカラムに対して<code>UNIQUE</code> 制約を設定した場合、それらのカラムの組み合わせが一意である必要がある。<br>
<br>
既存テーブルに <code>UNIQUE</code> 制約を追加する場合は、以下のようにする。<br>
<br>
<syntaxhighlight lang="mysql">
ALTER TABLE table_name
ADD UNIQUE (column_name);
-- または、複数カラムに対して
ALTER TABLE table_name
ADD UNIQUE (column1, column2);
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== PRIMARY KEY ====
==== PRIMARY KEY ====
* 一意を保証する。
<code>PRIMARY KEY</code> 制約は、テーブルの主キーを定義する。<br>
* 重複と<code>NULL</code>を禁止する。
<code>PRIMARY KEY</code> 制約の特徴を以下に示す。<br>
* 1つのテーブルに1つしか指定できない。
* 一意性を保証する
* 重複とNULL値を禁止する
* 1つのテーブルに1つしか指定できない
* 自動的にインデックスが作成される
<br>
<br>
  <syntaxhighlight lang="sql">
  <syntaxhighlight lang="mysql">
  CREATE TABLE user
  CREATE TABLE user (
(
     user_id INT PRIMARY KEY,
     user_id     INT PRIMARY KEY,
     telephone CHAR(8),
     telephone   CHAR(8),
     age INT
     age         INT
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
複合主キーも指定できる。<br>
複合主キーも指定できる。<br>
  <syntaxhighlight lang="sql">
<br>
  CREATE TABLE price
  <syntaxhighlight lang="mysql">
(
  CREATE TABLE price (
     shop_code     CHAR(4),
     shop_code CHAR(4),
     product_code   CHAR(4),
     product_code CHAR(4),
     price         INT,
     price INT,
     PRIMARY KEY(shop_code , product_code)
     PRIMARY KEY (shop_code, product_code)
  );
  );
</syntaxhighlight>
<br>
既存テーブルに主キーを追加する場合は、以下のようにする。<br>
<br>
<syntaxhighlight lang="mysql">
ALTER TABLE table_name
ADD PRIMARY KEY (column_name);
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== FOREIGN KEY ====
==== FOREIGN KEY ====
他のテーブルのカラムを参照して、そのカラムに存在しないデータを禁止する。<br>
<code>FOREIGN KEY</code> 制約は、他のテーブルのカラムを参照して、そのカラムに存在しないデータを禁止する。<br>
  <syntaxhighlight lang="sql">
外部キー制約により、参照整合性を保つことができる。<br>
  CREATE TABLE order
<br>
(
  <syntaxhighlight lang="mysql">
     order_id     INT PRIMARY KEY,
  CREATE TABLE order_table (
     shop_code     CHAR(5),
     order_id INT PRIMARY KEY,
     product_code CHAR(4),
     shop_code CHAR(5),
     number       INT,
     product_code CHAR(4),
     date         DATE,
     number INT,
     FOREIGN KEY (shop_code)
     date DATE,
              REFERENCES shop_table(shop_code),
     FOREIGN KEY (shop_code) REFERENCES shop_table (shop_code),
     FOREIGN KEY (product_code)
     FOREIGN KEY (product_code) REFERENCES product_table (product_code)
              REFERENCES product_table(product_code)
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
2つのカラムを外部参照することもできる。<br>
複数のカラムを外部参照することもできる。<br>
  <syntaxhighlight lang="sql">
<br>
  CREATE TABLE item
  <syntaxhighlight lang="mysql">
  (
  CREATE TABLE item (
     maker_id   CHAR(10),
    maker_id CHAR(10),
     product_id CHAR(10),
    product_id CHAR(10),
     PRIMARY KEY (maker_id , product_id)
    PRIMARY KEY (maker_id, product_id)
  );
CREATE TABLE dealer (
    shop_id CHAR(10) NOT NULL,
     maker_id CHAR(10) NOT NULL,
     product_id CHAR(10) NOT NULL,
     PRIMARY KEY (shop_id, maker_id, product_id),
    FOREIGN KEY (maker_id, product_id) REFERENCES item (maker_id, product_id)
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
  <syntaxhighlight lang="sql">
外部キー制約には、参照動作を指定できる。<br>
  CREATE TABLE dealer
<br>
(
  <syntaxhighlight lang="mysql">
     shop_id        CHAR(10) NOT NULL,
  CREATE TABLE orders (
     maker_id      CHAR(10) NOT NULL,
     order_id INT PRIMARY KEY,
    product_id    CHAR(10) NOT NULL,
     customer_id INT,
    PRIMARY KEY (shop_id , maker_id , product_id),
     FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
     FOREIGN KEY (maker_id , product_id)
      ON DELETE CASCADE
          REFERENCES item(maker_id , product_id)
      ON UPDATE CASCADE
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
下表に、参照動作のオプションを示す。<br>
<br>
<center>
{| class="wikitable"
|+ 参照動作のオプション
|-
! オプション !! 説明
|-
| <code>CASCADE</code> || 親テーブルの行が削除 / 更新されると、子テーブルの行も削除 / 更新される。
|-
| <code>SET NULL</code> || 親テーブルの行が削除 / 更新されると、子テーブルの外部キーカラムがNULLに設定される。
|-
| <code>RESTRICT</code> || 子テーブルに参照行が存在する場合、親テーブルの削除 / 更新を禁止する。(デフォルト)
|-
| <code>NO ACTION</code> || RESTRICTと同じ動作
|-
| <code>SET DEFAULT</code> || MySQLでは未サポート
|}
</center>
<br>
<br>
==== 制約の名前を設定 ====
==== 制約の名前を設定 ====
  <syntaxhighlight lang="sql">
制約には、名前を付けることができる。<br>
  CONSTRAINT <制約の名前> <制約>
制約名を指定すると、後で制約を削除する際に便利である。<br>
<br>
  <syntaxhighlight lang="mysql">
  CREATE TABLE table_name (
    column1 datatype,
    CONSTRAINT constraint_name constraint_definition
);
</syntaxhighlight>
<br>
例として、制約名を指定した構文を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
CREATE TABLE user (
    user_id INT PRIMARY KEY,
    age INT,
    gender CHAR(1),
    CONSTRAINT age_check CHECK (age >= 18),
    CONSTRAINT gender_check CHECK (gender IN ('M', 'F'))
);
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== 制約の削除 ====
==== 制約の削除 ====
  <syntaxhighlight lang="sql">
制約を削除するには、<code>ALTER TABLE</code> 文を使用する。<br>
  ALTER TABLE <テーブル名> DROP CONSTRAINT <制約の名前>;
<br>
<syntaxhighlight lang="mysql">
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
  </syntaxhighlight>
<br>
* 主キーを削除する場合
*: <syntaxhighlight lang="mysql">
  ALTER TABLE table_name DROP PRIMARY KEY;
</syntaxhighlight>
*: <br>
* 外部キーを削除する場合
*: <syntaxhighlight lang="mysql">
ALTER TABLE table_name DROP FOREIGN KEY constraint_name;
</syntaxhighlight>
*: <br>
* <code>UNIQUE</code> 制約を削除する場合
*: <syntaxhighlight lang="mysql">
ALTER TABLE table_name DROP INDEX constraint_name;
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== デフォルト値の設定 ====
==== デフォルト値の設定 ====
  <syntaxhighlight lang="sql">
カラムにデフォルト値を設定することで、値が指定されない場合に自動的に設定される値を定義できる。<br>
  CREATE TABLE product
<br>
(
  <syntaxhighlight lang="mysql">
     product_id INT NOT NULL PRIMARY KEY,
  CREATE TABLE product (
     name       CHAR(16) UNIQUE,
     product_id INT NOT NULL PRIMARY KEY,
     price       INT DEFAULT 2000
     name CHAR(16) UNIQUE,
     price INT DEFAULT 2000,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
デフォルト値には、リテラル値や式を指定できる。<br>
<br>
<syntaxhighlight lang="mysql">
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    status VARCHAR(20) DEFAULT 'active',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
</syntaxhighlight>
<br>
* 既存カラムにデフォルト値を追加する場合
*: <syntaxhighlight lang="mysql">
ALTER TABLE table_name
ALTER COLUMN column_name SET DEFAULT default_value;
</syntaxhighlight>
*: <br>
* デフォルト値を削除する場合
*: <syntaxhighlight lang="mysql">
ALTER TABLE table_name
ALTER COLUMN column_name DROP DEFAULT;
</syntaxhighlight>
<br><br>
== テーブルの削除 ==
テーブルを削除するには、<code>DROP TABLE</code> 文を使用する。<br>
<code>DROP TABLE</code> 文により削除したテーブルは、復元することができないことに注意する。<br>
<br>
<syntaxhighlight lang="mysql">
DROP TABLE table_name;
</syntaxhighlight>
<br>
複数のテーブルを一括して削除する場合、カンマ区切りでテーブル名を列挙する。<br>
<br>
<syntaxhighlight lang="mysql">
DROP TABLE table1, table2, table3;
</syntaxhighlight>
<br>
テーブルが存在しない場合にエラーを発生させないようにするには、<code>IF EXISTS</code> 句を使用する。<br>
<br>
<syntaxhighlight lang="mysql">
DROP TABLE IF EXISTS table_name;
</syntaxhighlight>
<br>
一時テーブルを削除する場合は、<code>DROP TEMPORARY TABLE</code> 文を使用する。<br>
<br>
<syntaxhighlight lang="mysql">
DROP TEMPORARY TABLE temp_table_name;
</syntaxhighlight>
<br>
<code>DROP TABLE</code> 文は、テーブルの構造とデータの両方を削除する。<br>
データのみを削除してテーブル構造を残す場合は、<code>DELETE</code> 文 または <code>TRUNCATE</code><br>文を使用する。<br>
<br><br>
<br><br>


== インポート ==
== レコードの削除 ==
==== DELETE文 ====
<code>DELETE</code> 文は、テーブル内のレコードを削除するクエリである。<br>
<br>
<syntaxhighlight lang="mysql">
DELETE FROM table_name;
</syntaxhighlight>
<br>
<code>WHERE</code> 句で条件を指定しない場合、テーブル内の全てのデータが削除される。<br>
特定のレコードのみを削除する場合は、必ず<code>WHERE</code> 句で条件指定をする。<br>
<br>
<syntaxhighlight lang="mysql">
DELETE FROM table_name WHERE column_name = value;
</syntaxhighlight>
<br>
例として、特定の条件を満たすレコードを削除する構文を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
DELETE FROM users WHERE user_id = 123;
DELETE FROM orders WHERE order_date < '2023-01-01';
DELETE FROM products WHERE price < 100 AND stock = 0;
</syntaxhighlight>
<br>
<code>LIMIT</code> 句を使用して、削除するレコード数を制限することもできる。<br>
<br>
<syntaxhighlight lang="mysql">
DELETE FROM table_name WHERE condition LIMIT 10;
</syntaxhighlight>
<br>
<code>ORDER BY</code> 句と組み合わせることで、特定の順序で削除することもできる。<br>
<br>
<syntaxhighlight lang="mysql">
DELETE FROM table_name WHERE condition ORDER BY column_name LIMIT 10;
</syntaxhighlight>
<br>
==== TRUNCATE文 ====
<code>TRUNCATE</code> 文は、テーブル内のレコードを完全に削除するクエリである。<br>
<br>
<code>TRUNCATE</code> 文は、<code>DELETE</code> 文とは異なり、<code>WHERE</code> 句での条件指定ができない。<br>
そのため、テーブル内のレコードは必ず全て削除される。<br>
<br>
<syntaxhighlight lang="mysql">
TRUNCATE TABLE table_name;
</syntaxhighlight>
<br>
<u><code>TRUNCATE</code> 文は、条件を指定してデータの削除ができないことに注意する。</u><br>
<br>
<code>TRUNCATE</code> 文は、<code>DELETE</code> 文よりも高速に動作する。<br>
これは、<code>TRUNCATE</code> 文がテーブル全体を削除して再作成するためである。<br>
<br>
==== DELETE文とTRUNCATE文の違い ====
<code>DELETE</code> 文 と <code>TRUNCATE</code> 文の違いを以下に示す。<br>
<br>
<center>
{| class="wikitable"
|+ DELETE文とTRUNCATE文の比較
! 特性 !! DELETE !! TRUNCATE
|-
| WHERE句 || サポート || 未サポート
|-
| トランザクション || ROLLBACK可能 || DDL的操作 (ROLLBACK不可)
|-
| AUTO_INCREMENT || リセットなし || リセット
|-
| トリガー || 発火する || 発火しない
|-
| ログ || 行ごとのログ || DDLログ
|-
| 実行速度 || 低速 (行ごとに削除) || 高速 (テーブル再作成)
|-
| 必要権限 || DELETE || DROP
|-
| 外部キー制約 || チェックする || チェックする
|-
| ディスク領域 || 即座に解放されない || 即座に解放される
|}
</center>
<br>
<code>DELETE</code> 文は、トランザクション内で使用でき、<code>ROLLBACK</code> で取り消すことができる。<br>
<code>TRUNCATE</code> 文は、DDL操作であり、トランザクションの対象外である。<br>
<br>
<code>TRUNCATE</code> 文は、<code>AUTO_INCREMENT</code> カウンタをリセットするが、<code>DELETE</code> 文はリセットしない。<br>
<br>
外部キー制約が設定されているテーブルに対して <code>TRUNCATE</code> 文を実行すると、エラーが発生する場合がある。<br>
この場合は、外部キー制約を一時的に無効化するか、<code>DELETE</code> 文を使用する。<br>
<br><br>
 
== インポートとエクスポート ==
==== CSVファイルのインポート ====
CSVファイルをテーブルにインポートするには、<code>LOAD DATA INFILE</code> 文を使用する。<br>
<br>
以下に示すようなCSVファイルがあるとする。<br>
以下に示すようなCSVファイルがあるとする。<br>
<syntaxhighlight lang="csv">
  "1001","2024-01-05 09:10:00","0"
  "1001","2024-01-05 09:10:00","0"
  "1002","2024-02-04 10:05:00","1"
  "1002","2024-02-04 10:05:00","1"
  "1003","2024-02-23 21:27:00","0"
  "1003","2024-02-23 21:27:00","0"
</syntaxhighlight>
<br>
<br>
CSVファイルと合致するようなテーブルがあるとする。<br>
CSVファイルと合致するようなテーブルがあるとする。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  CREATE TABLE <テーブル名> (
  CREATE TABLE import_table (
     ID INT,
     ID INT,
     F_DATE TIMESTAMP,
     F_DATE TIMESTAMP,
     FLAG INT,
     FLAG INT,
     PRIMARY KEY(ID)
     PRIMARY KEY (ID)
  );
  );
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
CSVファイルをテーブルにインポートする。<br>
CSVファイルをテーブルにインポートする。<br>
<br>
  <syntaxhighlight lang="mysql">
  <syntaxhighlight lang="mysql">
  LOAD DATA LOCAL INLINE "<CSVファイルのパス>"
  LOAD DATA LOCAL INFILE '/path/to/file.csv'
    INTO TABLE <インポート先のテーブル名>
INTO TABLE import_table
    FIELDS TERMINATED by '<デリミタ>-- CSVの場合は,(カンマ)を指定する
FIELDS TERMINATED BY ','
  ENCLOSED BY '"'
LINES TERMINATED BY '\n';
  </syntaxhighlight>
  </syntaxhighlight>
<br>
下表に、<code>LOAD DATA INFILE</code> 文の主要なオプションを示す。<br>
<br>
<center>
{| class="wikitable"
|+ LOAD DATA INFILE文の主要なオプション
|-
! オプション !! 説明
|-
| <code>FIELDS TERMINATED BY</code> || フィールドの区切り文字を指定する。(CSVの場合は通常カンマ)
|-
| <code>ENCLOSED BY</code> || フィールドを囲む文字を指定する。(CSVの場合は通常ダブルクォート)
|-
| <code>LINES TERMINATED BY</code> || 行の区切り文字を指定する。(Linuxの場合は '\n'、Windowsの場合は '\r\n')
|-
| <code>IGNORE n LINES</code> || 最初のn行をスキップする。(ヘッダ行がある場合)
|}
</center>
<br>
ヘッダ行をスキップする例を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
LOAD DATA LOCAL INFILE '/path/to/file.csv'
INTO TABLE import_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
</syntaxhighlight>
<br>
特定のカラムのみにインポートする場合は、以下のようにする。<br>
<br>
<syntaxhighlight lang="mysql">
LOAD DATA LOCAL INFILE '/path/to/file.csv'
INTO TABLE import_table
FIELDS TERMINATED BY ','
(column1, column2, column3);
</syntaxhighlight>
<br>
<code>LOCAL</code> キーワードを使用する場合は、クライアント側のファイルシステムからファイルを読み込む。<br>
<code>LOCAL</code >を省略した場合は、サーバ側のファイルシステムからファイルを読み込む。<br>
<br>
セキュリティ上の理由から、<code>LOCAL</code>オプションが無効化されている場合がある。<br>
この場合は、<code>local_infile</code>システム変数を有効にする必要がある。<br>
<br>
<syntaxhighlight lang="mysql">
SET GLOBAL local_infile = 1;
</syntaxhighlight>
<br>
==== CSVファイルへのエクスポート ====
テーブルのデータをCSVファイルにエクスポートするには、<code>SELECT INTO OUTFILE</code> 文を使用する。<br>
<br>
<syntaxhighlight lang="mysql">
SELECT column1, column2, column3
FROM table_name
INTO OUTFILE '/path/to/output.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
</syntaxhighlight>
<br>
文字コードを指定する場合は、<code>CHARACTER SET</code> 句を使用する。<br>
<br>
<syntaxhighlight lang="mysql">
SELECT *
FROM table_name
INTO OUTFILE '/path/to/output.csv'
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
</syntaxhighlight>
<br>
条件を指定してエクスポートする例を以下に示す。<br>
<br>
<syntaxhighlight lang="mysql">
SELECT user_id, username, email
FROM users
WHERE created_at >= '2024-01-01'
INTO OUTFILE '/path/to/users_2024.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
</syntaxhighlight>
<br>
<code>SELECT INTO OUTFILE</code> 文には、いくつかの制約がある。<br>
* <code>secure_file_priv</code> システム変数で指定されたディレクトリ内にのみファイルを出力できる。
* 出力先ファイルは既存ファイルがない場所を指定する必要がある。(上書き不可)
<br>
<code>secure_file_priv</code>の設定を確認する。<br>
<syntaxhighlight lang="mysql">
SHOW VARIABLES LIKE 'secure_file_priv';
</syntaxhighlight>
<br>
<code>secure_file_priv</code> がNULLの場合は、<code>SELECT INTO OUTFILE</code> 文は使用できない。<br>
<code>secure_file_priv</code> が空文字の場合は、任意のディレクトリに出力できる。<br>
<code>secure_file_priv</code> にディレクトリが指定されている場合は、そのディレクトリ内にのみ出力できる。<br>
<br><br>
<br><br>


441行目: 1,330行目:
{{#seo:
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,MySQL,Table,テーブル,CREATE TABLE,ALTER TABLE,DROP TABLE,Database,データベース,SQL,InnoDB,MyISAM,ストレージエンジン,制約,PRIMARY KEY,FOREIGN KEY,NOT NULL,UNIQUE,CHECK,文字コード,照合順序,Collation,TRUNCATE,DELETE,インポート,エクスポート,CSV,LOAD DATA,SELECT INTO OUTFILE,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|description={{PAGENAME}} - MySQLのテーブル作成、変更、削除、制約、文字コード、照合順序、インポート、エクスポートに関する総合ガイド | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}
}}