Mariadb-quick-guide
MariaDB-はじめに
データベースアプリケーションは、メインアプリケーションとは別に存在し、データコレクションを格納します。 すべてのデータベースは、含まれるデータの作成、アクセス、管理、検索、および複製のために1つまたは複数のAPIを採用しています。
データベースは、オブジェクトやファイルなどの非リレーショナルデータソースも使用します。 ただし、データベースは大規模なデータセットに最適なオプションであるため、他のデータソースでの取得や書き込みが遅くなります。
リレーショナルデータベース管理システム(RDBMS)は、さまざまなテーブルにデータを格納します。これらのテーブル間の関係は、主キーと外部キーを使用して確立されます。
RDBMSは次の機能を提供しています-
- これらを使用すると、テーブル、列、およびインデックスを使用してデータソースを実装できます。
- これらは、複数のテーブルの行にわたる参照の整合性を保証します。
- インデックスを自動的に更新します。
- これらは、テーブルからのデータの操作またはソースのSQLクエリと操作を解釈します。
RDBMSの用語
MariaDBの説明を始める前に、データベースに関連するいくつかの用語を確認しましょう。
- データベース-データベースは、関連データを保持するテーブルで構成されるデータソースです。
- テーブル-スプレッドシートを意味するテーブルは、データを含むマトリックスです。
- 列-データ要素を意味する列は、1つのタイプのデータを保持する構造です。たとえば、出荷日。
- 行-行は関連データをグループ化する構造です。たとえば、顧客のデータ。 タプル、エントリ、またはレコードとも呼ばれます。
- 冗長性-この用語は、システムを高速化するためにデータを2回保存することを指します。
- プライマリキー-これは一意の識別値を指します。 この値はテーブル内で2回使用することはできず、それに関連付けられている行は1つだけです。
- 外部キー-外部キーは、2つのテーブル間のリンクとして機能します。
- 複合キー-複合キー、または複合キーは、複数の列を参照するキーです。 列に固有の品質がないため、複数の列を指します。
- インデックス-インデックスは実質的に本のインデックスと同一です。
- 参照整合性-この用語は、すべての外部キー値が既存の行を指すようにすることを指します。
MariaDBデータベース
MariaDBは、MySQLのオリジナル開発者によって作成された、MySQLの人気のあるフォークです。 これは、MySQLのOracleによる買収に関する懸念から生まれました。 小規模なデータ処理タスクと企業のニーズの両方をサポートします。 これは、MySQLの簡単なアンインストールとMariaDBのインストールのみを必要とする、MySQLのドロップイン置換を目指しています。 MariaDBは、MySQLと同じ機能などを提供します。
MariaDBの主な機能
MariaDBの重要な機能は次のとおりです-
- MariaDBはすべて、GPL、LGPL、またはBSDの下にあります。
- MariaDBには、他のRDBMSデータソースと連携するための高性能ストレージエンジンを含む幅広いストレージエンジンが含まれています。
- MariaDBは、標準の一般的なクエリ言語を使用します。
- MariaDBは多くのオペレーティングシステムで実行され、さまざまなプログラミング言語をサポートしています。
- MariaDBは、最も人気のあるWeb開発言語の1つであるPHPをサポートしています。
- MariaDBはGaleraクラスターテクノロジーを提供しています。
- MariaDBは、MySQLで使用できない多くの操作とコマンドも提供し、パフォーマンスに悪影響を与える機能を排除/置換します。
入門
このチュートリアルを開始する前に、PHPとHTMLの基本的な知識、特にPHPとHTMLのチュートリアルで説明されている資料があることを確認してください。
このガイドでは、PHP環境でのMariaDBの使用に焦点を当てているため、この例はPHP開発者に最も役立ちます。
慣れていない場合や確認する必要がある場合は、PHPチュートリアルを確認することを強くお勧めします。
MariaDB-インストール
MariaDBのすべてのダウンロードは、MariaDB公式公式Webサイトのhttps://downloads.mariadb.org/[ダウンロード]セクションにあります。 希望するバージョンへのリンクをクリックすると、複数のオペレーティングシステム、アーキテクチャ、およびインストールファイルタイプのダウンロードのリストが表示されます。
LINUX/UNIXへのインストール
Linux/Unixシステムの詳細な知識がある場合は、ソースをダウンロードしてインストールをビルドしてください。 推奨されるインストール方法は、配布パッケージを利用することです。 MariaDBは、次のLinux/Unixディストリビューション用のパッケージを提供しています-
- RedHat/CentOS/Fedora
- Debian/Ubuntu
次のディストリビューションには、リポジトリにMariaDBパッケージが含まれています-
- openSUSE
- Arch Linux
- マゲイア
- Mint
- Slackware
Ubuntu環境にインストールするには、次の手順に従います-
- ステップ1 *-rootユーザーとしてログインします。
- ステップ2 *-MariaDBパッケージを含むディレクトリに移動します。
- ステップ3 *-次のコードでGnuPG署名キーをインポートします-
ステップ4 *-MariaDBを *sources.list ファイルに追加します。 ファイルを開き、次のコードを追加します-
- ステップ5 *-次を使用してシステムを更新します-
- ステップ6 *-以下を使用してMariaDBをインストールします-
Windowsへのインストール
自動インストールファイル(MSI)を見つけてダウンロードしたら、ファイルをダブルクリックしてインストールを開始します。 インストールウィザードは、インストールのすべてのステップと必要な設定をガイドします。
コマンドプロンプトからインストールを開始して、インストールをテストします。 通常はディレクトリ内のインストールの場所に移動し、プロンプトで次のように入力します-
インストールが成功すると、起動に関連するメッセージが表示されます。 これが表示されない場合は、許可の問題がある可能性があります。 ユーザーアカウントがアプリケーションにアクセスできることを確認します。 グラフィカルクライアントは、Windows環境でのMariaDB管理に使用できます。 コマンドラインが不快または扱いにくいと感じた場合は、必ず試してください。
インストールのテスト
MariaDBの機能とインストールを確認するために、いくつかの簡単なタスクを実行します。
管理ユーティリティを使用してサーバーステータスを取得
mysqladminバイナリでサーバーのバージョンを表示します。
バージョン、ディストリビューション、オペレーティングシステム、およびアーキテクチャが表示されます。 そのタイプの出力が表示されない場合は、インストールの問題を調べてください。
クライアントで簡単なコマンドを実行
MariaDBのコマンドプロンプトを表示します。 これでMariaDBに接続され、コマンドの実行が許可されます。 次のように簡単なコマンドを入力してください-
インストール後
MariaDBが正常にインストールされたら、rootパスワードを設定します。 新規インストールでは、パスワードが空白になります。 新しいパスワードを設定するには、次を入力してください-
以下を入力して、新しい資格情報でサーバーに接続します-
Windowsでのアップグレード
MySQLが既にWindowsシステムにインストールされており、MariaDBにアップグレードする場合。 MySQLをアンインストールしてMariaDBをインストールしないでください。 これにより、既存のデータベースとの競合が発生します。 代わりにMariaDBをインストールしてから、Windowsインストールファイルでアップグレードウィザードを使用する必要があります。
MySQL my.cnfファイルのオプションはMariaDBで動作するはずです。 ただし、MariaDBには多くの機能があり、MySQLにはありません。
my.cnfファイルで次の競合を考慮してください-
- MariaDBは、デフォルトで一時ファイルにAriaストレージエンジンを使用します。 一時ファイルが多数ある場合、MyISAMテーブルを使用しない場合は、キーバッファーサイズを変更します。
- アプリケーションが頻繁に接続/切断する場合は、スレッドキャッシュサイズを変更します。
- 100を超える接続を使用する場合は、スレッドプールを使用します。
互換性
MySQLとMariaDBは本質的に同一です。 ただし、アップグレードで問題を作成するには十分な違いがあります。 MariaDBナレッジベースでこれらの重要な違いを確認してください。
MariaDB-管理
MariaDBを実行する前に、まず現在の状態(実行中またはシャットダウン)を確認します。 MariaDBの起動と停止には3つのオプションがあります-
- mysqld(MariaDBバイナリ)を実行します。
- mysqld_safe起動スクリプトを実行します。
- mysql.server起動スクリプトを実行します。
MariaDBを標準以外の場所にインストールした場合、スクリプトファイルの場所情報を編集する必要があります。 スクリプトに「停止」パラメーターを追加するだけで、MariaDBを停止します。
Linuxで自動的に起動する場合は、 init システムに起動スクリプトを追加します。 各ディストリビューションには異なる手順があります。 システムのマニュアルを参照してください。
ユーザーアカウントの作成
次のコードで新しいユーザーアカウントを作成します-
このコードは、特権なしでユーザーテーブルに行を追加します。 パスワードにハッシュ値を使用するオプションもあります。 次のコードでユーザー権限を付与します-
その他の特権には、MariaDBで可能なほぼすべてのコマンドまたは操作が含まれます。 ユーザーを作成したら、「FLUSH PRIVILEGES」コマンドを実行して、許可テーブルを更新します。 これにより、ユーザーアカウントを使用できます。
構成ファイル
Unix/Linuxでビルドした後、構成ファイル「/etc/mysql/my.cnf」を次のように編集する必要があります-
「data =」と「language =」の行を環境に合わせて編集します。
ファイルの変更後、ソースディレクトリに移動し、次を実行します-
datadirを構成ファイルに追加した場合は、「$ PWD」変数を省略します。 MariaDBのバージョン10.0.1を実行する場合は、「$ LOGNAME」が使用されていることを確認してください。
管理コマンド
MariaDBで作業するときに定期的に使用する重要なコマンドの次のリストを確認します-
- USE [データベース名] -現在のデフォルトのデータベースを設定します。
- SHOW DATABASES -現在サーバー上にあるデータベースを一覧表示します。
- SHOW TABLES -すべての非一時テーブルを一覧表示します。
- SHOW COLUMNS FROM [テーブル名] -指定したテーブルに関する列情報を提供します。
- SHOW INDEX FROM TABLENAME [テーブル名] -指定したテーブルに関連するテーブルインデックス情報を提供します。
- SHOW TABLE STATUS LIKE [テーブル名] \ G – -非一時テーブルに関する情報をテーブルに提供し、LIKE句を使用してテーブル名を取得した後に表示されるパターン。
MariaDB-PHP構文
MariaDBは、PHP、C#、JavaScript、Ruby on Rails、Djangoなど、さまざまなプログラミング言語およびフレームワークと良好に連携しています。 PHPは、そのシンプルさと歴史的なフットプリントにより、利用可能なすべての言語の中で最も人気があります。 このガイドでは、MariaDBと提携しているPHPに焦点を当てます。
PHPは、MySQLデータベースを操作するための一連の関数を提供します。 これらの関数は、アクセスや操作の実行などのタスクを実行し、MariaDBと完全に互換性があります。 他のPHP関数を呼び出すように、これらの関数を呼び出すだけです。
MariaDBに使用するPHP関数は、次の形式に準拠しています-
関数の2番目の部分は、アクションを指定します。 このガイドで使用される機能の2つは次のとおりです-
次の例は、MariaDB関数へのPHP呼び出しの一般的な構文を示しています-
次のセクションでは、PHP関数を使用して、重要なMariaDBタスクを調べます。
MariaDB-接続
MariaDBとの接続を確立する1つの方法は、コマンドプロンプトでmysqlバイナリを使用することです。
MYSQLバイナリ
以下の例を確認してください。
上記のコードはMariaDBに接続し、SQLコマンドを実行するためのコマンドプロンプトを提供します。 コードを入力すると、接続が成功したことを示すウェルカムメッセージが表示され、バージョン番号が表示されます。
この例ではルートアクセスを使用していますが、特権を持つユーザーはもちろんMariaDBプロンプトにアクセスして操作を実行できます。
次のように exit コマンドを使用してMariaDBから切断します-
PHP接続スクリプト
MariaDBに接続および切断する別の方法は、PHPスクリプトを使用することです。 PHPは、データベース接続を開くための* mysql_connect()関数を提供します。 5つのオプションパラメータを使用し、接続に成功するとMariaDBリンク識別子を返し、接続に失敗するとfalseを返します。 また、単一のパラメーターを使用するデータベース接続を閉じるための mysql_close()*関数も提供します。
構文
次のPHP接続スクリプトの構文を確認してください-
パラメータの説明は以下のとおりです-
Sr.No | Parameter & Description |
---|---|
1 |
server このオプションのパラメーターは、データベースサーバーを実行しているホスト名を指定します。 デフォルト値は「localhost:.3036」です。 |
2 |
user このオプションのパラメーターは、データベースにアクセスするユーザー名を指定します。 デフォルト値はサーバーの所有者です。 |
3 |
passwd このオプションのパラメーターは、ユーザーのパスワードを指定します。 デフォルト値は空白です。 |
4 |
new_link このオプションのパラメーターは、新しい接続ではなく、同じ引数を使用した* mysql_connect()*の2回目の呼び出しで、現在の接続の識別子が返されることを指定します。 |
5 |
client flags このオプションのパラメータは、次の定数値の組み合わせを使用します-
|
以下に示すPHP切断スクリプトの構文を確認します-
リソースを省略すると、最近開いたリソースが閉じます。 正常に終了するとtrue、またはfalseの値を返します。
MariaDBサーバーに接続するには、次のサンプルコードを試してください-
接続に成功すると、次の出力が表示されます-
MariaDB-データベースの作成
MariaDBでデータベースを作成または削除するには、通常、rootユーザーまたは管理者にのみ付与される特権が必要です。 これらのアカウントでは、データベースを作成するための2つのオプション、mysqladminバイナリとPHPスクリプトがあります。
mysqladminバイナリ
次の例は、 Products という名前のデータベースを作成する際のmysqladminバイナリの使用を示しています-
PHPデータベース作成スクリプト
PHPは、MariaDBデータベースの作成に mysql_query 関数を使用します。 この関数は2つのパラメーターを使用し、1つはオプションで、成功した場合は「true」、そうでない場合は「false」の値を返します。
構文
以下の create database script 構文を確認してください-
パラメータの説明は以下のとおりです-
S.No | Parameter & Description |
---|---|
1 |
sql この必須パラメーターは、操作の実行に必要なSQLクエリで構成されます。 |
2 |
connection 指定しない場合、このオプションのパラメーターは、使用された最新の接続を使用します。 |
データベースを作成するための次のサンプルコードを試してください-
削除に成功すると、次の出力が表示されます-
MariaDB-データベースの削除
MariaDBでデータベースを作成または削除するには、通常、rootユーザーまたは管理者にのみ付与される特権が必要です。 これらのアカウントでは、データベースを削除するための2つのオプション、mysqladminバイナリとPHPスクリプトがあります。
削除されたデータベースは回復不能であるため、この操作の実行には注意が必要です。 さらに、削除に使用されるPHPスクリプトは、削除前に確認を求める* [。underline]#not#*プロンプトを表示します。
mysqladminバイナリ
次の例は、mysqladminバイナリを使用して既存のデータベースを削除する方法を示しています-
PHPドロップデータベーススクリプト
PHPは、MariaDBデータベースの削除に mysql_query 関数を使用します。 この関数は2つのパラメーターを使用し、1つはオプションで、成功した場合は「true」、そうでない場合は「false」の値を返します。
構文
次のドロップデータベーススクリプトの構文を確認します-
パラメータの説明は以下のとおりです-
Sr.No | Parameter & Description |
---|---|
1 |
sql この必須パラメーターは、操作の実行に必要なSQLクエリで構成されます。 |
2 |
connection 指定しない場合、このオプションのパラメーターは、使用された最新の接続を使用します。 |
データベースを削除するための次のサンプルコードを試してください-
削除に成功すると、次の出力が表示されます-
MariaDB-データベースの選択
MariaDBに接続した後、多くのデータベースが存在する可能性があるため、使用するデータベースを選択する必要があります。 このタスクを実行するには、コマンドプロンプトから、またはPHPスクリプトを使用して、2つの方法があります。
コマンドプロンプト
コマンドプロンプトでデータベースを選択する際には、単にSQLコマンド 'use' を利用します-
データベースを選択すると、以降のすべてのコマンドは選択したデータベースで動作します。
注-すべての名前(データベース、テーブル、フィールドなど)は大文字と小文字が区別されます。 コマンドが適切なケースに準拠していることを確認してください。
PHP Selectデータベーススクリプト
PHPは、データベース選択のために mysql_select_db 関数を提供します。 この関数は2つのパラメーターを使用します。1つはオプションで、選択が成功すると「true」、失敗するとfalseの値を返します。
構文
次の選択データベーススクリプト構文を確認します。
パラメータの説明は以下のとおりです-
S.No | Parameter & Description |
---|---|
1 |
db_name この必須パラメーターは、使用するデータベースの名前を指定します。 |
2 |
connection 指定しない場合、このオプションのパラメーターは、使用された最新の接続を使用します。 |
データベースを選択するための次のサンプルコードを試してください-
選択が成功すると、次の出力が表示されます-
MariaDB-データ型
データベースを最適化するには、適切なフィールド定義が不可欠です。 理想的なアプローチでは、必要なタイプとサイズのフィールドのみを使用する必要があります。 たとえば、5文字幅のフィールドのみを使用する場合は、20文字幅のフィールドを定義しないでください。 フィールド(または列)タイプは、フィールド内に格納されているデータタイプを考えると、データタイプとも呼ばれます。
MariaDBデータ型は、数値、日付と時刻、および文字列値として分類できます。
数値データ型
MariaDBがサポートする数値データ型は次のとおりです-
- TINYINT -このデータ型は、符号付き範囲-128〜127、および符号なし範囲0〜255に収まる小さな整数を表します。
- BOOLEAN -このデータ型は、値0を「false」に関連付け、値1を「true」に関連付けます。
- SMALLINT -このデータ型は、符号付き範囲-32768〜32768、および符号なし範囲0〜65535の整数を表します。
- MEDIUMINT -このデータ型は、-8388608〜8388607の符号付き範囲の整数、および0〜16777215の符号なし範囲を表します。
- * INT(INTEGER)*-このデータ型は通常サイズの整数を表します。 符号なしとしてマークされている場合、範囲は0〜4294967295になります。 署名されている場合(デフォルト設定)、範囲は-2147483648〜2147483647です。 列がZEROFILL(符号なし状態)に設定されている場合、すべての値の先頭にゼロが追加され、INT値にM桁が配置されます。
- BIGINT -このデータ型は、符号付き範囲9223372036854775808から9223372036854775807、および符号なし範囲0から18446744073709551615の整数を表します。
- DECIMAL (DEC、NUMERIC、FIXED)-このデータ型は正確な固定小数点数を表し、Mはその桁を指定し、Dは小数の後の桁を指定します。 M値は、「-」または小数点を追加しません。 Dが0に設定されている場合、小数部または小数部は表示されず、値はINSERTで最も近いDECIMALに丸められます。 許可される最大桁数は65で、小数部の最大数は30です。 省略時のMのデフォルト値は10、省略時のDのデフォルト値は0です。
- FLOAT -このデータ型は、値0または以下の範囲内の数値の小さい浮動小数点数を表します-
- -3.402823466E + 38から-1.175494351E-38
- 1.175494351E-38から3.402823466E + 38
- DOUBLE ( REAL および* DOUBLE PRECISION)*-このデータ型は、値0または以下の範囲内の通常サイズの浮動小数点数を表します-
- -1.7976931348623157E + 308から-2.2250738585072014E-308
- 2.2250738585072014E-308から1.7976931348623157E + 308
- BIT -このデータ型はビットフィールドを表し、Mは値ごとのビット数を指定します。 Mを省略すると、デフォルトは1です。 ビット値は、値が0と1のビット値を表す「b ’[value]’」で適用できます。 ゼロパディングは、完全に左から自動的に行われます。たとえば、「10」は「0010」になります。
日付と時刻のデータ型
MariaDBがサポートする日付と時刻のデータ型は次のとおりです-
- DATE -このデータ型は、「1000-01-01」から「9999-12-31」の日付範囲を表し、「YYYY-MM-DD」日付形式を使用します。
- TIME -このデータ型は、「-838:59:59.999999」から「838:59:59.999999」までの時間範囲を表します。
- DATETIME -このデータ型は、「1000-01-01 00:00:00.000000」から「9999-12-31 23:59:59.999999」の範囲を表します。「YYYY-MM-DD HH:MM:SS」を使用します" フォーマット。
- TIMESTAMP -このデータ型は、「YYYY-MM-DD HH:MM:DD」形式のタイムスタンプを表します。 主に、データベースの変更(挿入や更新など)の時間を詳細に説明する際に使用されます。
- YEAR -このデータ型は、4桁の形式で年を表します。 4桁の形式では、1901から2155、および0000の範囲の値を使用できます。
文字列データ型
MariaDBでサポートされている文字列型の値は次のとおりです-
- 文字列リテラル-このデータ型は、引用符で囲まれた文字シーケンスを表します。
- CHAR -このデータ型は、指定された長さのスペースを含む右詰めの固定長文字列を表します。 Mは、0〜255の範囲の文字の列の長さを表し、デフォルト値は1です。
- VARCHAR -このデータ型は、0〜65535のM範囲(最大列長)を持つ可変長文字列を表します。
- BINARY -このデータ型はバイナリバイト文字列を表し、Mはバイト単位の列長です。
- VARBINARY -このデータ型は可変長のバイナリバイト文字列を表し、Mは列の長さです。
- TINYBLOB -このデータ型は、最大長が255(28-1)バイトのblob列を表します。 ストレージでは、それぞれが値のバイト数を示す1バイトの長さのプレフィックスを使用します。
- BLOB -このデータ型は、最大長が65,535(216-1)バイトのblob列を表します。 ストレージでは、それぞれが値のバイト数を示す2バイトの長さのプレフィックスを使用します。
- MEDIUMBLOB -このデータ型は、最大長16,777,215(22 ^ 4 ^-1)バイトのblob列を表します。 ストレージでは、それぞれが値のバイト数を示す3バイトの長さのプレフィックスを使用します。
- LONGBLOB -このデータ型は、最大長が4,294,967,295(2 ^ 32 ^-1)バイトのblob列を表します。 ストレージでは、それぞれが値のバイト数を示す4バイトの長さのプレフィックスを使用します。
- TINYTEXT -このデータ型は、最大長255(2 ^ 8 ^-1)文字のテキスト列を表します。 ストレージでは、それぞれが値のバイト数を示す1バイトの長さのプレフィックスを使用します。
- TEXT -このデータ型は、最大長65,535(2 ^ 16 ^-1)文字のテキスト列を表します。 ストレージでは、それぞれが値のバイト数を示す2バイトの長さのプレフィックスを使用します。
- MEDIUMTEXT -このデータ型は、最大長16,777,215(2 ^ 24 ^-1)文字のテキスト列を表します。 ストレージでは、それぞれが値のバイト数を示す3バイトの長さのプレフィックスを使用します。
- LONGTEXT -このデータ型は、最大長が4,294,967,295または4GB(2 ^ 32 ^-1)文字のテキスト列を表します。 ストレージでは、それぞれが値のバイト数を示す4バイトの長さのプレフィックスを使用します。
- ENUM -このデータ型は、リストから単一の値のみを持つ文字列オブジェクトを表します。
- SET -このデータ型は、最大64のメンバーを持つ、リストから0個以上の値を持つ文字列オブジェクトを表します。 SET値は、整数値として内部に存在します。
MariaDB-テーブルの作成
この章では、テーブルの作成方法を学びます。 テーブルを作成する前に、まずその名前、フィールド名、およびフィールド定義を決定します。
以下は、テーブル作成の一般的な構文です-
PRODUCTSデータベースのテーブルの作成に適用されるコマンドを確認します-
上記の例では、フィールド値として「NOT NULL」を使用して、NULL値によるエラーを回避しています。 属性「AUTO_INCREMENT」は、次に利用可能な値をIDフィールドに追加するようMariaDBに指示します。 キーワードの主キーは、列を*主キー*として定義します。 コンマで区切られた複数の列で主キーを定義できます。
テーブルを作成する主な2つの方法は、コマンドプロンプトとPHPスクリプトを使用することです。
コマンドプロンプト
以下に示すように、CREATE TABLEコマンドを使用してタスクを実行します-
すべてのコマンドがセミコロンで終了していることを確認してください。
PHPテーブル作成スクリプト
PHPは、テーブル作成用に* mysql_query()*を提供します。 その2番目の引数には、必要なSQLコマンドが含まれています-
テーブルの作成が成功すると、次の出力が表示されます-
MariaDB-テーブルの削除
この章では、テーブルを削除する方法を学びます。
テーブルの削除は非常に簡単ですが、削除されたテーブルはすべて回復不能であることを忘れないでください。 テーブル削除の一般的な構文は次のとおりです-
テーブルドロップを実行するには、コマンドプロンプトまたはPHPスクリプトを使用する2つのオプションがあります。
コマンドプロンプト
コマンドプロンプトで、単に DROP TABLE SQLコマンドを使用します-
PHPドロップテーブルスクリプト
PHPは、テーブルを削除するための* mysql_query()*を提供します。 2番目の引数に適切なSQLコマンドを渡すだけです-
テーブルが正常に削除されると、次の出力が表示されます-
MariaDB-クエリの挿入
この章では、テーブルにデータを挿入する方法を学びます。
テーブルにデータを挿入するには、INSERTコマンドが必要です。 コマンドの一般的な構文は、INSERTの後にテーブル名、フィールド、および値が続きます。
以下に示す一般的な構文を確認します-
このステートメントでは、ストリング値に単一引用符または二重引用符を使用する必要があります。 ステートメントの他のオプションには、「INSERT … SET」ステートメント、「INSERT … SELECT」ステートメント、および他のいくつかのオプションが含まれます。
注-ステートメント内に表示されるVALUES()関数は、INSERTステートメントにのみ適用され、他の場所で使用された場合はNULLを返します。
操作を実行するための2つのオプションがあります。コマンドラインを使用するか、PHPスクリプトを使用します。
コマンドプロンプト
プロンプトで、選択操作を実行する多くの方法があります。 標準的なステートメントは以下のとおりです-
あなたは複数の行を挿入することができます-
また、SET句を採用することができます-
PHP挿入スクリプト
PHP関数内で同じ「INSERT INTO …」ステートメントを使用して、操作を実行します。 もう一度* mysql_query()*関数を使用します。
以下に示す例を確認します-
データの挿入が成功すると、次の出力が表示されます-
また、正しいデータ入力を確認するためのチェックなどの挿入ステートメントと検証ステートメントを連携させます。 MariaDBには、この目的のための多数のオプションが含まれており、その一部は自動化されています。
MariaDB-選択クエリ
この章では、テーブルからデータを選択する方法を学びます。
SELECTステートメントは、選択された行を取得します。 UNIONステートメント、順序句、LIMIT句、WHERE句、GROUP BY … HAVING句、およびサブクエリを含めることができます。
次の一般的な構文を確認します-
SELECTステートメントは、使用するテーブルを指定するための複数のオプションを提供します-
- database_name.table_name
- table_name.column_name
- database_name.table_name.column_name
すべての選択ステートメントには、1つ以上の*選択式*が含まれている必要があります。 選択式は、次のオプションのいずれかで構成されています-
- 列名
- 演算子と関数を使用する式。
- 指定されたテーブル内のすべての列を選択するための指定「table_name。*」。
- FROM句で指定されたすべてのテーブルからすべての列を選択する文字「*」。
selectステートメントの実行には、コマンドプロンプトまたはPHPスクリプトを使用できます。
コマンドプロンプト
コマンドプロンプトで、次のようにステートメントを実行します-
PHP Selectスクリプト
PHP関数内で同じSELECTステートメントを使用して、操作を実行します。 もう一度* mysql_query()*関数を使用します。 以下に示す例を確認します-
データの取得に成功すると、次の出力が表示されます-
ベストプラクティスでは、SELECTステートメントごとにカーソルメモリを解放することをお勧めします。 PHPは、この目的のために* mysql_free_result()*関数を提供します。 以下に示すように、その使用を確認します-
MariaDB-Where Clause
以下に示すWHERE句の一般的な構文を確認します-
WHERE句の次の品質に注意してください-
- オプションです。
- 任意の条件を指定できます。
- ANDまたはOR演算子を使用して、複数の条件を指定できます。
- 大文字と小文字の区別は、LIKE比較を使用するステートメントにのみ適用されます。
WHERE句は、次の演算子の使用を許可します-
Operator | = != | > < | >= ⇐ |
---|
WHERE句は、コマンドプロンプトまたはPHPスクリプト内で使用できます。
コマンドプロンプト
コマンドプロンプトで、単に標準コマンドを使用します-
この例では、AND条件とOR条件の両方を組み合わせています
Where句を使用したPHPスクリプト
WHERE句を使用する操作で* mysql_query()*関数を使用します-
データの取得に成功すると、次の出力が表示されます-
MariaDB-クエリの更新
次の一般的な構文を確認します-
コマンドプロンプトから、またはPHPスクリプトを使用して、UPDATEコマンドを実行します。
コマンドプロンプト
コマンドプロンプトで、単に標準のコマンドルートを使用します-
PHP更新クエリスクリプト
UPDATEコマンドステートメントで* mysql_query()*関数を使用します-
データの更新が成功すると、次の出力が表示されます-
MariaDB-クエリの削除
DELETEコマンドは、指定されたテーブルからテーブル行を削除し、削除された数量を返します。 ROW_COUNT()関数を使用して、削除された数量にアクセスします。 WHERE句は行を指定し、存在しない場合はすべての行が削除されます。 LIMIT句は、削除される行の数を制御します。
複数の行に対するDELETEステートメントでは、条件を満たす行のみを削除します。 LIMITおよびWHERE句は許可されていません。 DELETEステートメントでは、異なるデータベースのテーブルから行を削除できますが、テーブルから削除してからサブクエリ内の同じテーブルから選択することはできません。
次のDELETE構文を確認します-
コマンドプロンプトから、またはPHPスクリプトを使用して、DELETEコマンドを実行します。
コマンドプロンプト
コマンドプロンプトで、単に標準コマンドを使用します-
PHP削除クエリスクリプト
DELETEコマンドステートメントで* mysql_query()*関数を使用します-
データの削除に成功すると、次の出力が表示されます-
MariaDB-Like句
WHERE句は、操作が完全一致を使用するときにデータを取得する方法を提供します。 共通の特性を持つ複数の結果が必要な状況では、 LIKE 句は広範なパターンマッチングに対応します。
LIKE句は、パターンマッチをテストし、trueまたはfalseを返します。 比較に使用されるパターンは、次のワイルドカード文字を受け入れます。「%」は文字数(0以上)と一致します。 「」は単一の文字に一致します。 「」ワイルドカード文字は、そのセット内の文字にのみ一致します。つまり、別のセットを使用する場合、ラテン文字は無視されます。 一致はデフォルトで大文字と小文字を区別しません。大文字と小文字を区別するための追加設定が必要です。
NOT LIKE句を使用すると、 not 演算子と同様に、反対の条件をテストできます。
ステートメント式またはパターンがNULLと評価される場合、結果はNULLです。
以下に示す一般的なLIKE句の構文を確認します-
コマンドプロンプトまたはPHPスクリプト内でLIKE句を使用します。
コマンドプロンプト
コマンドプロンプトで、単に標準コマンドを使用します-
Like節を使用したPHPスクリプト
LIKE句を使用するステートメントで* mysql_query()*関数を使用します
データの取得に成功すると、次の出力が表示されます-
MariaDB-句による順序
前の説明で述べたように、 ORDER BY 句はステートメントの結果をソートします。 操作対象のデータの順序を指定し、昇順(ASC)または降順(DESC)でソートするオプションが含まれます。 順序指定を省略すると、デフォルトの順序は昇順です。
ORDER BY句は、DELETEやUPDATEなどのさまざまなステートメントに表示されます。 最終結果のテーブルを操作するため、サブクエリ内またはset関数の前ではなく、常にステートメントの最後に表示されます。 また、整数を使用して列を識別することもできません。
以下に示すORDER BY句の一般的な構文を確認してください-
コマンドプロンプトまたはPHPスクリプト内でORDER BY句を使用します。
コマンドプロンプト
コマンドプロンプトで、単に標準コマンドを使用します-
Order By句を使用したPHPスクリプト
ORDER BY句を使用するステートメントで、もう一度* mysql_query()*関数を使用します-
データの取得に成功すると、次の出力が表示されます-
MariaDB-参加
前の議論と例では、単一のテーブルからの取得、または複数のソースからの複数の値の取得について検討しました。 ほとんどの実際のデータ操作ははるかに複雑で、集約、比較、および複数のテーブルからの取得が必要です。
以下に示すように、JOINを使用するステートメントの一般的な構文を確認します-
JOINSの古い構文では暗黙的な結合が使用され、キーワードは使用されていません。 WHERE句を使用して結合を実現することは可能ですが、キーワードは読みやすさ、保守、およびベストプラクティスに最適です。
JOINには、左結合、右結合、内部結合など、多くの形式があります。 さまざまな結合タイプは、共有値または特性に基づいてさまざまなタイプの集約を提供します。
コマンドプロンプトまたはPHPスクリプトでJOINを使用します。
コマンドプロンプト
コマンドプロンプトで、単に標準的なステートメントを使用します-
JOINを使用したPHPスクリプト
結合操作を実行するには、* mysql_query()*関数を使用します-
データの取得に成功すると、次の出力が表示されます-
MariaDB-ヌル値
NULL値を使用する場合、値が不明であることを忘れないでください。 有効な値である空の文字列またはゼロではありません。 テーブルの作成では、列の指定により、NULL値を受け入れるか拒否するかを設定できます。 NULLまたはNOT NULL句を使用するだけです。 これには、ID番号などのレコード情報が欠落している場合のアプリケーションがあります。
ユーザー定義変数の値は、明示的に割り当てられるまでNULLです。 ルーチンパラメータとローカル変数を保存すると、NULLの値を設定できます。 ローカル変数にデフォルト値がない場合、値はNULLです。
NULLは大文字と小文字を区別せず、次のエイリアスがあります-
- UNKNOWN(ブール値)
- \N
NULL演算子
NULL値を使用したすべての比較はtrueまたはfalseではなくNULLを返すため、標準の比較演算子をNULL(=、>、> =、⇐、<、または!=など)と一緒に使用することはできません。 NULLとの比較、またはNULLを含む可能性がある場合は、「<⇒」(NULL-SAFE)演算子を使用する必要があります。
他の利用可能な演算子は-
- IS NULL-NULL値をテストします。
- IS NOT NULL-NULL値がないことを確認します。
- ISNULL-NULL値を検出すると値1を返し、値がない場合は0を返します。
- COALESCE-リストの最初の非NULL値を返すか、リストがない場合はNULL値を返します。
NULL値の並べ替え
並べ替え操作では、NULL値の値が最も低いため、DESCの順序の結果、下部にNULL値が表示されます。 MariaDBでは、NULL値に高い値を設定できます。
以下に示すように、これを行うには2つの方法があります-
他の方法-
NULL関数
関数は、通常、パラメーターがNULLの場合にNULLを出力します。 ただし、NULL値を管理するために特別に設計された関数があります。 彼らは-
- * IFNULL()*-最初の式がNULLでない場合、それを返します。 NULLと評価されると、2番目の式を返します。
- * NULLIF()*-比較された式が等しい場合はNULLを返し、等しくない場合は最初の式を返します。
SUMやAVGなどの関数はNULL値を無視します。
NULL値の挿入
NOT NULLと宣言された列にNULL値を挿入すると、エラーが発生します。 デフォルトのSQLモードでは、データ型に基づいてNOT NULL列が代わりにデフォルト値を挿入します。
フィールドがTIMESTAMP、AUTO_INCREMENT、または仮想列の場合、MariaDBはNULL値を異なる方法で管理します。 AUTO_INCREMENTカラムに挿入すると、シーケンス内の次の番号がその場所に挿入されます。 TIMESTAMPフィールドでは、MariaDBは代わりに現在のタイムスタンプを割り当てます。 このチュートリアルで後述するトピックである仮想列では、デフォルト値が割り当てられます。
UNIQUEインデックスは多くのNULL値を保持できますが、主キーをNULLにすることはできません。
NULL値と変更コマンド
ALTERコマンドを使用して列を変更すると、NULL指定がない場合、MariaDBは自動的に値を割り当てます。
MariaDB-正規表現
LIKE句から利用できるパターンマッチングを超えて、MariaDBはREGEXP演算子を使用した正規表現ベースのマッチングを提供します。 演算子は、指定されたパターンに基づいて文字列式のパターンマッチングを実行します。
MariaDB 10.0.5はPCRE正規表現を導入しました。これにより、再帰パターン、先読みアサーションなどの領域へのマッチングの範囲が劇的に増加します。
以下に示す標準のREGEXP演算子構文の使用を確認します-
REGEXPは、パターンマッチの場合は1を返し、パターンマッチがない場合は0を返します。
反対のオプションは、NOT REGEXPの形式で存在します。 MariaDBは、互換性のために作成されたREGEXPとNOT REGEXP、RLIKEおよびNOT RLIKEの同義語も提供します。
比較されるパターンは、リテラル文字列またはテーブル列などのその他のものです。 文字列では、Cエスケープ構文を使用するため、「\」文字を2倍にします。 REGEXPは、バイナリ文字列を除き、大文字と小文字を区別しません。
使用できる可能なパターンの表は以下に示されています-
Sr.No | Pattern & Description |
---|---|
1 |
^ 文字列の先頭に一致します。 |
2 |
$ 文字列の末尾に一致します。 |
3 |
. 単一の文字に一致します。 |
4 |
[…] 大括弧内の任意の文字に一致します。 |
5 |
[^…] 大括弧にリストされていない任意の文字と一致します。 |
6 | *p1 |
p2 |
p3* いずれかのパターンに一致します。 |
7 | 前の要素の0個以上のインスタンスに一致します。 |
8 |
+ 前の要素の1つ以上のインスタンスに一致します。 |
9 |
{n} 前の要素のn個のインスタンスに一致します。 |
10 |
\{m,n} 前の要素のm〜n個のインスタンスに一致します。 |
以下に示すパターンマッチングの例を確認します-
「pr」で始まる製品-
「na」で終わる製品-
母音で始まる製品-
MariaDB-トランザクション
トランザクションは、順次グループ操作です。 これらは単一のユニットとして機能し、グループ内のすべての操作が正常に実行されるまで終了しません。 グループ内の単一障害により、トランザクション全体が失敗し、データベースに影響を与えません。
トランザクションはACID(原子性、一貫性、分離、および耐久性)に準拠しています-
- Atomicity -失敗時に中止し、変更をロールバックすることにより、すべての操作の成功を保証します。
- 一貫性-データベースが正常なトランザクションに変更を適用することを保証します。
- 分離-トランザクションの独立したトランザクション操作を可能にします。
- 耐久性-システム障害が発生した場合に成功したトランザクションの永続性を保証します。
トランザクション文の先頭には、START TRANSACTION文とそれに続くCOMMITおよびROLLBACK文があります-
- START TRANSACTIONはトランザクションを開始します。
- COMMITは、データへの変更を保存します。
- ROLLBACKはトランザクションを終了し、変更を破棄します。
トランザクションが成功すると、COMMITが機能します。 失敗すると、ROLLBACKが機能します。
注-一部のステートメントは暗黙的なコミットを引き起こし、トランザクション内で使用するとエラーを引き起こします。 このようなステートメントの例には、CREATE、ALTER、およびDROPが含まれますが、これらに限定されません。
MariaDBトランザクションには、SAVEPOINTやLOCK TABLESなどのオプションも含まれます。 SAVEPOINTは、ROLLBACKで使用する復元ポイントを設定します。 LOCK TABLESを使用すると、セッション中にテーブルへのアクセスを制御して、特定の期間中の変更を防ぐことができます。
AUTOCOMMIT変数は、トランザクションを制御します。 1を設定すると、すべての操作が成功したトランザクションと見なされ、0を設定すると、明示的なCOMMITステートメントでのみ変更の永続性が発生します。
トランザクションの構造
トランザクションステートメントの一般的な構造は、START TRANSACTIONで始まることで構成されます。 次のステップは、1つ以上のコマンド/操作の挿入、エラーをチェックするステートメントの挿入、検出されたエラーを管理するROLLBACKステートメントの挿入、最後に成功した操作に変更を適用するCOMMITステートメントの挿入です。
以下に示す例を確認します-
MariaDB-変更コマンド
ALTERコマンドは、既存のテーブルの構造を変更する方法を提供します。つまり、列の削除または追加、インデックスの変更、データ型の変更、名前の変更などの変更を意味します。 ALTERは、メタデータロックがアクティブなときに変更の適用も待機します。
ALTERを使用して列を変更する
ALTERとDROPを組み合わせて、既存の列を削除します。 ただし、列が唯一の残りの列である場合は失敗します。
以下に示す例を確認します-
ALTER … ADDステートメントを使用して列を追加します-
キーワードFIRSTとAFTERを使用して、列の配置を指定します-
FIRSTおよびAFTERキーワードは、ALTER … ADDステートメントにのみ適用されることに注意してください。 さらに、テーブルの位置を変更するには、テーブルを削除してから追加する必要があります。
ALTERステートメントでMODIFYまたはCHANGE句を使用して、列の定義または名前を変更します。 句には同様の効果がありますが、実質的に異なる構文を使用します。
以下に示すCHANGEの例を確認します-
CHANGEを使用するステートメントで、元の列を指定してから、それを置き換える新しい列を指定します。 以下のMODIFYの例を確認してください-
ALTERコマンドでは、デフォルト値を変更することもできます。 例を見直す-
また、DROP句と組み合わせることでデフォルトの制約を削除するために使用することができます-
ALTERを使用してテーブルを変更する
TYPE句を使用してテーブルタイプを変更する-
RENAMEキーワードでテーブルの名前を変更します-
MariaDB-インデックスと統計テーブル
インデックスは、レコードの取得を加速するためのツールです。 インデックスは、インデックス列内の各値のエントリを生成します。
インデックスには4種類あります-
- プライマリ(1つのレコードはすべてのレコードを表します)
- ユニーク(1つのレコードは複数のレコードを表します)
- 平野
- フルテキスト(テキスト検索で多くのオプションを許可します)。
「キー」と「インデックス」という用語は、この使用法では同じです。
インデックスは1つ以上の列に関連付けられ、迅速な検索と効率的なレコード編成をサポートします。 インデックスを作成するときは、クエリで頻繁に使用される列を検討してください。 次に、それらに1つまたは複数のインデックスを作成します。 さらに、インデックスを基本的に主キーのテーブルとして表示します。
インデックスは検索やSELECTステートメントを高速化しますが、テーブルとインデックスの両方で操作を実行するため、挿入と更新のドラッグを行います。
インデックスを作成する
CREATE TABLE … INDEXステートメントまたはCREATE INDEXステートメントを使用して、インデックスを作成できます。 読みやすさ、保守、およびベストプラクティスをサポートする最適なオプションは、CREATE INDEXです。
以下に示すインデックスの一般的な構文を確認します-
その使用例を確認します-
インデックスを削除する
DROP INDEXまたはALTER TABLE … DROPを使用してインデックスを削除できます。 読みやすさ、メンテナンス、およびベストプラクティスをサポートする最適なオプションは、DROP INDEXです。
以下に示すドロップインデックスの一般的な構文を確認します-
その使用例を確認します-
インデックスの名前を変更する
ALTER TABLEステートメントでインデックスの名前を変更します。 以下に示す一般的な構文を確認します-
その使用例を確認します-
インデックスの管理
すべてのインデックスを調べて追跡する必要があります。 SHOW INDEXを使用して、特定のテーブルに関連付けられている既存のインデックスをすべてリストします。 表示されるコンテンツの形式は、垂直形式を指定する「\ G」などのオプションを使用して設定できます。
次の例を確認します-
テーブル統計
インデックスは、レコードへの高速アクセスと提供される統計を考慮して、クエリを最適化するために頻繁に使用されます。 ただし、多くのユーザーはインデックスの保守が面倒だと感じています。 MariaDB 10.0は、ストレージエンジンに依存しない統計テーブルを利用可能にしました。これにより、すべてのストレージエンジンのすべてのテーブルのデータ統計、およびインデックスが付けられていない列の統計も計算されます。
MariaDB-一時テーブル
一部の操作は、データの速度または使い捨てのために一時テーブルの恩恵を受けることができます。 一時テーブルは、コマンドプロンプト、PHPスクリプト、クライアントプログラムのいずれから使用しても、セッションの終了時に終了します。 また、通常の方法ではシステムに表示されません。 SHOW TABLESコマンドは、一時テーブルを含むリストを表示しません。
一時テーブルを作成する
CREATE TABLEステートメント内のTEMPORARYキーワードは、一時テーブルを生成します。 以下に示す例を確認します-
一時テーブルを作成する際、LIKE句を使用して、既存のテーブルのクローンを作成できます。つまり、それらのすべての一般的な特性を意味します。 一時テーブルの生成に使用されるCREATE TABLEステートメントは、TEMPORARYキーワードの結果としてトランザクションをコミットしません。
一時的なテーブルは一時的でないものとは区別され、セッションの終了時にドロップしますが、特定の競合が発生する場合があります-
- 期限切れセッションのゴースト一時テーブルと競合する場合があります。
- 一時テーブル以外のシャドウ名と競合する場合があります。
注-一時テーブルは、MariaDBが差分参照と見なすため、既存の非一時テーブルと同じ名前を持つことができます。
管理
MariaDBでは、一時テーブルを作成するためにユーザーに特権を付与する必要があります。 GRANTステートメントを使用して、管理者以外のユーザーにこの特権を付与します。
一時テーブルを削除する
一時テーブルはセッションの終了時に本質的に削除されますが、それらを削除するオプションがあります。 一時テーブルを削除するには、TEMPORARYキーワードを使用する必要があります。ベストプラクティスでは、一時テーブルを一時テーブルの前に削除することをお勧めします。
MariaDB-テーブルのクローン作成
状況によっては、既存のテーブルの正確なコピーを作成する必要があります。 CREATE … SELECTステートメントは、インデックスやデフォルト値などを無視するため、この出力を生成できません。
テーブルを複製するための手順は次のとおりです-
- SHOW CREATE TABLEを使用して、ソーステーブルの構造全体を詳述するCREATE TABLEステートメントを作成します。
- ステートメントを編集して、テーブルに新しい名前を付けて実行します。 *テーブルデータもコピーする必要がある場合は、INSERT INTO … SELECTステートメントを使用します。
複製を作成する別の方法では、CREATE TABLE ASステートメントを使用します。 この文は、すべての列、列定義をコピーし、コピーにソース表のデータを移入します。
以下の構文を確認します-
以下の使用例を確認してください-
MariaDB-シーケンス
バージョン10.0.3では、MariaDBはシーケンスと呼ばれるストレージエンジンを導入しました。 そのアドホックは、操作用の整数シーケンスを生成し、その後終了します。 シーケンスには、降順または昇順の正の整数が含まれ、開始値、終了値、および増分値が使用されます。
仮想(ディスクに書き込まれない)の性質のため、元のクエリでのみ複数のクエリで使用できません。 ただし、ALTERコマンドを使用して、シーケンステーブルを標準テーブルに変換できます。 変換されたテーブルが削除された場合、シーケンステーブルはまだ存在します。 シーケンスは、負の数を生成したり、最小/最大で回転することもできません。
シーケンスエンジンのインストール
シーケンスを使用するには、MariaDBがバイナリではなくプラグインとして配布するシーケンスエンジンをインストールする必要があります。 次のコマンドでインストールします-
インストール後、それを確認します-
エンジンのインストール後、シーケンス構文を使用する名前で標準テーブルを作成することはできませんが、シーケンス構文名で一時テーブルを作成できることに注意してください。
シーケンスを作成する
シーケンス作成には2つの方法があります-
- テーブルを作成し、AUTO_INCREMENT属性を使用して、列を自動インクリメントとして定義します。 *既存のデータベースを使用し、シーケンスSELECTクエリを使用してシーケンスを作成します。 クエリは、seq_ [FROM] to [TO]またはseq_ [FROM] to [TO] _step_STEP構文を使用します。
ベストプラクティスは、2番目の方法の使用を好みます。 以下に示すシーケンス作成の例を確認します-
シーケンスには多くの用途があります-
- 操作内の関連する問題から保護するために、列内の欠損値を見つけます-
- 値の組み合わせを構築します-
- 数の倍数を見つける-
- 予約システムなどのアプリケーションで使用する日付シーケンスを作成します。
- 時系列を構築します。
MariaDB-重複の管理
MariaDBは、以前のレッスンで説明したように、状況によってはレコードとテーブルの重複を許可します。 これらの重複の一部は、個別のデータまたはオブジェクトタイプのため、または操作オブジェクトの一意の寿命またはストレージの結果として、実際には重複ではありません。 これらの複製も通常は問題ありません。
状況によっては、重複が問題を引き起こし、暗黙のアクションまたはMariaDBコマンドの緩やかなポリシーが原因で表示されることがよくあります。 この問題を制御し、重複を見つけ、重複を削除し、重複の作成を防ぐ方法があります。
戦略とツール
重複を管理する4つの重要な方法があります-
- JOINで魚を捕まえ、一時テーブルでそれらを削除します。
- INSERT … ON DUPLICATE KEY UPDATEを使用して、重複の検出時に更新します。
- DISTINCTを使用して、SELECTステートメントの結果を整理し、重複を削除します。
- INSERT IGNOREを使用して、重複の挿入を停止します。
一時テーブルでの結合の使用
内部結合のような半結合を実行し、一時テーブルで見つかった重複を削除します。
INSERTを使用する
INSERT … ON DUPLICATE KEY UPDATEが重複する一意キーまたは主キーを検出すると、更新を実行します。 複数の一意のキーが検出されると、最初のキーのみが更新されます。 したがって、複数の一意のインデックスを持つテーブルでは使用しないでください。
次の例を確認します。これは、入力されたフィールドへの挿入時にインデックス値を含むテーブルで何が起こるかを明らかにします-
注意-キーが見つからない場合、INSERT … ON DUPLICATE KEY UPDATEステートメントは通常の挿入ステートメントと同様に実行されます。
DISTINCTを使用する
DISTINCT句は、結果から重複を削除します。 DISTINCT句の一般的な構文は次のとおりです-
注-DISTINCT句を含むステートメントの結果-
- 1つの式を使用すると、一意の値が返されます。
- 複数の式を使用すると、一意の組み合わせが返されます。
- NULL値は無視されません。したがって、結果には一意の値としてNULLも含まれます。
単一の式のDISTINCT句を使用して、次のステートメントを確認します-
複数の式を使用して次の例を確認します-
INSERT IGNOREの使用
INSERT IGNOREステートメントは、重複レコードの検出時に挿入をキャンセルするようMariaDBに指示します。 以下に指定されたその使用例を確認します-
また、重複の背後にあるロジックに注意してください。 一部のテーブルでは、そのテーブルデータの性質に基づいて複製が必要です。 重複レコードを管理するための戦略にそのニーズに対応します。
MariaDB-SQLインジェクション保護
ユーザー入力を受け入れるという単純な行為は、悪用の扉を開きます。 この問題は主にデータの論理管理に起因しますが、幸いなことに、これらの主要な欠陥を回避することはかなり簡単です。
SQLインジェクションの機会は通常、ユーザーが名前などのデータを入力するときに発生し、コードロジックはこの入力の分析に失敗します。 コードではなく、攻撃者がデータベースで実行されるMariaDBステートメントを挿入できるようにします。
ユーザーが入力したデータを常に考慮し、疑わしく、処理の前に強力な検証が必要です。 パターン検証を通じてこの検証を実行します。 たとえば、予想される入力がユーザー名の場合、入力する文字を英数字とアンダースコアに制限し、特定の長さにします。 以下に示す例を確認します-
また、入力制約の作成には、REGEXP演算子とLIKE句を使用します。
などの入力の必要な明示的な制御のすべてのタイプを考慮します-
- 使用するエスケープ文字を制御します。
- 入力用の特定の適切なデータ型を制御します。 入力を必要なデータ型とサイズに制限します。
- 入力データの構文を制御します。 必要なパターン以外は許可しないでください。
- 許可される条件を管理します。 ブラックリストSQLキーワード。
インジェクション攻撃の危険性を知らない場合や、取るに足らないものとみなす場合もありますが、セキュリティ上の懸念のリストの上位にあります。 さらに、これらの2つのエントリの効果を考慮してください-
これらのいずれかを正しいコマンドと一緒に入力できるコードは、データベース上のすべてのユーザーデータを明らかにしたり、データベース上のすべてのデータを削除したりする可能性があります。 場合によっては、攻撃者は穴の調査に時間を費やすことさえしません。単純な入力でブラインド攻撃を実行します。
また、MariaDBと組み合わせたプログラミング/スクリプト言語によって提供されるパターンマッチングおよび正規表現ツールを検討してください。これらのツールは、より多くの制御を提供し、時にはより良い制御を提供します。
MariaDB-バックアップ方法
データはビジネスと運用の基盤として機能し、さまざまな脅威(攻撃者、システム障害、不適切なアップグレード、メンテナンスエラーなど)が存在するため、バックアップは引き続き重要です。 これらのバックアップには多くの形式があり、それらのプロセス内でさらに幅広いオプションセットを使用して作成するための多くのオプションがあります。 覚えておくべき重要なことは、データベースの種類、重要な情報、および関係する構造です。 この情報により、最適なオプションが決まります。
オプション
バックアップの主なオプションには、論理バックアップと物理バックアップが含まれます。 論理バックアップは、データを復元するためのSQLステートメントを保持します。 物理バックアップにはデータのコピーが含まれます。
- *論理バックアップ*は、同じマシンとデータベースの種類に制限されることが多い物理バックアップとは対照的に、異なる構成の別のマシンでデータを復元する柔軟性を提供します。 論理バックアップはデータベースおよびテーブルレベルで行われ、物理バックアップはディレクトリおよびファイルレベルで行われます。
- *物理バックアップ*は、論理バックアップよりもサイズが小さく、実行および復元にかかる時間が短縮されます。 物理バックアップにはログおよび構成ファイルも含まれますが、論理バックアップには含まれません。
バックアップツール
MariaDBバックアップに使用される主なツールは mysqldump です。 論理的なバックアップと柔軟性を提供します。 また、小規模なデータベースに最適なオプションでもあります。 Mysqldump は、データをSQL、CSV、XML、および他の多くの形式にダンプします。 その出力は、明示的な指示なしにストアドプロシージャ、ビュー、およびイベントを保持しません。
- Raw data -ファイルの宛先も指定する—tabオプションを使用して、テーブルを生データファイルとしてダンプします-
- データ/定義のエクスポート-このオプションを使用すると、単一または複数のテーブルをファイルにエクスポートでき、ホストマシン上のすべての既存データベースのバックアップがサポートされます。 コンテンツまたは定義をファイルにエクスポートする例を調べる
- 転送-データベースとテーブルを別のホストに出力することもできます
SELECT … INTO OUTFILEステートメントの使用
データをエクスポートする別のオプションでは、SELECT … INTO OUTFILEステートメントを使用します。 この単純なオプションは、テーブルを単純な書式付きテキストファイルに出力します-
その属性により、ファイルを好みの仕様にフォーマットできます。
この声明の次の品質に注意してください-
- ファイル名は、出力の目的の場所を指定する必要があります。
- ステートメントを実行するには、MariaDBファイル権限が必要です。
- 出力ファイル名は一意である必要があります。
- ホストでログイン資格情報が必要です。
- UNIX環境では、出力ファイルは誰でも読み取り可能ですが、そのサーバー所有権は削除する機能に影響します。 特権があることを確認してください。
バックアップでのCONNECTの使用
CONNECTハンドラーは、データのエクスポートを許可します。 これは、主にSELECT … INTO OUTFILE操作でファイル形式がサポートされていない状況で役立ちます。
次の例を確認します-
その他の道具
バックアップの他のオプションは次のとおりです-
- XtraBackup -このオプションはXtraDB/InnoDBデータベースを対象とし、任意のストレージエンジンで動作します。 このツールの詳細については、Perconaの公式サイトをご覧ください。
- スナップショット-いくつかのファイルシステムはスナップショットを許可します。 このプロセスは、読み取りロックでテーブルをフラッシュし、スナップショットをマウントし、テーブルのロックを解除し、スナップショットをコピーしてから、スナップショットをアンマウントすることで構成されます。
- LVM -この一般的な方法では、Perlスクリプトを使用します。 すべてのテーブルで読み取りロックを取得し、キャッシュをディスクにフラッシュします。 次に、スナップショットを取得し、テーブルのロックを解除します。 詳細については、公式の mylvmbackup Webサイトを参照してください。
- TokuBackup -Perconaが提供するこのソリューションは、InnoDBバックアップオプションの問題と制限を考慮したホットバックアップを提供します。 アプリケーションがファイルを操作し続ける間、ファイルのトランザクションサウンドコピーを生成します。詳細については、Percona Webサイトを参照してください。
INNODBに関する考慮事項
InnoDBはパフォーマンス向上のためにバッファープールを使用します。 通常、論理バックアップはテーブル全体のスキャンを実行するため、バックアップでは、InnoDBを構成してテーブル全体をバッファープールにコピーしないようにします。
MariaDB-バックアップの読み込み方法
この章では、さまざまなバックアップの読み込み方法について学習します。 バックアップからデータベースを復元するのは簡単で、時には非常に長いプロセスです。
データのロードには、LOAD DATAステートメント、mysqlimport、および単純なmysqldumpリストアの3つのオプションがあります。
LOAD DATAの使用
LOAD DATAステートメントは、バルクローダーとして機能します。 テキストファイルをロードするその使用例を確認します-
LOAD DATA文の次の品質に注意してください-
- LOCALキーワードを使用して、MariaDBがホストの詳細検索を実行しないようにし、非常に具体的なパスを使用します。
- このステートメントは、改行(改行)で終了する行と、タブで区切られたデータ値で構成される形式を想定しています。
- FIELDS句を使用して、行のフィールドのフォーマットを明示的に指定します。 LINES句を使用して、行末を指定します。 以下の例を確認してください。
- このステートメントは、データファイル内の列がテーブルの同じ順序を使用することを前提としています。 別の順序を設定する必要がある場合は、次のようにファイルをロードできます-
MYSQLIMPORTの使用
mysqlimportツールはLOAD DATAラッパーとして機能し、コマンドラインから同じ操作を実行できます。
次のようにデータをロードします-
次のようにフォーマットを指定します-
- columns オプションを使用して列の順序を指定します-
MYSQLDUMPの使用
特別な文字と引用
LOAD DATAステートメントでは、引用符と特殊文字が正しく解釈されない場合があります。 このステートメントは、引用符で囲まれていない値を想定し、バックスラッシュをエスケープ文字として扱います。 FIELDS句を使用してフォーマットを指定します。 「ENCLOSED BY」で引用符を指すと、データ値から引用符が削除されます。 「エスケープ」でエスケープを変更します。
MariaDB-便利な機能
この章には、最も頻繁に使用される機能、定義、説明、および例が記載されています。
MariaDB集約関数
最も頻繁に使用される集約関数は以下のとおりです-
Sr.No | Name & Description |
---|---|
1 |
COUNT レコードの数をカウントします。 例-SELECT COUNT(*)FROM customer_table; |
2 |
MIN 一連のレコードの最小値を明らかにします。 例-SELECT組織、MIN(アカウント)FROM契約GROUP BY組織; |
3 |
MAX 一連のレコードの最大値を明らかにします。 例-SELECT組織、MAX(account_size)FROMコントラクトGROUP BY組織。 |
4 |
AVG 一連のレコードの平均値を計算します。 例-SELECT AVG(account_size)FROM contracts; |
5 |
SUM レコードのセットの合計を計算します。 例-SELECT SUM(account_size)FROM contracts; |
MariaDB年齢計算
MariaDB文字列連結
次の例を確認します-
MariaDBの日付/時刻関数
以下は重要な日付関数です-
Sr.No | Name & Description |
---|---|
1 |
CURDATE() yyyy-mm-ddまたはyyyymmdd形式で日付を返します。 例-SELECT CURDATE(); |
2 |
DATE() 複数の形式で日付を返します。
|
3 |
HH:MM:SSまたはHHMMSS.uuuuuu形式で時刻を返します。 例-SELECT CURTIME(); |
4 |
DATE_SUB() 指定した日付から日数を加算または減算します。 例-SELECT DATE_SUB( '2016-02-08'、INTERVAL 60 DAY); |
5 |
DATEDIFF() 2つの日付の間の日を決定します。 例-SELECT DATEDIFF( '2016-01-01 23:59:59'、 '2016-01-03'); |
6 |
DATE ADD() 日付と時刻に時間単位を加算または減算します。 例-SELECT DATE_ADD( '2016-01-04 23:59:59'、INTERVAL 22 SECOND); |
7 |
EXTRACT() 日付から単位を抽出します。 例-SELECT EXTRACT(YEAR FROM '2016-01-08'); |
8 |
NOW() 現在の日付と時刻をyyyy-mm-dd hh:mm:ssまたはyyyymmddhhmmss.uuuuuu形式で返します。 例-SELECT NOW(); |
9 |
DATE FORMAT() 指定されたフォーマット文字列に従って日付をフォーマットします。 例-SELECT DATE_FORMAT( '2016-01-09 20:20:00'、 '%W%M%Y'); |
以下はいくつかの重要な時間関数です-
Sr.No | Name & Description |
---|---|
1 |
HOUR() 時間、または経過時間を返します。 例-SELECT HOUR('19:17:09 '); |
2 |
LOCALTIME() NOW()とまったく同じように機能します。 |
3 |
MICROSECOND() 時間のマイクロ秒を返します。 例-SELECT MICROSECOND('16:30:00.543876 '); |
4 |
MINUTE() 時間の分を返します。 例-SELECT MINUTE( '2016-05-22 17:22:01'); |
5 |
SECOND() 日付の秒を返します。 例-SELECT SECOND( '2016-03-12 16:30:04.000001'); |
6 |
TIME_FORMAT() 指定されたフォーマット文字列に従って時刻をフォーマットします。 例-SELECT TIME_FORMAT('22:02:20 '、'%H%k%h%I%l '); |
7 |
TIMESTAMP() アクティビティのタイムスタンプをyyyy-mm-dd hh:mm:ddの形式で提供します。 例-CREATE TABLE orders_(ID INT、tmst TIMESTAMP); |
MariaDB数値関数
以下にMariaDBの重要な数値関数を示します-
Sr.No | Name & Description |
---|---|
1 |
TRUNCATE() 切り捨てられた数値を小数点以下の桁まで指定します。 例-SELECT TRUNCATE(101.222、1); |
2 |
COS() xラジアンのコサインを返します。 例-SELECT COS(PI()); |
3 |
CEILING() x未満ではない最小の整数を返します。 例-SELECT CEILING(2.11); |
4 |
DEGREES() ラジアンを度に変換します。 例-SELECT DEGREES(PI()); |
5 |
DIV() 整数除算を実行します。 例-SELECT 100 DIV 4; |
6 |
EXP() eのx乗を返します。 例-SELECT EXP(2); |
7 |
FLOOR() xを超えない最大の整数を返します。 例-SELECT FLOOR(2.01); |
8 |
LN() xの自然対数を返します。 例-SELECT LN(3); |
9 |
LOG() 自然対数または特定の底の対数を返します。 例-SELECT LOG(3); |
10 |
SQRT() 平方根を返します。 例-SELECT SQRT(16); |
MariaDB文字列関数
重要な文字列関数は以下のとおりです-
Sr.No | Name & Description |
---|---|
1 |
INSTR() 部分文字列の最初のインスタンスの位置を返します。 例-SELECT INSTR( 'rambutan'、 'tan'); |
2 |
RIGHT() 右端の文字列文字を返します。 例-SELECT RIGHT( 'rambutan'、3); |
3 |
LENGTH() 文字列のバイト長を返します。 例-SELECT LENGTH( 'rambutan'); |
4 |
LOCATE() 部分文字列の最初のインスタンスの位置を返します。 例-SELECT LOCATE( 'tan'、 'rambutan'); |
5 |
INSERT() 変更された特定の位置に指定された部分文字列を持つ文字列を返します。 例-SELECT INSERT( 'ramputan'、4、1、 'b'); |
6 |
LEFT() 左端の文字を返します。 例-SELECT LEFT( 'rambutan'、3); |
7 |
UPPER() 文字を大文字に変更します。 例-SELECT UPPER(lastname); |
8 |
LOWER() 文字を小文字に変更します。 例-SELECT LOWER(lastname); |
9 |
STRCMP() 文字列を比較し、等しい場合は0を返します。 例-SELECT STRCMP( 'egg'、 'cheese'); |
10 |
REPLACE() 文字を置換した後、文字列を返します。 例-SELECT REPLACE( 'sully'、 'l'、 'n'); |
11 |
REVERSE() 文字列内の文字を反転します。 例-SELECT REVERSE( 'racecar'); |
12 |
REPEAT() 指定された文字をx回繰り返す文字列を返します。 例-SELECT REPEAT( 'ha'、10); |
13 |
SUBSTRING() 位置xから始まる文字列から部分文字列を返します。 例-SELECT SUBSTRING( 'rambutan'、3); |
14 |
TRIM() 文字列から末尾/先頭の文字を削除します。 例-SELECT TRIM(LEADING '_' FROM '_rambutan'); |