Lua-database-access
Lua-データベースアクセス
単純なデータ操作の場合、ファイルを使用できますが、これらのファイル操作は効率的で、スケーラブルで、強力ではない場合があります。 この目的のために、データベースの使用に切り替えることがよくあります。 LuaSQLは、Luaから多数のデータベース管理システムへのシンプルなインターフェイスです。 LuaSQLは、さまざまなタイプのSQLのサポートを提供するライブラリです。 これには、
- SQLite
- MySQL
- ODBC
このチュートリアルでは、LuaでのMySQLとSQLiteのデータベース処理について説明します。 これは両方に汎用インターフェースを使用し、この実装を他のタイプのデータベースにも移植できるはずです。 まず、MySQLで操作を実行する方法を見てみましょう。
MySQLデータベースのセットアップ
次の例を使用して期待どおりに動作させるには、dbの初期セットアップが必要です。 前提は以下のとおりです。
- デフォルトのユーザーをルートとして、パスワードを「123456」としてMySQLをインストールしてセットアップしました。
- データベーステストを作成しました。
- リンクを理解するためにMySQLチュートリアルを完了しました:/mysql/index [MySQL Basics。]
MySQLのインポート
Luaの実装が正しく行われていると仮定して、単純な require ステートメントを使用してsqliteライブラリをインポートできます。
変数mysqlは、メインmysqlテーブルを参照することにより、関数へのアクセスを提供します。
接続のセットアップ
MySQL環境を開始し、その環境の接続を作成することにより、接続をセットアップできます。 以下に示します。
上記の接続は既存のMySQLファイルに接続し、新しく作成されたファイルとの接続を確立します。
関数を実行する
接続には、作成、挿入、削除、更新などのすべてのdb操作を実行するのに役立つ単純な実行関数があります。 構文は次のとおりです-
上記の構文では、connが開いていることと既存のMySQL接続を確認し、「MySQLSTATEMENT」を正しいステートメントに置き換える必要があります。
テーブル作成の例
簡単なテーブル作成の例を以下に示します。 タイプintegerのidとタイプvarcharの2つのパラメーターを持つテーブルを作成します。
上記のプログラムを実行すると、sampleという名前のテーブルが作成され、idとnameという2つの列が作成されます。
エラーが発生した場合、nilの代わりにエラーステートメントが返されます。 簡単なエラーステートメントを以下に示します。
ステートメントの挿入の例
MySQLの挿入ステートメントを以下に示します。
更新ステートメントの例
MySQLの更新ステートメントを以下に示します。
ステートメントの削除の例
MySQLの削除ステートメントを以下に示します。
Selectステートメントの例
selectステートメントに関する限り、各行をループして必要なデータを抽出する必要があります。 簡単な選択ステートメントを以下に示します。
上記のコードでは、connはオープンなMySQL接続です。 実行ステートメントによって返されるカーソルの助けを借りて、テーブル応答をループし、必要な選択データをフェッチできます。
完全な例
上記のすべてのステートメントを含む完全な例を以下に示します。
上記のプログラムを実行すると、次の出力が得られます。
トランザクションの実行
トランザクションは、データの一貫性を保証するメカニズムです。 トランザクションには、次の4つのプロパティが必要です-
- Atomicity -トランザクションが完了するか、まったく何も起こりません。
- 一貫性-トランザクションは一貫した状態で開始し、システムを一貫した状態のままにする必要があります。
- 分離-トランザクションの中間結果は、現在のトランザクションの外部では見えません。
- 耐久性-トランザクションがコミットされると、システム障害が発生した後でも効果は持続します。
トランザクションはSTART TRANSACTIONで始まります。コミットまたはロールバックステートメントで終了します。
トランザクション開始
トランザクションを開始するには、connが開いているMySQL接続であると仮定して、Luaで次のステートメントを実行する必要があります。
ロールバックトランザクション
start transactionの実行後に行われた変更をロールバックするには、次のステートメントを実行する必要があります。
トランザクションのコミット
start transactionの実行後に行われた変更をコミットするには、次のステートメントを実行する必要があります。
上記でMySQLについて知っており、次のセクションでは基本的なSQL操作について説明します。 トランザクションを覚えてください。ただし、SQLite3については再度説明しませんが、SQLite3でも同じステートメントが機能するはずです。
SQLiteのインポート
Luaの実装が正しく行われていると仮定して、単純なrequireステートメントを使用してSQLiteライブラリをインポートできます。 インストール中に、データベース関連ファイルを含むフォルダーlibsql。
変数sqlite3は、メインのsqlite3テーブルを参照することにより、関数へのアクセスを提供します。
接続のセットアップ
SQLite環境を開始し、その環境の接続を作成することにより、接続をセットアップできます。 以下に示します。
上記の接続は、既存のSQLiteファイルに接続するか、新しいSQLiteファイルを作成し、新しく作成されたファイルとの接続を確立します。
関数を実行する
接続には、作成、挿入、削除、更新などのすべてのdb操作を実行するのに役立つ単純な実行関数があります。 構文は次のとおりです-
上記の構文では、connが開いていることと既存のsqlite3接続を確認し、「SQLite3STATEMENT」を正しいステートメントに置き換える必要があります。
テーブル作成の例
簡単なテーブル作成の例を以下に示します。 タイプintegerのidとタイプvarcharの2つのパラメーターを持つテーブルを作成します。
上記のプログラムを実行すると、sampleという名前のテーブルが作成され、idとnameという2つの列が作成されます。
エラーが発生した場合、nilの代わりにエラーステートメントが返されます。 簡単なエラーステートメントを以下に示します。
ステートメントの挿入の例
SQLiteの挿入ステートメントを以下に示します。
Selectステートメントの例
selectステートメントに関する限り、各行をループして必要なデータを抽出する必要があります。 簡単な選択ステートメントを以下に示します。
上記のコードでは、connはオープンなsqlite3接続です。 実行ステートメントによって返されるカーソルの助けを借りて、テーブル応答をループし、必要な選択データをフェッチできます。
完全な例
上記のすべてのステートメントを含む完全な例を以下に示します。
上記のプログラムを実行すると、次の出力が得られます。
このlibsqlライブラリを使用して、利用可能なすべてのクエリを実行できます。 したがって、これらの例にとどまらないでください。 それぞれのMySQL、SQLite3、およびLuaでサポートされている他のデータベースで利用可能なさまざまなクエリステートメントを実験します。