Mysqli-quick-guide

提供:Dev Guides
移動先:案内検索

MySQLi-はじめに

データベースとは?

データベースは、データのコレクションを格納する別個のアプリケーションです。 各データベースには、保持するデータを作成、アクセス、管理、検索、複製するための1つ以上の個別のAPIがあります。

ファイルシステム上のファイルやメモリ内の大きなハッシュテーブルなど、他の種類のデータストアを使用できますが、これらのタイプのシステムではデータのフェッチと書き込みはそれほど高速で簡単ではありません。

そのため今日では、リレーショナルデータベース管理システム(RDBMS)を使用して、膨大な量のデータを保存および管理しています。 これは、すべてのデータが異なるテーブルに格納され、プライマリキーまたは外部キーとして知られる他のキーを使用して関係が確立されるため、リレーショナルデータベースと呼ばれます。

  • リレーショナルデータベース管理システム(RDBMS)*はソフトウェアです-
  • テーブル、列、インデックスを使用してデータベースを実装できます。
  • さまざまなテーブルの行間の参照整合性を保証します。
  • インデックスを自動的に更新します。
  • SQLクエリを解釈し、さまざまなテーブルの情報を組み合わせます。

RDBMSの用語

MySQLiデータベースシステムの説明に進む前に、データベースに関連するいくつかの定義を修正しましょう。

  • データベース-データベースは、関連データを含むテーブルのコレクションです。
  • -表はデータを含む行列です。 データベース内のテーブルは、単純なスプレッドシートのように見えます。
  • -1つの列(データ要素)には、同じ種類のデータ(列の郵便番号など)が含まれます。
  • -行(=タプル、エントリ、またはレコード)は、たとえば1つのサブスクリプションのデータなど、関連データのグループです。
  • 冗長性-データを2回保存し、システムを高速化するために冗長的に保存します。
  • プライマリキー-プライマリキーは一意です。 キー値は、1つのテーブルで2回発生することはできません。 キーを使用すると、最大で1行を見つけることができます。
  • 外部キー-外部キーは、2つのテーブル間のリンクピンです。
  • 複合キー-複合キー(複合キー)は、1つの列が十分に一意ではないため、複数の列で構成されるキーです。
  • インデックス-データベース内のインデックスは、本の最後にあるインデックスに似ています。
  • 参照整合性-参照整合性は、外部キー値が常に既存の行を指すようにします。

MySQLiデータベース

MySQLiは高速で使いやすいRDBMSであり、多くの中小企業で使用されています。 MySQLi Extensionは、MySQLによって開発、販売、およびサポートされています。 MySQLは、多くの正当な理由により非常に人気が高まっています-

  • MySQLiは、オープンソースライセンスの下でリリースされています。 だから、あなたはそれを使うために支払うものは何もありません。
  • MySQLiは、それ自体が非常に強力なプログラムです。 最も高価で強力なデータベースパッケージの機能の大部分を処理します。
  • MySQLiは、よく知られたSQLデータ言語の標準形式を使用します。
  • MySQLiは多くのオペレーティングシステムで動作し、PHP、PERL、C、C ++、JAVAなどの多くの言語で動作します。
  • MySQLiは非常に高速に動作し、大規模なデータセットでも良好に動作します。
  • MySQLiは、Web開発で最も評価されている言語であるPHPに非常にフレンドリーです。
  • MySQLiは、テーブル内で最大5,000万行以上の大規模データベースをサポートします。 テーブルのデフォルトのファイルサイズ制限は4GBですが、これを(オペレーティングシステムで処理できる場合)理論上の制限である800万テラバイト(TB)まで増やすことができます。
  • MySQLiはカスタマイズ可能です。 オープンソースのGPLライセンスにより、プログラマーはMySQLソフトウェアを変更して自分の特定の環境に適合させることができます。

あなたが始める前に

このチュートリアルを始める前に、PHPおよびHTMLチュートリアルでカバーされている情報の基本的な知識が必要です。

このチュートリアルでは、PHP環境でのMySQLiの使用に重点を置いています。 このチュートリアルで提供される多くの例は、PHPプログラマーにとって有用です。

参考としてリンク:/php/index [PHPチュートリアル]を確認することをお勧めします。

MySQLi-インストール

MySQLのダウンロード

MySQLi拡張機能は、MySQLバージョン4.1.13以降で動作するように設計されているため、MySQLをダウンロードする必要があります。 MySQLのすべてのダウンロードは、https://www.mysql.com/downloads [MySQL Downloads]にあります。 _MySQL Community Server_の最新バージョン番号と、可能な限り正確なプラットフォームを選択してください。

Linux/UNIXにMySQLをインストールする

MySQLをLinuxシステムにインストールする推奨方法は、RPMを使用することです。 MySQL ABは、次のRPMをWebサイトからダウンロードできるようにします-

  • MySQL -データベースとテーブルを管理し、ユーザーアクセスを制御し、SQLクエリを処理するMySQLデータベースサーバー。
  • MySQL-client -サーバーへの接続とサーバーとの対話を可能にするMySQLクライアントプログラム。
  • MySQL-devel -MySQLを使用する他のプログラムをコンパイルするときに便利なライブラリとヘッダーファイル。
  • MySQL-shared -MySQLクライアント用の共有ライブラリ。
  • MySQL-be​​nch -MySQLデータベースサーバーのベンチマークおよびパフォーマンステストツール。

ここにリストされているMySQL RPMはすべてSuSE Linuxシステム上に構築されていますが、通常は他のLinuxバリアントでも問題なく動作します。

今、インストールを続行するには、次の手順に従ってください-

  • root ユーザーを使用してシステムにログインします。
  • RPMを含むディレクトリに切り替えます-
  • 次のコマンドを実行して、MySQLデータベースサーバーをインストールします。 イタリック体のファイル名をRPMのファイル名に置き換えてください。
[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm
  • これはオプションですが、残りのRPMを同じ方法でインストールするための推奨手順です-
[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm

WindowsにMySQLをインストールする

MySQLはインストーラーにきちんとパッケージ化されているため、Windowsのどのバージョンへのデフォルトのインストールも以前よりはるかに簡単になりました。 インストーラーパッケージをダウンロードし、任意の場所で解凍し、setup.exeを実行するだけです。

デフォルトのインストーラーsetup.exeは簡単なプロセスを順を追って説明し、デフォルトではすべてをC:\ mysqlの下にインストールします。

最初にコマンドプロンプトから起動して、サーバーをテストします。 おそらくC:\ mysql \ binであるmysqldサーバーの場所に移動し、次のように入力します-

mysqld.exe --console

-NTを使用している場合、mysqld.exeの代わりにmysqld-nt.exeを使用する必要があります。

すべてうまくいけば、スタートアップとInnoDBに関するメッセージが表示されます。 そうでない場合は、権限に問題がある可能性があります。 データベースプロセスを実行するユーザー(おそらくmysql)がデータを保持するディレクトリにアクセスできることを確認してください。

MySQLはそれ自体をスタートメニューに追加しません。また、サーバーを停止するための特に良いGUIの方法もありません。 したがって、mysqld実行可能ファイルをダブルクリックしてサーバーを起動する場合は、mysqladmin、タスクリスト、タスクマネージャー、またはその他のWindows固有の手段を使用して、手動でプロセスを停止することを忘れないでください。

MySQLインストールの検証

MySQLが正常にインストールされ、ベーステーブルが初期化され、サーバーが起動したら、いくつかの簡単なテストですべてが正常に機能していることを確認できます。

mysqladminユーティリティを使用してサーバーステータスを取得する

*mysqladmin* バイナリを使用して、サーバーのバージョンを確認します。 このバイナリは、Linuxでは/usr/binに、WindowsではC:\ mysql \ binにあります。
[root@host]# mysqladmin --version

Linuxでは次の結果が生成されます。 それはあなたのインストールに応じて異なる場合があります-

mysqladmin  Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386

そのようなメッセージが表示されない場合は、インストールに問題がある可能性があり、それを修正するには何らかの助けが必要です。

MySQLクライアントを使用して簡単なSQLコマンドを実行する

*mysql* コマンドを使用してMySQLクライアントを使用すると、MySQLサーバーに接続できます。 この時点では、デフォルトで空白に設定されるため、パスワードを指定する必要はありません。

したがって、次のコマンドを使用してください

[root@host]# mysql

mysql>プロンプトが表示されます。 これで、MySQLサーバーに接続され、次のようにmysql>プロンプトですべてのSQLコマンドを実行できます-

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.13 sec)

インストール後の手順

MySQLには、ルートMySQLユーザーの空のパスワードが付属しています。 データベースとクライアントを正常にインストールしたら、次のようにルートパスワードを設定する必要があります-

[root@host]# mysqladmin -u root password "new_password";

MySQLサーバーへの接続を確立するには、次のコマンドを使用する必要があります-

[root@host]# mysql -u root -p
Enter password:*******

UNIXユーザーは、MySQLディレクトリをPATHに配置する必要があるため、コマンドラインクライアントを使用するたびに完全なパスを入力する必要はありません。 bashの場合、次のようになります-

export PATH = $PATH:/usr/bin:/usr/sbin

起動時にMySQLを実行する

起動時にMySQLサーバーを実行する場合は、/etc/rc.localファイルに次のエントリがあることを確認してください。

/etc/init.d/mysqld start

また、/etc/init.d/ディレクトリにmysqldバイナリが必要です。

MySQLi-管理

MySQLiサーバーの実行とシャットダウン

MySQLiはMySQLから拡張されているため、まずMySQLサーバーが実行されているかどうかを確認します。 これを確認するには、次のコマンドを使用できます-

ps -ef | grep mysqld

MySqlが実行されている場合、結果に mysqld プロセスがリストされます。 サーバーが実行されていない場合は、次のコマンドを使用して起動できます。

root@host# cd/usr/bin
./safe_mysqld &

今、すでに実行中のMySQLサーバーをシャットダウンしたい場合は、次のコマンドを使用してそれを行うことができます-

root@host# cd/usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******

MySQLiユーザーアカウントの設定

MySQLの改良バージョンであるMySQLiに新しいユーザーを追加するには、データベース mysqluser テーブルに新しいエントリを追加するだけです。

以下は、パスワード guest123 を使用してSELECT、INSERT、およびUPDATE権限を持つ新しいユーザー guest を追加する例です。 SQLクエリは-

root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed

mysql> INSERT INTO user (
   host, user, password, select_priv, insert_priv, update_priv)
   VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y');

Query OK, 1 row affected (0.20 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)

mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
| host      | user    | password         |
+-----------+---------+------------------+
| localhost | guest | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)

新しいユーザーを追加するときは、MySQLが提供するPASSWORD()関数を使用して新しいパスワードを暗号化することを忘れないでください。 上記の例でわかるように、パスワードmypassは6f8c114b58f2ce9eに暗号化されています。

FLUSH PRIVILEGESステートメントに注目してください。 これは、サーバーに許可テーブルを再ロードするように指示します。 使用しない場合、少なくともサーバーが再起動されるまで、新しいユーザーアカウントを使用してmysqlに接続することはできません。

また、INSERTクエリの実行時にユーザーテーブルの次の列の値を「Y」に設定することにより、新しいユーザーに他の特権を指定することも、UPDATEクエリを使用して後で更新することもできます。

  • Select_priv
  • Insert_priv
  • Update_priv
  • Delete_priv
  • Create_priv
  • Drop_priv
  • Reload_priv
  • Shutdown_priv
  • Process_priv
  • File_priv
  • Grant_priv
  • References_priv
  • Index_priv
  • Alter_priv

ユーザーアカウントを追加する別の方法は、GRANT SQLコマンドを使用することです。次の例では、 TUTORIALS という特定のデータベースのユーザー zara をパスワード zara123 で追加します。

root@host# mysql -u root -p password;
Enter password:*******
mysql> use mysql;
Database changed

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
   -> ON TUTORIALS.*
   -> TO 'zara'@'localhost'
   -> IDENTIFIED BY 'zara123';

これにより、 user というmysqlデータベーステーブルにエントリが作成されます。

-MySQLは、SQLコマンドの最後にセミコロン(;)を指定するまでコマンドを終了しません。

===/etc/my.cnfファイルの構成

ほとんどの場合、このファイルには触れないでください。 デフォルトでは、次のエントリがあります-

[mysqld]
datadir =/var/lib/mysql
socket =/var/lib/mysql/mysql.sock

[mysql.server]
user = mysql
basedir =/var/lib

[safe_mysqld]
err-log =/var/log/mysqld.log
pid-file =/var/run/mysqld/mysqld.pid

ここでは、エラーログ用に別のディレクトリを指定できます。指定しない場合、このテーブルのエントリを変更しないでください。

管理MySQLiコマンド

ここに重要なMySQLiコマンドのリストがあります。MySQLデータベースを操作するために時々使用します-

  • USE Databasename -これは、MySQLiワークエリアで特定のデータベースを選択するために使用されます。
  • SHOW DATABASES -MySQLi DBMSからアクセス可能なデータベースを一覧表示します。
  • SHOW TABLES -useコマンドでデータベースが選択されると、データベース内のテーブルを表示します。
  • SHOW COLUMNS FROM tablename -属性、属性のタイプ、キー情報、NULLが許可されるかどうか、デフォルト、およびテーブルの他の情報を表示します。
  • SHOW INDEX FROM tablename -PRIMARY KEYを含む、テーブル上のすべてのインデックスの詳細を表示します。
  • SHOW TABLE STATUS LIKE tablename \ G -MySQLi DBMSのパフォーマンスと統計の詳細を報告します。

MySQLi-PHP構文

MySQLiは、PERL、C、C ++、JAVA、PHPなどのさまざまなプログラミング言語の組み合わせで非常にうまく機能します。 これらの言語のうち、PHPはWebアプリケーション開発機能があるため、最も人気があります。

このチュートリアルでは、PHP環境でのMySQLiの使用に重点を置いています。 PHPは、MySQLiデータベースにアクセスし、MySQLiデータベース内のデータレコードを操作するためのさまざまな機能を提供します。 他のPHP関数を呼び出すのと同じ方法でPHP関数を呼び出す必要があります。

MySQLiで使用するためのPHP関数は、次の一般的な形式を持っています-

mysqli_function(value,value,...);

関数名の2番目の部分は、その関数に固有のものであり、通常はその関数が行うことを説明する単語です。 以下は、チュートリアルで使用する2つの関数です-

mysqli_connect($connect);
mysqli_query($connect,"SQL statement");

次の例は、MySQLi関数を呼び出すためのPHPの一般的な構文を示しています。

<html>
   <head>
      <title>PHP with MySQLi</title>
   </head>

   <body>
      <?php
         $retval = mysqli_function(value, [value,...]);
         if( !$retval ){
            die ( "Error: a related error message" );
         }
        //Otherwise MySQLi  or PHP Statements
      ?>
   </body>
</html>

次の章から、PHPとともにすべての重要なMySQLi機能について説明します。

MySQLi-接続

mysqlバイナリを使用したMySQLi接続

コマンドプロンプトで mysql バイナリを使用してMySQLiデータベースを確立できます。

これは、コマンドプロンプトからmysqliデータベースを確立するためにMySQLサーバーに接続する簡単な例です-

[root@host]# mysql -u root -p
Enter password:******

これにより、mysql>コマンドプロンプトが表示され、SQLコマンドを実行できるようになります。 以下は、上記のコマンドの結果です-

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

上記の例では、ユーザーとして root を使用していますが、他のユーザーを使用できます。 すべてのユーザーは、そのユーザーに許可されているすべてのSQL操作を実行できます。

mysql>プロンプトで exit コマンドを使用すると、いつでもMySQLデータベースから切断できます。

mysql> exit
Bye

PHPスクリプトを使用したMySQLi接続

PHPは、データベース接続を開くための* mysqli_connect()*関数を提供します。 この関数は5つのパラメーターを取り、成功するとMySQLiリンクIDを返し、失敗するとFALSEを返します。

構文

connection mysqli_connect(server,user,passwd,new_link,client_flag);
Sr.No. Parameter & Description
1

server

オプション-データベースサーバーを実行しているホスト名。 指定しない場合、デフォルト値は localhost:3306 です。

2

user

オプション-データベースにアクセスするユーザー名。 指定されない場合、デフォルトはサーバープロセスを所有するユーザーの名前です。

3

passwd

オプション-データベースにアクセスするユーザーのパスワード。 指定しない場合、デフォルトは空のパスワードです。

4

new_link

オプション-同じ引数を使用してmysqli_connect()を2回目に呼び出した場合、新しい接続は確立されません。代わりに、すでに開かれている接続の識別子が返されます。

5

client_flags

オプション-次の定数の組み合わせ-

  • MYSQLI_CLIENT_SSL-SSL暗号化を使用
  • MYSQLI_CLIENT_COMPRESS-圧縮プロトコルを使用
  • MYSQLI_CLIENT_IGNORE_SPACE-関数名の後にスペースを許可します
  • MYSQLI_CLIENT_INTERACTIVE-接続を閉じる前に、非アクティブの対話型タイムアウト秒を許可します

別のPHP関数* mysqli_close()を使用して、いつでもMySQLiデータベースから切断できます。 この関数は、 mysqli_connect()*関数によって返される接続である単一のパラメーターを取ります。

構文

bool mysqli_close ( resource $link_identifier );

リソースが指定されていない場合、最後に開かれたデータベースは閉じられます。 この関数は、接続を正常に閉じた場合はtrueを返し、そうでない場合はfalseを返します。

MySQLサーバーに接続するには、次の例を試してください-

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'guest';
         $dbpass = 'guest123';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);

         if(! $conn ){
            die('Could not connect: ' . mysqli_error());
         }
         echo 'Connected successfully';
         mysqli_close($conn);
      ?>
   </body>
</html>

上記の例がMySQLiに接続されている場合、ブラウザ上の出力は次のようになります-

Connected successfully

MySQLi-データベースの作成

mysqladminを使用してデータベースを作成する

MySQLiデータベースを作成または削除するには、特別な権限が必要です。 したがって、rootユーザーにアクセスできると仮定すると、mysql mysqladmin バイナリを使用して任意のデータベースを作成できます。

以下に、 TUTORIALS というデータベースを作成する簡単な例を示します-

[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******

これにより、MySQLiデータベースのチュートリアルが作成されます。

PHPスクリプトを使用してデータベースを作成する

PHPは mysqli_query 関数を使用してMySQLiデータベースを作成または削除します。 この関数は2つのパラメーターを取り、成功するとTRUEを、失敗するとFALSEを返します。

データベースを作成するには、次の例を試してください-

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root';
         $dbpass = '<password here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);

         if(! $conn ){
            echo 'Connected failure<br>';
         }
         echo 'Connected successfully<br>';
         $sql = "CREATE DATABASE TUTORIALS";

         if (mysqli_query($conn, $sql)) {
            echo "Database created successfully";
         } else {
            echo "Error creating database: " . mysqli_error($conn);
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

データベースが正常に接続および作成された場合、サンプル出力は次のようになります-

Connected successfully
Database created successfully

MySQLi-データベースの削除

mysqladminを使用してデータベースを削除する

MySQLiデータベースを作成または削除するには、特別な権限が必要です。 したがって、rootユーザーにアクセスできると仮定すると、mysql mysqladmin バイナリを使用して任意のデータベースを作成できます。

データベースを削除するときは注意してください。データベースで使用可能なすべてのデータが失われるためです。

これは、前の章で作成したデータベースを削除する例です-

[root@host]# mysqladmin -u root -p drop TUTORIALS
Enter password:******

これにより警告が表示され、このデータベースを本当に削除するかどうかが確認されます。

Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'TUTORIALS' database [y/N] y
Database "TUTORIALS" dropped

PHPスクリプトを使用したデータベースの削除

PHPは query 関数を使用してMySQLiデータベースを作成または削除します。 この関数は2つのパラメーターを取り、成功するとTRUEを、失敗するとFALSEを返します。

データベースを削除するには、次の例を試してください-

<html>
   <head>
      <title>Connecting MySQLi Server>/title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root';
         $dbpass = '<Password Here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);

         if(! $conn ){
            echo 'Connected failure<br>';
         }
         echo 'Connected successfully<br>';
         $sql = "DROP DATABASE TUTORIALS";

         if (mysqli_query($conn, $sql)) {
         echo "Record deleted successfully";
         } else {
            echo "Error deleting record: " . mysqli_error($conn);
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

警告-PHPスクリプトを使用してデータベースを削除している間、確認のプロンプトは表示されません。 したがって、MySQLiデータベースを削除するときは注意してください。

データベースが正常に接続および削除された場合、サンプル出力は次のようになります-

Connected successfully
Database deleted successfully

MySQLi-データベースの選択

MySQLiサーバーとの接続を取得したら、使用する特定のデータベースを選択する必要があります。 これは、MySQLi Serverで使用可能なデータベースが複数あるためです。

構文

bool mysqli_select_db( db_name, connection );
Sr.No. Parameter & Description
1

db_name

必須-選択するMySQLiデータベース名

2

connection

オプション-指定しない場合、mysqli_connectによって最後に開かれた接続が使用されます。

データベースを選択する方法を示す例を次に示します。

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root';
         $dbpass = '<Password Here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);

         if(! $conn ) {
            echo 'Connected failure<br>';
         }
         echo 'Connected successfully<br>';
         mysqli_select_db( 'TUTORIALS' );

        //Write some code here
         mysqli_close($conn);
      ?>
   </body>
</html>

接続され、選択されたデータベースが正常に作成された場合、サンプル出力は次のようになります-

Connected successfully

MySQLi-データ型

テーブルのフィールドを適切に定義することは、データベースの全体的な最適化にとって重要です。 本当に使用する必要があるフィールドのタイプとサイズのみを使用する必要があります。 2文字しか使用しないことがわかっている場合は、フィールドを10文字幅として定義しないでください。 これらのタイプのフィールド(または列)は、それらのフィールドに格納する*データのタイプ*の後に、データタイプとも呼ばれます。

MySQLiは、数値、日付、時刻、文字列の3つのカテゴリに分類されたさまざまなデータ型を使用します。

数値データ型

MySQLiはすべての標準ANSI SQL数値データ型を使用するため、別のデータベースシステムからMySQLiにアクセスする場合、これらの定義はおなじみのように見えます。 次のリストは、一般的な数値データ型とその説明を示しています-

  • INT -符号付きまたは符号なしの通常サイズの整数。 署名されている場合、許容範囲は-2147483648〜2147483647です。 符号なしの場合、許容範囲は0〜4294967295です。 最大11桁の幅を指定できます。
  • TINYINT -符号付きまたは符号なしの非常に小さな整数。 署名されている場合、許容範囲は-128〜127です。 符号なしの場合、許容範囲は0〜255です。 最大4桁の幅を指定できます。
  • SMALLINT -符号付きまたは符号なしの小さな整数。 署名されている場合、許容範囲は-32768〜32767です。 符号なしの場合、許容範囲は0〜65535です。 最大5桁の幅を指定できます。
  • MEDIUMINT -符号付きまたは符号なしの中間サイズの整数。 署名されている場合、許容範囲は-8388608〜8388607です。 符号なしの場合、許容範囲は0〜16777215です。 最大9桁の幅を指定できます。
  • BIGINT -符号付きまたは符号なしの大きな整数。 署名されている場合、許容範囲は-9223372036854775808〜9223372036854775807です。 符号なしの場合、許容範囲は0〜18446744073709551615です。 最大20桁の幅を指定できます。
  • * FLOAT(M、D)*-符号なしにできない浮動小数点数。 表示の長さ(M)と小数の数(D)を定義できます。 これは必須ではなく、デフォルトで10,2になります。2は小数の数、10は総桁数(小数を含む)です。 FLOATの場合、10進数の精度は24桁になります。
  • * DOUBLE(M、D)*-符号なしにできない倍精度の浮動小数点数。 表示の長さ(M)と小数の数(D)を定義できます。 これは必須ではなく、デフォルトの16,4になります。4は小数の数です。 10進数の精度は、DOUBLEの場合は53桁になります。 REALはDOUBLEの同義語です。
  • * DECIMAL(M、D)*-符号なしにできないパックされていない浮動小数点数。 パックされていない10進数では、各10進数は1バイトに対応します。 表示の長さ(M)と小数の数(D)を定義する必要があります。 NUMERICはDECIMALの同義語です。

日付と時刻のタイプ

MySQLの日付と時刻のデータ型は-

  • DATE -1000-01-01から9999-12-31までのYYYY-MM-DD形式の日付。 たとえば、1973年12月30日は1973-12-30として保存されます。
  • DATETIME -1000-01-01 00:00:00から9999-12-31 23:59:59までのYYYY-MM-DD HH:MM:SS形式の日付と時刻の組み合わせ。 たとえば、1973年12月30日の午後3時30分は、1973-12-30 15:30:00として保存されます。
  • TIMESTAMP -1970年1月1日午前0時から2037年のいずれかの時点までのタイムスタンプ。 これは、数字の間にハイフンがない場合のみ、以前のDATETIME形式のように見えます。 1973年12月30日の午後3時30分は、19731230153000(YYYYMMDDHHMMSS)として保存されます。
  • TIME -HH:MM:SS形式で時刻を保存します。
  • * YEAR(M)*-2桁または4桁の形式で年を格納します。 長さが2に指定されている場合(YEAR(2)など)、YEARは1970から2069(70から69)になります。 長さを4に指定した場合、YEARは1901〜2155になります。 デフォルトの長さは4です。

文字列型

数値型と日付型は楽しいですが、保存するほとんどのデータは文字列形式になります。 このリストは、MySQLiの一般的な文字列データ型について説明しています。

  • * CHAR(M)*-1〜255文字の固定長文字列(CHAR(5)など)。保存時に指定された長さまで右にスペースが埋め込まれます。 長さを定義する必要はありませんが、デフォルトは1です。
  • * VARCHAR(M)*-長さが1〜255文字の可変長文字列。たとえば、VARCHAR(25)。 VARCHARフィールドを作成するときは、長さを定義する必要があります。
  • BLOBまたはTEXT -最大長が65535文字のフィールド。 BLOBは「バイナリラージオブジェクト」であり、画像やその他の種類のファイルなど、大量のバイナリデータを格納するために使用されます。 TEXTとして定義されたフィールドには、大量のデータも保持されます。 2つの違いは、格納されたデータの並べ替えと比較ではBLOBで大文字と小文字が区別され、TEXTフィールドでは大文字と小文字が区別されないことです。 BLOBまたはTEXTでは長さを指定しません。
  • TINYBLOBまたはTINYTEXT -最大255文字のBLOBまたはTEXT列。 TINYBLOBまたはTINYTEXTでは長さを指定しません。
  • MEDIUMBLOBまたはMEDIUMTEXT -最大長16777215文字のBLOBまたはTEXT列。 MEDIUMBLOBまたはMEDIUMTEXTでは長さを指定しません。
  • LONGBLOBまたはLONG​​TEXT -最大長が4294967295文字のBLOBまたはTEXT列。 LONGBLOBまたはLONG​​TEXTでは長さを指定しません。
  • ENUM -リストの凝った用語である列挙。 ENUMを定義するときは、値を選択する必要がある(またはNULLにすることができる)アイテムのリストを作成しています。 たとえば、フィールドに「A」、「B」、または「C」を含める場合、ENUMをENUM(「A」、「B」、「C」)およびそれらの値(またはNULL)として定義しますそのフィールドにデータを入力できます。

MySQLi-テーブルの作成

テーブル作成コマンドが必要です-

  • テーブルの名前
  • フィールドの名前
  • 各フィールドの定義

構文

MySQLiテーブルを作成する一般的なSQL構文は次のとおりです-

CREATE TABLE table_name (column_name column_type);

ここで、 TUTORIALS データベースに次のテーブルを作成します。

CREATE TABLE tutorials_inf(
   id INT AUTO_INCREMENT,
   name VARCHAR(20) NOT NULL,
   primary key (id),
);

ここで説明が必要な項目はほとんどありません-

  • このフィールドをNULLにしたくないため、フィールド属性 NOT NULL が使用されています。 したがって、ユーザーがNULL値を持つレコードを作成しようとすると、MySQLiはエラーを発生させます。
  • フィールド属性 AUTO_INCREMENT は、MySQLiにidフィールドに次に利用可能な番号を追加するよう指示します。
  • キーワード PRIMARY KEY は、列を主キーとして定義するために使用されます。 複数の列をコンマで区切って使用して、主キーを定義できます。

コマンドプロンプトからのテーブルの作成

これは、mysql>プロンプトからMySQLiテーブルを簡単に作成できます。 SQLコマンド CREATE TABLE を使用して、テーブルを作成します。

以下は、 tutorials_tbl を作成する例です-

root@host# mysql -u root -p
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> CREATE TABLE tutorials_inf(
   id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id));
Query OK, 0 rows affected (0.16 sec)

mysql>

-MySQLiは、SQLコマンドの最後にセミコロン(;)を指定するまでコマンドを終了しません。

PHPスクリプトを使用したテーブルの作成

既存のデータベースに新しいテーブルを作成するには、PHP関数* mysqli_query()*を使用する必要があります。 適切なSQLコマンドで2番目の引数を渡して、テーブルを作成します。

PHPスクリプトを使用してテーブルを作成する例を次に示します-

<html>
   <head>
      <title>Creating MySQLi Tables</title>
   </head>

   <body>
      <?php
         $host = 'localhost:3306';
         $user = 'root';
         $pass = '<Password Here>';
         $dbname = 'TUTORIALS';
         $conn = mysqli_connect($host, $user, $pass,$dbname);

         if(!$conn){
            die('Could not connect: '.mysqli_connect_error());
         }
         echo 'Connected successfully<br/>';

         $sql = "create table tutorials_inf(
            id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id))";

         if(mysqli_query($conn, $sql)){
         echo "Table created successfully";
         } else {
            echo "Table is not created successfully ";
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

サンプル出力は次のようになります-

Connected successfully
Table created successfully

MySQLi-テーブルの削除

既存のMySQLiテーブルを削除するのは非常に簡単ですが、テーブルを削除した後に失われたデータは回復されないため、既存のテーブルを削除するときは十分に注意する必要があります。

構文

MySQLiテーブルを削除する一般的なSQL構文は次のとおりです-

DROP TABLE table_name ;

コマンドプロンプトからのテーブルの削除

これは、mysql>プロンプトで DROP TABLE SQLコマンドを実行するだけです。

以下は、 tutorials_inf を削除する例です-

root@host# mysql -u root -p
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> DROP TABLE tutorials_inf
Query OK, 0 rows affected (0.8 sec)

mysql>

PHPスクリプトを使用したテーブルの削除

データベースの既存のテーブルを削除するには、PHP関数* mysqli_query()*を使用する必要があります。 適切なSQLコマンドで2番目の引数を渡して、テーブルを削除します。

<html>
   <head>
      <title>Dropping MySQLi Tables</title>
   </head>

   <body>
      <?php
         $host = 'localhost:3306';
         $user = 'root';
         $pass = '';
         $dbname = 'TUTORIALS';
         $conn = mysqli_connect($host, $user, $pass,$dbname);

         if(!$conn) {
            die('Could not connect: '.mysqli_connect_error());
         }
         echo 'Connected successfully<br/>';
         $sql = "DROP TABLE tutorials_inf";

         if(mysqli_query($conn, $sql)) {
            echo "Table is deleted successfully";
         } else {
            echo "Table is not deleted successfully\n";
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

サンプル出力は次のようになります-

Connected successfully
Table is deleted successfully

MySQLi-クエリの挿入

MySQLiテーブルにデータを挿入するには、SQL INSERT INTO コマンドを使用する必要があります。 mysql>プロンプトを使用するか、PHPなどのスクリプトを使用して、MySQLiテーブルにデータを挿入できます。

構文

MySQLiテーブルにデータを挿入するINSERT INTOコマンドの一般的なSQL構文は次のとおりです。

INSERT INTO table_name
   ( field1, field2,...fieldN )
   VALUES
   ( value1, value2,...valueN );

文字列データ型を挿入するには、すべての値を二重引用符または一重引用符で囲む必要があります。例:- "value"

コマンドプロンプトからのデータの挿入

これは、SQL INSERT INTOコマンドを使用して、MySQLiテーブルtutorials_infにデータを挿入します。

次の例では、 tutorials_tbl テーブルに3つのレコードを作成します-

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_inf
   ->(id, name)
   ->VALUES
   ->(10, "John Poul");
Query OK, 1 row affected (0.01 sec)

-すべての矢印記号(→)はSQLコマンドの一部ではないことに注意してください。これらは新しい行を示しており、コマンドの各行の最後にセミコロンを付けずにEnterキーを押しながらMySQLプロンプトによって自動的に作成されます。

PHPスクリプトを使用したデータの挿入

同じSQL INSERT INTOコマンドをPHP関数* mysqli_query()*に使用して、MySQLiテーブルにデータを挿入できます。

この例では、ユーザーから3つのパラメーターを取得し、それらをMySQLiテーブルに挿入します-

<html>
   <head>
      <title>Add New Record in MySQLi Database</title>
      <link rel = "stylesheet" type = "text/css" href = "style.css">
   </head>

   <body>
      <div id = "main">
         <form action = "" method = "post">
            <label>Name :</label>
            <input type = "text" name = "name" id = "name"/>
            <br/>
            <br/>
            <input type = "submit" value ="Submit" name = "submit"/>
            <br/>
         </form>
      </div>

      <?php
         if(isset($_POST["submit"])){
            $servername = "localhost:3306";
            $username = "root";
            $password = "<Password here>";
            $dbname = "TUTORIALS";

           //Create connection
            $conn = new mysqli($servername, $username, $password, $dbname);

           //Check connection
            if ($conn->connect_error) {
               die("Connection failed: " . $conn->connect_error);
            }
            $sql = "INSERT INTO tutorials_inf(name)VALUES ('".$_POST["name"]."')";

            if (mysqli_query($conn, $sql)) {
               echo "New record created successfully";
            } else {
               echo "Error: " . $sql . "" . mysqli_error($conn);
            }
            $conn->close();
         }
      ?>
   </body>
</html>

サンプル出力は次のようになります-

New record created successfully

MySQLi-選択クエリ

SQL SELECT コマンドは、MySQLiデータベースからデータを取得するために使用されます。 このコマンドは、mysql>プロンプトだけでなく、PHPなどのスクリプトでも使用できます。

構文

MySQLiテーブルからデータを取得するSELECTコマンドの一般的なSQL構文は次のとおりです-

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • コンマで区切られた1つ以上のテーブルを使用して、WHERE句を使用してさまざまな条件を含めることができますが、WHERE句はSELECTコマンドのオプション部分です。
  • 1つのSELECTコマンドで1つ以上のフィールドをフェッチできます。
  • フィールドの代わりに星印(*)を指定できます。 この場合、SELECTはすべてのフィールドを返します。
  • WHERE句を使用して、任意の条件を指定できます。
  • SELECTがレコードを返し始める OFFSET を使用してオフセットを指定できます。 デフォルトでは、オフセットはゼロです。
  • LIMIT 属性を使用して、返品の数を制限できます。

コマンドプロンプトからのデータの取得-

これは、SQL SELECTコマンドを使用してMySQLiテーブルtutorials_tblからデータをフェッチします。

次の例は、 tutorials_inf テーブルからすべてのレコードを返します-

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | kit  |
|  3 | ram  |
+----+------+
3 rows in set (0.00 sec)

mysql>

PHPスクリプトを使用したデータの取得

PHP関数* mysqli_query()に同じSQL SELECTコマンドを使用できます。 この関数はSQLコマンドの実行に使用され、後で別のPHP関数 mysqli_fetch_assoc()*を使用して、選択したすべてのデータをフェッチできます。 この関数は、連想配列、数値配列、またはその両方として行を返します。 行がもうない場合、この関数はFALSEを返します。

以下は、 tutorials_inf テーブルからレコードを取得する簡単な例です。

次の例を試して、tutorials_infテーブルのすべてのレコードを表示してください。

<html>
   <head>
      <title>Selecting Table in MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root';
         $dbpass = '';
         $dbname = 'TUTORIALS';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

         if(! $conn ) {
            die('Could not connect: ' . mysqli_error());
         }
         echo 'Connected successfully<br>';
         $sql = 'SELECT name FROM tutorials_inf';
         $result = mysqli_query($conn, $sql);

         if (mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_assoc($result)) {
               echo "Name: " . $row["name"]. "<br>";
            }
         } else {
            echo "0 results";
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

行の内容は変数$ rowに割り当てられ、行の値が出力されます。

-配列値を文字列に直接挿入する場合は、必ず中括弧を忘れないでください。

サンプル出力は次のようになります-

Connected successfully
Name: ram
Name: kit
Name: abc

MySQLi-WHERE句

MySQLiテーブルからデータを取得するSQL SELECT コマンドを見てきました。 WHERE 句と呼ばれる条件句を使用して、結果を除外できます。 WHERE句を使用して、選択条件を指定して、テーブルから必要なレコードを選択できます。

構文

MySQLiテーブルからデータを取得するためのWHERE句を含むSELECTコマンドの一般的なSQL構文は次のとおりです-

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • コンマで区切られた1つ以上のテーブルを使用して、WHERE句を使用してさまざまな条件を含めることができますが、WHERE句はSELECTコマンドのオプション部分です。

  • WHERE句を使用して、任意の条件を指定できます。

  • AND または OR 演算子を使用して、複数の条件を指定できます。

  • WHERE句をDELETEまたはUPDATE SQLコマンドとともに使用して、条件を指定することもできます。

    *WHERE* 句は、プログラミング言語のif条件のように機能します。 この句は、指定された値をMySQLiテーブルで使用可能なフィールド値と比較するために使用されます。 外部から与えられた値がMySQLiテーブルで利用可能なフィールド値と等しい場合、その行を返します。

以下は、 WHERE 句で使用できる演算子のリストです。

フィールドAが10を保持し、フィールドBが20を保持すると仮定します-

Operator Description Example
= Checks if the values of two operands are equal or not, if yes then condition becomes true. (A = B) is not true.
!= Checks if the values of two operands are equal or not, if values are not equal then condition becomes true. (A != B) is true.
> Checks if the value of left operand is greater than the value of right operand, if yes then condition becomes true. (A > B) is not true.
< Checks if the value of left operand is less than the value of right operand, if yes then condition becomes true. (A < B) is true.
>= Checks if the value of left operand is greater than or equal to the value of right operand, if yes then condition becomes true. (A >= B) is not true.
Checks if the value of left operand is less than or equal to the value of right operand, if yes then condition becomes true. (A ⇐ B) is true.

WHERE句は、特に MySQLi Join を使用する場合に、テーブルから選択した行をフェッチする場合に非常に便利です。 結合については、別の章で説明します。

*Primary Key* を使用してレコードを検索し、検索を高速化するのが一般的な方法です。

指定された条件がテーブル内のどのレコードとも一致しない場合、クエリは行を返しません。

コマンドプロンプトからのデータの取得

これは、SQL SELECTコマンドとWHERE句を使用して、選択したデータをMySQLiテーブルtutorials_infからフェッチします。

次の例は、名前が sai である tutorials_inf テーブルからすべてのレコードを返します-

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql>SELECT * from tutorials_inf where name = 'sai';
+----+------+
| id | name |
+----+------+
|  1 | SAI  |
+----+------+
1 row in set (0.00 sec)

mysql>

文字列で LIKE 比較を実行しない限り、比較では大文字と小文字が区別されません。 次のように BINARY キーワードを使用して、検索で大文字と小文字を区別できます-

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf \WHERE BINARY name = 'sai';
Empty set (0.02 sec)

mysql>

PHPスクリプトを使用したデータの取得:

PHP関数* mysqli_query()*のWHERE CLAUSEで同じSQL SELECTコマンドを使用できます。

次の例は、名前が sai である tutorials_inf テーブルからすべてのレコードを返します-

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = 'SELECT * from tutorials_inf where name="sai"';
   $result = mysqli_query($conn, $sql);

   if (mysqli_num_rows($result) > 0) {
      while($row = mysqli_fetch_assoc($result)) {
         echo "Name: " . $row["name"]. "<br>";
      }
   } else {
      echo "0 results";
   }
   mysqli_close($conn);
?>

サンプル出力は次のようになります-

Connected successfully
Name: SAI

MySQLi-更新クエリ

MySQLiテーブルの既存のデータを変更する必要がある場合があります。 これを行うには、SQL UPDATE コマンドを使用します。 これにより、MySQLiテーブルのフィールド値が変更されます。

構文

以下は、データをMySQLiテーブルに変更するためのUPDATEコマンドの一般的なSQL構文です-

UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
  • 1つ以上のフィールドをすべて更新できます。
  • WHERE句を使用して、任意の条件を指定できます。
  • 一度に1つのテーブルの値を更新できます。

WHERE句は、テーブル内の選択した行を更新する場合に非常に便利です。

コマンドプロンプトからのデータの更新

これは、WHERE句を含むSQL UPDATEコマンドを使用して、選択したデータをMySQLiテーブルtutorials_infに更新します。

次の例は、tutorial_infを持つレコードの name フィールドを更新します。

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> UPDATE tutorials_inf
   -> SET name = 'johar'
   -> WHERE name = 'sai';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

PHPスクリプトを使用したデータの更新

PHP関数* mysqli_query()*へのWHERE CLAUSEの有無にかかわらず、SQL UPDATEコマンドを使用できます。 この関数は、mysql>プロンプトで実行されるのと同様の方法でSQLコマンドを実行します。

次の例を試して、レコードの name フィールドを更新してください。

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = ' UPDATE tutorials_inf SET name="althamas" WHERE name="ram"';

   if (mysqli_query($conn, $sql)) {
      echo "Record updated successfully";
   } else {
      echo "Error updating record: " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

サンプル出力は次のようになります-

Connected successfully
Record updated successfully

MySQLi-DELETEクエリ

MySQLiテーブルからレコードを削除する場合は、SQLコマンド DELETE FROM を使用できます。 このコマンドは、mysql>プロンプトだけでなく、PHPなどのスクリプトでも使用できます。

構文

MySQLiテーブルからデータを削除するDELETEコマンドの一般的なSQL構文は次のとおりです-

DELETE FROM table_name [WHERE Clause]
  • WHERE句が指定されていない場合、指定されたMySQLiテーブルからすべてのレコードが削除されます。
  • WHERE句を使用して、任意の条件を指定できます。
  • 一度に1つのテーブルのレコードを削除できます。

WHERE句は、テーブル内の選択した行を削除する場合に非常に便利です。

コマンドプロンプトからのデータの削除

これは、SQL DELETEコマンドとWHERE句を使用して、選択したデータをMySQLiテーブルtutorials_infに削除します。

次の例では、joharという名前のtutorial_infにレコードを削除します。

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> DELETE FROM tutorials_inf where name = 'johar';
Query OK, 1 row affected (0.23 sec)

mysql>

PHPスクリプトを使用したデータの削除

PHPの関数* mysqli_query()*にWHERE句を使用して、または使用せずにSQL DELETEコマンドを使用できます。 この関数は、mysql>プロンプトで実行されるのと同様の方法でSQLコマンドを実行します。

次の例を試して、althamasという名前のtutorial_infからレコードを削除してください。

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = ' DELETE FROM tutorials_inf WHERE name = "althamas"';

   if (mysqli_query($conn, $sql)) {
      echo "Record deleted successfully";
   } else {
      echo "Error deleting record: " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

サンプル出力は次のようになります。

Connected successfully
Record deleted successfully

MySQLi-LIKE句

MySQLiテーブルからデータを取得するSQL SELECT コマンドを見てきました。 WHERE 句という条件句を使用して、必要なレコードを選択することもできます。

等号(=)を含むWHERE句は、完全一致を実行する場合に正常に機能します。 「name = 'sai'」の場合のように。 ただし、名前に「johar」を含める必要があるすべての結果を除外する必要がある場合があります。 これは、SQL LIKE 句とWHERE句を使用して処理できます。

SQL LIKE句を%文字とともに使用すると、UNIXではメタ文字(*)のように機能しますが、コマンドプロンプトですべてのファイルまたはディレクトリを一覧表示します。

%文字がない場合、LIKE句は等号とWHERE句に非常に似ています。

構文

MySQLiテーブルからデータを取得するためのLIKE句とともにSELECTコマンドの一般的なSQL構文を示します-

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • WHERE句を使用して、任意の条件を指定できます。
  • WHERE句とともにLIKE句を使用できます。
  • 等号の代わりにLIKE句を使用できます。
  • LIKEを%記号と共に使用すると、メタ文字検索のように機能します。
  • AND または OR 演算子を使用して、複数の条件を指定できます。
  • WHERE …​ LIKE句をDELETEまたはUPDATE SQLコマンドとともに使用して、条件を指定することもできます。

コマンドプロンプトでのLIKE句の使用

これは、SQL SELECTコマンドとWHERE …​ LIKE句を使用して、選択したデータをMySQLiテーブルtutorials_infからフェッチします。

次の例は、作成者名が johar で終わる tutorials_inf テーブルからすべてのレコードを返します-

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf
   -> WHERE name LIKE '%johar';
+----+-------+
| id | name  |
+----+-------+
|  2 | johar |
+----+-------+
1 row in set (0.00 sec)

mysql>

PHPスクリプト内でLIKE句を使用する

PHP関数* mysqli_query()にWHERE …​ LIKE句の同様の構文を使用できます。 この関数はSQLコマンドを実行するために使用され、後でWHERE …​ LIKE句がSELECTコマンドと共に使用される場合、別のPHP関数 mysqli_fetch_array()*を使用して選択されたすべてのデータをフェッチできます。

しかし、WHERE …​ LIKE句がDELETEまたはUPDATEコマンドで使用されている場合、それ以上のPHP関数呼び出しは必要ありません。

次の例を試して、名前に johar が含まれる tutorials_inf テーブルからすべてのレコードを返します-

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = 'SELECT * FROM tutorials_inf WHERE name LIKE "%johar%"';
   $result = mysqli_query($conn, $sql);
   $row = mysqli_fetch_array($result,MYSQLI_ASSOC);

   printf ("%s \n",$row["name"]);
   mysqli_free_result($result);
   mysqli_close($conn);
?>

サンプル出力は次のようになります-

Connected successfully
johar

MySQLi-結果のソート

MySQLiテーブルからデータを取得するSQL SELECT コマンドを見てきました。 行を選択すると、結果の並べ替え方法を指定して指示しない限り、MySQLiサーバーは任意の順序でそれらを自由に返すことができます。 ただし、並べ替える列の名前を指定するORDER BY句を追加して、結果セットを並べ替えます。

構文

MySQLテーブルからデータをソートするためのORDER BY句とともにSELECTコマンドの一般的なSQL構文を示します-

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • filedがリストされている場合、返された結果を任意のフィールドでソートできます。
  • 複数のフィールドで結果をソートできます。
  • キーワードASCまたはDESCを使用して、結果を昇順または降順で取得できます。 デフォルトでは、昇順です。
  • WHERE …​ LIKE句を通常の方法で使用して条件を設定できます。

コマンドプロンプトでORDER BY句を使用する

これは、SQL SELECTコマンドとORDER BY句を使用して、MySQLiテーブルtutorials_infからデータをフェッチします。

結果を降順で返す次の例を試してください。

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf ORDER BY id desc;
+----+-------+
| id | name  |
+----+-------+
|  4 | ram   |
|  3 | raghu |
|  2 | johar |
|  1 | sai   |
+----+-------+
4 rows in set (0.00 sec)

mysql>

すべてのIDが降順でリストされていることを確認します。

PHPスクリプト内でORDER BY句を使用する

ORDER BY句の同様の構文をPHP関数* mysqli_query()に使用できます。 この関数は、SQLコマンドの実行に使用され、後で別のPHP関数 mysqli_fetch_array()*を使用して、選択したすべてのデータをフェッチできます。

チュートリアル作成者の降順で結果を返す次の例を試してください。

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully</br>';
   $sql = 'SELECT * from tutorials_inf ORDER BY id desc';

   if($result = mysqli_query($conn, $sql)){
      if(mysqli_num_rows($result) > 0){
         echo "<table>";
         echo "<tr>";
         echo "<th>id</th>";
         echo "<th>name</th>";
         echo "</tr>";

         while($row = mysqli_fetch_array($result)){
            echo "<tr>";
            echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['name'] . "</td>";
            echo "</tr>";
         }
         echo "</table>";
         mysqli_free_result($result);
      } else {
         echo "No records matching your query were found.";
      }
   } else {
      echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

サンプル出力は次のようになります-

Connected successfully
id  name
4   ram
3   raghu
2   johar
1   sai

MySQLi-結合の使用

これまで、一度に1つのテーブルからのみデータを取得していました。 これは単純なテイクには適していますが、実際のMySQLのほとんどの使用法では、多くの場合、1つのクエリで複数のテーブルからデータを取得する必要があります。

単一のSQLクエリで複数のテーブルを使用できます。 MySQLiに参加するという行為は、2つ以上のテーブルを1つのテーブルに粉砕することを指します。

SELECT、UPDATE、およびDELETEステートメントでJOINSを使用して、MySQLiテーブルを結合できます。 単純なMySQLi JOINとは異なるLEFT JOINの例もあります。

コマンドプロンプトでの結合の使用

チュートリアルに2つのテーブル tutorials_bkstutorials_inf があるとします。 完全なリストを以下に示します-

次の例を試してください-

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT *FROM tcount_bks;
+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
+----+---------+
5 rows in set (0.00 sec)

mysql> SELECT* from tutorials_inf;
+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  2 | johar |
|  3 | raghu |
|  4 | ram   |
+----+-------+
4 rows in set (0.00 sec)

mysql>

これで、これら2つのテーブルを結合するSQLクエリを作成できます。 このクエリは、テーブル tutorials_inf からすべての名前を選択し、* tutorials_bks *から対応する数のチュートリアルを取得します。

mysql> SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id;
+----+-------+----+
| id | name  | id |
+----+-------+----+
|  1 | sai   |  1 |
|  2 | johar |  2 |
|  3 | raghu |  3 |
|  4 | ram   |  4 |
+----+-------+----+
4 rows in set (0.00 sec)
mysql>

tutorials_bksテーブルには5つのレコードがありますが、上記の例ではクエリごとに4つのIDレコードのみをフィルタリングして提供します

PHPスクリプトでの結合の使用

PHPスクリプトでは、上記の任意のSQLクエリを使用できます。 SQLクエリをPHP関数* mysqli_query()*に渡すだけで、通常の方法で結果を取得できます。

次の例を試してください-

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully</br>';
   $sql = 'SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id';

   if($result = mysqli_query($conn, $sql)) {
      if(mysqli_num_rows($result) > 0) {
         echo "<table>";
         echo "<tr>";
         echo "<th>id</th>";
         echo "<th>name</th>";
         echo "<th>id</th>";
         echo "</tr>";

         while($row = mysqli_fetch_array($result)){
            echo "<tr>";
            echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['name'] . "</td>";
                echo "<td>" . $row['id'] . "</td>";
            echo "</tr>";
         }
         echo "</table>";
         mysqli_free_result($result);
      } else {
         echo "No records matching your query were found.";
      }
   } else {
      echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

サンプル出力は次のようになります-

Connected successfully
id  name    id
1   sai 1
2   johar   2
3   raghu   3
4   ram 4

MySQL LEFT JOIN

MySQLiの左結合は、単純な結合とは異なります。 MySQLi LEFT JOINは、左側のテーブルをさらに考慮します。

LEFT JOINを実行すると、同じ方法で一致するすべてのレコードが取得され、IN ADDITIONで結合の左側のテーブルにある一致しない各レコードに対して追加のレコードが取得されるため、(この例では)すべての名前が言及-

LEFT JOINを理解するには、次の例を試してください-

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql>SELECT a.id, a.name,b.id FROM tutorials_inf a LEFT JOIN tutorials_bks b ON a.id = b.id;

JOINSに慣れるには、さらに練習する必要があります。 これはMySQL/SQLの少し複雑な概念であり、実際の例を実行するうちに、より明確になります。

MySQLi-NULL値の処理

MySQLiテーブルからデータを取得するための WHERE 句とともにSQL SELECT コマンドを見てきましたが、フィールドまたは列の値を NULL と比較する条件を指定しようとすると、正しく機能しません。

このような状況を処理するために、MySQLiは3つの演算子を提供します

  • IS NULL -列値がNULLの場合、演算子はtrueを返します。
  • IS NOT NULL -列値がNULLでない場合、演算子はtrueを返します。
  • <⇒ -演算子は値を比較し、(=演算子とは異なり)2つのNULL値に対してもtrueです。

NULLを伴う条件は特別です。 = NULLまたは!= NULLを使用して列のNULL値を検索することはできません。 そのような比較は、それらが真実であるかどうかを見分けることができないため、常に失敗します。 NULL = NULLでも失敗します。

NULLの列またはNULLでない列を検索するには、IS NULLまたはIS NOT NULLを使用します。

コマンドプロンプトでのNULL値の使用

TUTORIALSデータベースのテーブル tutorials_bks に2つの列 idname が含まれていると仮定します。NULL名は値が不明であることを示します-

次の例を試してください-

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
|  6 |         |
|  7 |         |
|  8 |         |
|  9 | NULL    |
| 10 | NULL    |
| 11 | NULL    |
+----+---------+
11 rows in set (0.00 sec)

mysql>

名前列がNULLであるか、またはNULLではないレコードを見つけるには、クエリは次のように記述する必要があります-

mysql> SELECT *FROM tutorials_bks WHERE book = "null";
+----+------+
| id | book |
+----+------+
|  9 | NULL |
| 10 | NULL |
| 11 | NULL |
+----+------+
3 rows in set (0.00 sec)

mysql> SELECT* FROM tutorials_bks WHERE book ! = "null";
+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
|  6 |         |
|  7 |         |
|  8 |         |
+----+---------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM tutorials_bks WHERE book = "";
+----+------+
| id | book |
+----+------+
|  6 |      |
|  7 |      |
|  8 |      |
+----+------+
3 rows in set (0.01 sec)

PHPスクリプトでのNULL値の処理

_if …​ else_条件を使用して、NULL値に基づいてクエリを準備できます。

次の例では、外部からtutorial_countを取得し、表で使用可能な値と比較します。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   if( isset($tutorial_count )) {
      $sql = 'SELECT tutorial_author, tutorial_count FROM  tcount_tbl
         WHERE tutorial_count = $tutorial_count';
   } else {
      $sql = 'SELECT tutorial_author, tutorial_count
         FROM  tcount_tbl WHERE tutorial_count IS $tutorial_count';
   }
   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ".
         "--------------------------------<br>";
   }
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

MySQLi-正規表現

  • LIKE …​%を使用したMySQLiパターンマッチングを確認しました。 MySQLiは、正規表現と *REGEXP 演算子に基づく別のタイプのパターンマッチング操作をサポートしています。 PHPまたはPERLを知っている場合、このマッチングはスクリプトの正規表現に非常に似ているため、理解するのは非常に簡単です。

以下は、 REGEXP 演算子とともに使用できるパターンの表です。

Pattern What the pattern matches
^ Beginning of string
$ End of string
. Any single character
[…​] Any character listed between the square brackets
[^…​] Any character not listed between the square brackets
p1 p2
p3 Alternation; matches any of the patterns p1, p2, or p3
* Zero or more instances of preceding element
+ One or more instances of preceding element
{n} n instances of preceding element
\{m,n} m through n instances of preceding element

上記の表に基づいて、要件を満たすためにさまざまなタイプのSQLクエリを作成できます。 ここでは、あなたの理解のためにいくつかをリストしています。 tutorials_infというテーブルがあり、nameというフィールドがあると考えてください-

「sa」で始まるすべての名前を検索するクエリ

mysql>  SELECT* FROM tutorials_inf WHERE name REGEXP '^sa';

サンプル出力は次のようになります-

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

「ai」で終わるすべての名前を検索するクエリ

mysql> SELECT *FROM tutorials_inf WHERE name REGEXP 'ai$';

サンプル出力は次のようになります-

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

「a」を含むすべての名前を検索するクエリ

mysql> SELECT* FROM tutorials_inf WHERE name REGEXP 'a';

サンプル出力は次のようになります-

+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  3 | ram   |
|  4 | johar |
+----+-------+
3 rows in set (0.00 sec)

母音で始まるすべての名前を検索するクエリ

mysql>  SELECT * FROM tutorials_inf WHERE name REGEXP '^[aeiou]';

MySQLi-トランザクション

トランザクションは、データベース操作操作の連続したグループであり、1つの作業単位であるかのように実行されます。 つまり、グループ内の個々の操作が成功しない限り、トランザクションは決して完了しません。 トランザクション内のいずれかの操作が失敗すると、トランザクション全体が失敗します。

実際には、多くのSQLクエリを1つのグループにまとめ、トランザクションの一部としてそれらすべてをまとめて実行します。

トランザクションのプロパティ

トランザクションには、通常、頭字語ACIDで参照される次の4つの標準プロパティがあります-

  • Atomicity -ワークユニット内のすべての操作が正常に完了することを保証します。そうでない場合、トランザクションは失敗した時点で中止され、以前の操作は以前の状態にロールバックされます。
  • 一貫性-正常にコミットされたトランザクションでデータベースが状態を適切に変更することを保証します。
  • 分離-トランザクションが相互に独立して透過的に動作できるようにします。
  • 耐久性-システム障害が発生した場合に、コミットされたトランザクションの結果または効果が持続することを保証します。

MySQLでは、トランザクションはステートメントBEGIN WORKで始まり、COMMITまたはROLLBACKステートメントで終了します。 開始ステートメントと終了ステートメントの間のSQLiコマンドは、トランザクションの大部分を形成します。

コミットとロールバック

これらの2つのキーワード Commit および Rollback は、主にMySQLトランザクションに使用されます。

  • トランザクションが正常に完了したら、COMMITコマンドを発行して、関連するすべてのテーブルへの変更を有効にします。

  • 障害が発生した場合、ROLLBACKコマンドを発行して、トランザクションで参照されているすべてのテーブルを以前の状態に戻す必要があります。

    *AUTOCOMMIT* というセッション変数を設定することにより、トランザクションの動作を制御できます。 AUTOCOMMITが1(デフォルト)に設定されている場合、各SQLステートメント(トランザクション内または非トランザクション)は完全なトランザクションと見なされ、終了時にデフォルトでコミットされます。 AUTOCOMMITが0に設定されている場合、SET AUTOCOMMIT = 0コマンドを発行すると、後続の一連のステートメントはトランザクションのように動作し、明示的なCOMMITステートメントが発行されるまでアクティビティはコミットされません。
  • mysqli_query()*関数を使用して、これらのSQLコマンドをPHPで実行できます。

トランザクションの一般的な例

この一連のイベントは、使用されるプログラミング言語に依存しません。論理パスは、アプリケーションの作成に使用する言語で作成できます。

  • mysqli_query()*関数を使用して、これらのSQLコマンドをPHPで実行できます。
  • SQLコマンド* BEGIN WORK。*を発行してトランザクションを開始します
  • SELECT、INSERT、UPDATE、DELETEなどの1つ以上のSQLコマンドを発行します。
  • エラーがなく、すべてが要件に従っているかどうかを確認します。
  • エラーがある場合はROLLBACKコマンドを発行し、そうでない場合はCOMMITコマンドを発行します。

MySQLiのトランザクションセーフテーブルタイプ

トランザクションを直接使用することはできませんが、使用できますが、安全で保証されません。 MySQLiプログラミングでトランザクションを使用する場合は、特別な方法でテーブルを作成する必要があります。 トランザクションをサポートするテーブルには多くの種類がありますが、最も一般的なものは InnoDB です。

InnoDBテーブルのサポートには、ソースからMySQLiをコンパイルするときに特定のコンパイルパラメーターが必要です。 MySQLiバージョンにInnoDBのサポートがない場合は、インターネットサービスプロバイダーにInnoDBテーブルタイプをサポートするバージョンのMySQLiを構築するか、WindowsまたはLinux/UNIX用のMySQL-Maxバイナリディストリビューションをダウンロードしてインストールし、開発環境。

MySQLiインストールがInnoDBテーブルをサポートしている場合は、 TYPE = InnoDB 定義をテーブル作成ステートメントに追加するだけです。 たとえば、次のコードは、tutorials_innodbというInnoDBテーブルを作成します-

root@host# mysql -u root -p;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_innodb
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)

次のリンクで詳細を確認してください-https://dev.mysql.com/doc/refman/5.7/en/innodb-parametersl[InnoDB]

*GEMINI* や *BDB* などの他のタイプのテーブルを使用できますが、これら2つのタイプをサポートするかどうかはインストールに依存します。

MySQLi-ALTERコマンド

MySQLi ALTER コマンドは、テーブルの名前やテーブルフィールドを変更する場合、またはテーブルの既存の列を追加または削除する場合に非常に便利です。

*tutorials_alter* と呼ばれるテーブルの作成から始めましょう。
root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_alter
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.27 sec)

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
| c     | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)

列のドロップ、追加、または再配置

MySQLiテーブルの上から既存の列 i を削除する場合、次のように ALTER コマンドとともに DROP 句を使用します-

mysql> ALTER TABLE tutorials_alter  DROP i;

列がテーブルに残っている場合、 DROP は機能しません。

列を追加するには、ADDを使用して列定義を指定します。 次の文は、 i 列をtutorials_alterに復元します-

mysql> ALTER TABLE tutorials_alter ADD i INT;

このステートメントを発行すると、testalterには最初にテーブルを作成したときと同じ2つの列が含まれますが、構造はまったく同じではありません。 これは、デフォルトでテーブルの最後に新しい列が追加されるためです。 したがって、 i は元々mytblの最初の列でしたが、現在は最後の列です。

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

テーブル内の特定の位置に列が必要であることを示すには、FIRSTを使用して最初の列にするか、col_nameの後にAF_col_nameの後に新しい列を配置することを示します。 各ステートメントの後にSHOW COLUMNSを使用して、次のALTER TABLEステートメントを試して、各ステートメントの効果を確認します-

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

FIRSTおよびAFTER指定子は、ADD句でのみ機能します。 つまり、テーブル内の既存の列の位置を変更する場合は、最初に列を削除してから、新しい位置に追加する必要があります。

列の定義または名前の変更

列の定義を変更するには、ALTERコマンドとともに MODIFY または CHANGE 句を使用します。 たとえば、列 c をCHAR(1)からCHAR(10)に変更するには、次のようにします-

mysql> ALTER TABLE tutorials_alter MODIFY c CHAR(10);

CHANGEでは、構文が少し異なります。 CHANGEキーワードの後に​​、変更する列に名前を付けてから、新しい名前を含む新しい定義を指定します。 次の例を試してください。

mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;

列名を変更せずにCHANGEを使用してjをBIGINTからINTに戻す場合、ステートメントは期待どおりになります-

mysql> ALTER TABLE tutorials_alter CHANGE j j INT;

NULLおよびデフォルト値属性に対するALTER TABLEの効果-

列を変更または変更するときに、列にNULL値を含めることができるかどうか、およびそのデフォルト値を指定することもできます。 実際、これを行わない場合、MySQLiはこれらの属性に値を自動的に割り当てます。

次に例を示します。NOTNULL列の値はデフォルトで100です。

mysql> ALTER TABLE tutorials_alter
   -> MODIFY j BIGINT NOT NULL DEFAULT 100;

上記のコマンドを使用しない場合、MySQLiはすべての列のNULL値を埋めます。

列のデフォルト値の変更

ALTERコマンドを使用して、任意の列のデフォルト値を変更できます。 次の例を試してください。

mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | 1000    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

ALTERコマンドとともにDROP句を使用すると、任意の列からデフォルトの制約を削除できます。

mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

テーブルタイプの変更

ALTERコマンドとともに TYPE 句を使用して、テーブルタイプを使用できます。

テーブルの現在のタイプを調べるには、SHOW TABLE STATUSステートメントを使用します。

mysql>  SHOW TABLE STATUS LIKE 'tutorials_alter'\G
************************** *1. row* **************************
           Name: tutorials_alter
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-02-17 11:30:29
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

テーブルの名前を変更する

テーブルの名前を変更するには、ALTER TABLEステートメントの RENAME オプションを使用します。 次の例を試して、tutorials_alterの名前をtutorials_bksに変更してください。

mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;

ALTERコマンドを使用して、MySQLファイルのINDEXを作成および削除できます。 この機能については、次の章で説明します。

MySQLi-インデックス

データベースインデックスは、テーブル内の操作の速度を向上させるデータ構造です。 インデックスは、1つ以上の列を使用して作成でき、迅速なランダム検索とレコードへのアクセスの効率的な順序付けの両方の基礎を提供します。

インデックスを作成する際、SQLクエリを作成し、それらの列に1つ以上のインデックスを作成するために使用される列は何であるかを考慮する必要があります。

実際には、インデックスはテーブルのタイプでもあり、主キーまたはインデックスフィールドと各レコードへのポインタを実際のテーブルに保持します。

ユーザーはインデックスを見ることができず、クエリを高速化するために使用され、データベース検索エンジンによってレコードを非常に高速に検索するために使用されます。

INSERTおよびUPDATEステートメントは、インデックスを持つテーブルではより時間がかかりますが、それらのテーブルではSELECTステートメントが高速になります。 その理由は、挿入または更新を行っている間、データベースもインデックス値を挿入または更新する必要があるためです。

シンプルでユニークなインデックス

テーブルに一意のインデックスを作成できます。 一意のインデックスは、2つの行が同じインデックス値を持つことはできないことを意味します。 以下は、テーブルにインデックスを作成する構文です。

CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);

1つ以上の列を使用して、インデックスを作成できます。 たとえば、NAME_INDEXを使用して、tutorials_infにインデックスを作成できます。

CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf(name);

テーブルに単純なインデックスを作成できます。 単純なインデックスを作成するには、クエリからUNIQUEキーワードを省略します。 単純なインデックスを使用すると、テーブル内の値を複製できます。

列の値に降順でインデックスを付けたい場合は、列名の後に予約語DESCを追加できます。

mysql> CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf (name DESC);

INDEXを追加および削除するALTERコマンド

テーブルにインデックスを追加するためのステートメントの4種類があります-

  • * ALTER TABLE tbl_name ADD PRIMARY KEY(column_list)*-このステートメントはPRIMARY KEYを追加します。これは、インデックス付けされた値が一意であり、NULLであってはならないことを意味します。
  • * ALTER TABLE tbl_name ADD UNIQUE index_name(column_list)*-このステートメントは、値が一意でなければならないインデックスを作成します(複数回表示される可能性があるNULL値を除く)。
  • * ALTER TABLE tbl_name ADD INDEX index_name(column_list)*-これは、任意の値が複数回現れる可能性がある通常のインデックスを追加します。
  • * ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list)*-これは、テキスト検索に使用される特別なFULLTEXTインデックスを作成します。

以下は、既存のテーブルにインデックスを追加する例です。

mysql> ALTER TABLE tutorials_inf ADD INDEX (id);

ALTERコマンドとともにDROP句を使用して、任意のINDEXを削除できます。 上記のインデックスを削除するには、次の例を試してください。

mysql> ALTER TABLE tutorials_inf DROP INDEX (c);

ALTERコマンドとともにDROP句を使用して、任意のINDEXを削除できます。 上記のインデックスを削除するには、次の例を試してください。

プライマリキーを追加および削除するALTERコマンド

同じ方法で主キーも追加できます。 ただし、主キーがNULLでない列で機能することを確認してください。

既存のテーブルに主キーを追加する例を次に示します。 これにより、最初に列がNOT NULLになり、次に主キーとして追加されます。

mysql>  ALTER TABLE tutorials_inf MODIFY id INT NOT NULL;
mysql> ALTER TABLE tutorials_inf ADD PRIMARY KEY (id);

次のように、ALTERコマンドを使用して主キーを削除できます。

mysql> ALTER TABLE tutorials_inf DROP PRIMARY KEY;

PRIMARY KEYではないインデックスを削除するには、インデックス名を指定する必要があります。

INDEX情報の表示

SHOW INDEXコマンドを使用して、テーブルに関連付けられているすべてのインデックスをリストできます。 縦書き形式の出力(\ Gで指定)は、長い行の折り返しを避けるために、このステートメントでしばしば役立ちます-

次の例を試してください

mysql> SHOW INDEX FROM table_name\G
........

MySQLi-一時テーブル

一時テーブルは、一時データを保持するのに非常に役立つ場合があります。 一時テーブルについて知っておくべき最も重要なことは、現在のクライアントセッションが終了すると削除されることです。

前述したように、一時テーブルはセッションが生きている間のみ持続します。 PHPスクリプトでコードを実行する場合、スクリプトの実行が終了すると、一時テーブルは自動的に破棄されます。 MySQLiクライアントプログラムを介してMySQLデータベースサーバーに接続している場合、クライアントを閉じるか手動でテーブルを破棄するまで、一時テーブルが存在します。

一時テーブルの使用法を示す例を次に示します。 * mysqli_query()*関数を使用して、PHPスクリプトで同じコードを使用できます。

mysql> CREATE TEMPORARY TABLE SalesSummary (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
   -> );
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT *FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

SHOW TABLESコマンドを発行すると、一時テーブルはリストに表示されません。 ここで、MySQLiセッションからログアウトし、SELECTコマンドを発行すると、データベースに利用可能なデータが見つかりません。 一時テーブルも存在しません。

一時テーブルの削除

デフォルトでは、データベース接続が終了すると、すべての一時テーブルがMySQLiによって削除されます。 それでもそれらの間に削除したい場合は、DROP TABLEコマンドを発行して削除します。

以下は、一時テーブルを削除する例です-

mysql> DROP TABLE SalesSummary;
mysql>  SELECT* FROM SalesSummary;
ERROR 1146: Table 'TUTORIALS.SalesSummary' doesn't exist

MySQLi-クローンテーブル

テーブルとCREATE TABLEの正確なコピーが必要な場合があります…​ コピーには同じインデックス、デフォルト値などを含める必要があるため、SELECTは目的に合いません。

次の手順でこの状況に対処できます-

  • SHOW CREATE TABLEを使用して、ソーステーブルの構造、インデックス、およびすべてを指定するCREATE TABLEステートメントを取得します。
  • ステートメントを変更して、テーブル名をクローンテーブルの名前に変更し、ステートメントを実行します。 これにより、正確なクローンテーブルが作成されます。
  • オプションで、テーブルの内容もコピーする必要がある場合は、INSERT INTO …​ SELECTステートメントも。

*tutorials_inf* のクローンテーブルを作成するには、次の例を試してください。

ステップ1

テーブルに関する完全な構造を取得します。

mysql> SHOW CREATE TABLE tutorials_inf \G;
************************** *1. row* **************************
       Table: tutorials_inf
Create Table: CREATE TABLE `tutorials_inf` (
   `id` int(11) NOT NULL,
   `name` varchar(20) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `AUTHOR_INDEX` (`name`),
   UNIQUE KEY `NAME_INDEX` (`name`),
   KEY `id` (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
1 row in set (0.05 sec)

ERROR: No query specified

ステップ2

このテーブルの名前を変更し、別のテーブルを作成します。

mysql> CREATE TABLE tutorials_clone(
   -> id int(11) NOT NULL,
   -> name varchar(20) NOT NULL,
   -> PRIMARY KEY (id),
   > UNIQUE KEY AUTHOR_INDEX (name),
   -> UNIQUE KEY NAME_INDEX (name),
   ->  KEY id (id));
Query OK, 0 rows affected (1.80 sec)

ステップ3

手順2を実行した後、データベースにクローンテーブルを作成します。 古いテーブルからデータをコピーしたい場合は、INSERT INTO …​ SELECTステートメント

mysql> INSERT INTO tutorials_clone(id,name) SELECT id,name from tutorials_inf;
Query OK, 4 rows affected (0.19 sec)
Records: 4  Duplicates: 0  Warnings: 0

最後に、必要に応じて正確なクローンテーブルを作成します。

MySQLiメタデータの取得と使用

MySQLiから取得したい3つの情報があります。

  • クエリの結果に関する情報-これには、SELECT、UPDATE、またはDELETEステートメントの影響を受けるレコードの数が含まれます。
  • テーブルとデータベースに関する情報-これには、テーブルとデータベースの構造に関する情報が含まれます。
  • * MySQLiサーバーに関する情報*-これには、データベースサーバーの現在のステータス、バージョン番号などが含まれます。

mysqliプロンプトでこれらの情報をすべて取得するのは非常に簡単ですが、PERLまたはPHP APIを使用しているときに、これらの情報をすべて取得するにはさまざまなAPIを明示的に呼び出す必要があります。 次のセクションでは、この情報を取得する方法を示します。

クエリの影響を受ける行数の取得

PERLの例

DBIスクリプトでは、クエリの実行方法に応じて、影響を受けた行のカウントがdo()またはexecute()によって返されます-

# Method 1
# execute $query using do( )
my $count = $dbh->do ($query);
# report 0 rows if an error occurred
printf "%d rows were affected\n", (defined ($count) ? $count : 0);

# Method 2
# execute query using prepare( ) plus execute( )
my $sth = $dbh->prepare ($query);
my $count = $sth->execute ( );
printf "%d rows were affected\n", (defined ($count) ? $count : 0);

PHPの例

PHPでは、mysqli_affected_rows()関数を呼び出して、クエリが変更された行数を調べます-

$result_id = mysqli_query ($query, $conn_id);
# report 0 rows if the query failed
$count = ($result_id ? mysqli_affected_rows ($conn_id) : 0);
print ("$count rows were affected\n");

テーブルとデータベースのリスト

これは、データベースサーバーで使用可能なすべてのデータベースとテーブルを非常に簡単に一覧表示できます。 十分な特権がない場合、結果はnullになる可能性があります。

以下で説明した方法とは別に、SHOW TABLESまたはSHOW DATABASESクエリを使用して、PHPまたはPERLでテーブルまたはデータベースのリストを取得できます。

PERLの例

# Get all the tables available in current database.
my @tables = $dbh->tables ( );
foreach $table (@tables ){
   print "Table Name $table\n";
}

PHPの例

<?php
   $servername = "localhost:3306";
   $username = "root";
   $password = "";
   $dbname = "TUTORIALS";
   $conn = new mysqli($servername, $username, $password, $dbname);

   if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
   }
   echo"Database connected";
   $sql="SHOW DATABASES";

   if (!($result = mysqli_query($conn,$sql))) {
      printf("Error: %s\n", mysqli_error($conn));
   }
   while( $row = mysqli_fetch_row( $result ) ){
      if (($row[0]!="information_schema") && ($row[0]!="mysql")) {
         echo $row[0]."\r\n";
      }
   }
   $conn->close();
?>

サーバーメタデータの取得

MySQLには次のコマンドがあり、mysqlプロンプトで実行するか、PHPなどのスクリプトを使用してデータベースサーバーに関するさまざまな重要な情報を取得できます。

Sr.No. Command & Description
1

SELECT VERSION( )

サーバーのバージョン文字列

2

SELECT DATABASE( )

現在のデータベース名(ない場合は空)

3

SELECT USER( )

現在のユーザー名

4

SHOW STATUS

サーバーステータスインジケータ

5

SHOW VARIABLES

サーバー構成変数

MySQLi-シーケンスの使用

シーケンスは、整数1、2、3、…​のセットです。 オンデマンドで順番に生成されます。 多くのアプリケーションでは、テーブルの各行に一意の値を含める必要があり、シーケンスを使用すると簡単に生成できるため、シーケンスはデータベースで頻繁に使用されます。 この章では、MySQLiでシーケンスを使用する方法について説明します。

AUTO_INCREMENTカラムを使用する

MySQLiでシーケンスを使用する最も簡単な方法は、列をAUTO_INCREMENTとして定義し、残りをMySQLiに任せることです。

次の例を試してください。 これによりテーブルが作成され、その後、MySQLiによって自動的にインクリメントされるため、レコードIDを与える必要のないこのテーブルにいくつかの行が挿入されます。

mysql>CREATE TABLE tutorials_auto(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)

mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | ram  |
+----+------+
2 rows in set (0.05 sec)

AUTO_INCREMENT値を取得

LAST_INSERT_ID()はSQL関数であるため、SQLステートメントの発行方法を理解している任意のクライアント内から使用できます。 それ以外の場合、PERLおよびPHPスクリプトは、最後のレコードの自動インクリメント値を取得するための排他的な関数を提供します。

PERLの例

mysql_insertid属性を使用して、クエリによって生成されたAUTO_INCREMENT値を取得します。 この属性は、クエリの発行方法に応じて、データベースハンドルまたはステートメントハンドルを介してアクセスされます。 次の例は、データベースハンドルを介してそれを参照します。

$dbh->do ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysqli_insertid};

PHPの例

AUTO_INCREMENT値を生成するクエリを発行した後、mysql_insert_id()を呼び出して値を取得します-

mysql_query ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysqli_insert_id ($conn_id);

既存のシーケンスの番号を付け直す

テーブルから多くのレコードを削除し、すべてのレコードの順序を変更したい場合があります。 これは簡単なトリックを使用して行うことができますが、テーブルが他のテーブルと結合している場合は、慎重に行う必要があります。

AUTO_INCREMENTカラムの順序変更が避けられないと判断した場合、それを行う方法はテーブルからカラムを削除してから再度追加することです。 次の例は、この手法を使用して昆虫テーブルのID値に番号を付け直す方法を示しています-

mysql> ALTER TABLE tutorials_auto DROP id;
mysql> ALTER TABLE tutorials_auto
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

特定の値でシーケンスを開始する

デフォルトでは、MySQLiは1からシーケンスを開始しますが、テーブル作成時に他の番号も指定できます。 以下は、MySQLiがシーケンスを100から開始する例です。

mysql> CREATE TABLE tutorials_auto
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL,
   -> );

または、テーブルを作成してから、ALTER TABLEで初期シーケンス値を設定できます。

mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;

MySQLi-重複の処理

テーブルまたは結果セットに重複レコードが含まれることがあります。 許可される場合もありますが、重複するレコードを停止する必要がある場合もあります。 場合によっては、重複するレコードを識別してテーブルから削除する必要があります。 この章では、テーブルで重複レコードが発生するのを防ぐ方法と、既存の重複レコードを削除する方法について説明します。

テーブル内での重複の防止

適切なフィールドを持つテーブルで PRIMARY KEY または UNIQUE インデックスを使用して、重複レコードを停止できます。 一例を見てみましょう。次の表には、そのようなインデックスや主キーが含まれていないため、first_nameとlast_nameの重複レコードが許可されます。

CREATE TABLE person_tbl (
   first_name CHAR(20),
   last_name CHAR(20),
   sex CHAR(10)
);

同じ姓名の値を持つ複数のレコードがこのテーブルに作成されないようにするには、その定義にPRIMARY KEYを追加します。 あなたがこれを行うとき、プライマリキーはNULL値を許可しないため、NOT NULLであることをインデックス付きカラムとして宣言する必要もあります-

CREATE TABLE person_tbl (
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

テーブルに一意のインデックスが存在すると、通常、インデックスを定義する列の既存のレコードを複製するテーブルにレコードを挿入すると、エラーが発生します。

*INSERT* ではなく *INSERT IGNORE* を使用します。 レコードが既存のレコードと重複しない場合、MySQLiは通常どおりレコードを挿入します。 レコードが重複している場合、IGNOREキーワードは、エラーを生成せずにサイレントに破棄するようMySQLiに指示します。

次の例ではエラーは発生せず、同時に重複レコードは挿入されません。

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

INSERTではなく REPLACE を使用します。 レコードが新しい場合、INSERTと同様に挿入されます。 重複している場合、新しいレコードは古いレコードを置き換えます-

mysql> REPLACE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Ajay', 'Kumar');
Query OK, 1 row affected (0.00 sec)

mysql> REPLACE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Ajay', 'Kumar');
Query OK, 2 rows affected (0.00 sec)

INSERT IGNOREおよびREPLACEは、有効にする複製処理動作に従って選択する必要があります。 INSERT IGNOREは、重複レコードのセットの最初を保持し、残りを破棄します。 REPLACEは、一連の重複の最後を保持し、以前の重複を削除します。

一意性を強制する別の方法は、プライマリキーではなく、一意のインデックスをテーブルに追加することです。

CREATE TABLE person_tbl (
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

重複のカウントと特定

以下は、テーブル内のfirst_nameとlast_nameを持つ重複レコードをカウントするクエリです。

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
   -> FROM person_tbl
   -> GROUP BY last_name, first_name
   -> HAVING repetitions > 1;

このクエリは、person_tblテーブル内のすべての重複レコードのリストを返します。 一般的に、複製された値のセットを識別するには、次を行います-

  • 重複する可能性のある値が含まれている列を判別します。
  • 列選択リストにそれらの列を、COUNT(*)とともにリストします。
  • GROUP BY句の列もリストします。
  • グループカウントを1以上にする必要があるため、一意の値を削除するHAVING句を追加します。

クエリ結果から重複を削除する:

SELECTステートメントとともに DISTINCT を使用して、テーブルで使用可能な一意のレコードを見つけることができます。

mysql> SELECT DISTINCT last_name, first_name
   -> FROM person_tbl
   -> ORDER BY last_name;

DISTINCTの代わりに、選択する列に名前を付けるGROUP BY句を追加します。 これは、重複を削除し、指定された列の値の一意の組み合わせのみを選択する効果があります-

mysql> SELECT last_name, first_name
   -> FROM person_tbl
   -> GROUP BY (last_name, first_name);

テーブル置換を使用した重複の削除

あなたがテーブルに重複したレコードがあり、そのテーブルからすべての重複したレコードを削除したい場合は、ここに手順があります-

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
   -> FROM person_tbl;
   -> GROUP BY (last_name, first_name);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

テーブルから重複レコードを削除する簡単な方法は、そのテーブルにINDEXまたはPRIMAY KEYを追加することです。 このテーブルが既に利用可能な場合でも、この手法を使用して重複するレコードを削除でき、将来的にも安全です。

mysql> ALTER IGNORE TABLE person_tbl
   -> ADD PRIMARY KEY (last_name, first_name);

MySQLi-便利な関数

以下は、すべての重要なMySQLi関数のリストです。 それぞれの機能は適切な例とともに説明されています。

  • link:/mysqli/mysqli_affected_rows [mysqli :: $ affected_rows]-以前のMySQL操作で影響を受けた行の数に関する情報を取得するために使用されていました
  • link:/mysqli/mysqli_autocommit [mysqli :: autocommit]-自動コミットデータベース変更操作をオンまたはオフにするために使用されていました
  • link:/mysqli/mysqli_begin_transaction [mysqli :: begin_transaction]-トランザクションを開始するために使用されていました
  • link:/mysqli/mysqli_change_user [mysqli :: change_user]-指定されたデータベース接続のユーザーを変更するために使用されていました
  • link:/mysqli/mysqli_character_set_name [mysqli :: character_set_name]-データベース接続のデフォルトの文字セットを返します。
  • link:/mysqli/mysqli_client_info [mysqli :: $ client_info]-MySQLクライアント情報を取得するために使用されます。
  • link:/mysqli/mysqli_client_version [mysqli :: $ client_version]-MySQLクライアントのバージョンを文字列として返します。
  • link:/mysqli/mysqli_close [mysqli :: close]-以前に開いたデータベース接続を閉じます。
  • link:/mysqli/mysqli_commit [mysqli :: commit]-現在のトランザクションをコミットします。
  • link:/mysqli/mysqli_connect_errno [mysqli :: $ connect_errno]-最後の接続呼び出しからのエラーコードを返します。
  • link:/mysqli/mysqli_connect_error [mysqli :: connect_error]-最後の接続エラーの説明を文字列で返します。
  • link:/mysqli/mysqli_construct [mysqli :: __ construct]-MySQLサーバーへの新しい接続を開くために使用されていました
  • link:/mysqli/mysqli_debug [mysqli :: debug]-デバッグ操作を実行するために使用されていました
  • link:/mysqli/mysqli_dump_debug_info [mysqli :: dump_debug_info]-デバッグ情報をログにダンプするために使用されます
  • link:/mysqli/mysqli_errno [mysqli :: $ errno]-最新の関数呼び出しのエラーコードを返します
  • link:/mysqli/mysqli_error_list [mysqli :: $ error_list]-最後に実行されたコマンドからのエラーのリストを返します
  • link:/mysqli/mysqli_error [mysqli :: $ error]-最後のエラーの説明を文字列で返します
  • link:/mysqli/mysqli_field_count [mysqli :: $ field_count]-最新のクエリの列数を返します
  • link:/mysqli/mysqli_error_get_charset [mysqli :: get_charset]-文字セットオブジェクトを返します
  • link:/mysqli/mysqli_get_client_info [mysqli :: get_client_info]-MySQLクライアント情報を取得するために使用されます
  • link:/mysqli/mysqli_get_client_stats [mysqli :: mysqli_get_client_stats]-クライアントのプロセスごとの統計を返します
  • link:/mysqli/mysqli_get_client_version [mysqli :: mysqli_get_client_version]-MySQLクライアントのバージョンを整数として返します
  • link:/mysqli/mysqli_get_connection_stats [mysqli :: get_connection_stats]-クライアント接続に関する統計を返します
  • link:/mysqli/mysqli_host_info [mysqli :: $ host_info]-使用される接続のタイプを表す文字列を返します
  • link:/mysqli/mysqli_protocol_version [mysqli :: $ protocol_version]-使用されているMySQLプロトコルのバージョンを返します
  • link:/mysqli/mysqli_server_info [mysqli :: $ server_info]-MySQLサーバーのバージョンを返します
  • link:/mysqli/mysqli_server_version [mysqli :: $ server_version]-MySQLサーバーのバージョンを整数として返します
  • link:/mysqli/mysqli_get_warnings [mysqli :: get_warnings]-SHOW WARNINGSの結果を取得するために使用されます
  • link:/mysqli/mysqli_info [mysqli :: $ info]-最近実行されたクエリに関する情報を取得します
  • link:/mysqli/mysqli_insert_id [mysqli :: $ insert_id]-最新のクエリで使用された自動生成IDを返します
  • link:/mysqli/mysqli_kill [mysqli :: kill]-MySQLスレッドを強制終了するようサーバーに要求します
  • link:/mysqli/mysqli_more_results [mysqli :: more_results]-マルチクエリからのクエリ結果があるかどうかを確認するために使用されていました
  • link:/mysqli/mysqli_multi_query [mysqli :: multi_query]-データベースでクエリを実行します
  • link:/mysqli/mysqli_next_result [mysqli :: next_result]-multi_queryから次の結果を準備します
  • link:/mysqli/mysqli_options [mysqli :: options]-オプションの設定に使用
  • link:/mysqli/mysqli_ping [mysqli :: ping]-サーバーにpingするために使用されます
  • link:/mysqli/mysqli_poll [mysqli :: poll]-接続のポーリングに使用
  • link:/mysqli/mysqli_prepare [mysqli :: prepare]-実行用のSQLステートメントを準備するために使用されていました。
  • link:/mysqli/mysqli_query [mysqli :: query]-データベースでクエリを実行するために使用されます。
  • link:/mysqli/mysqli_real_connect [mysqli :: real_connect]-mysqlサーバーへの接続を開きます。
  • link:/mysqli/mysqli_real_escape_string [mysqli :: real_escape_string]-SQLステートメントで使用するために文字列内の特殊文字をエスケープします
  • link:/mysqli/mysqli_real_query [mysqli :: real_query]-SQLクエリを実行するために使用されます。
  • link:/mysqli/mysqli_real_async_query [mysqli :: real_async_query]-非同期クエリから結果を取得するために使用されます
  • link:/mysqli/mysqli_refresh [mysqli :: refresh]-実行のためにSQLステートメントを更新するために使用されていました。
  • link:/mysqli/mysqli_release_savepoint [mysqli :: release_savepoint]-現在のトランザクションのセーブポイントのセットから指定されたセーブポイントを削除します
  • link:/mysqli/mysqli_rollback [mysqli :: rollback]-現在のトランザクションをロールバックします
  • link:/mysqli/mysqli_rpl_query_type [mysqli :: rpl_query_type]-RPLクエリタイプを返します
  • link:/mysqli/mysqli_select_db [mysqli :: select_db]-データベースクエリのデフォルトデータベースを選択するために使用されます
  • link:/mysqli/mysqli_send_query [mysqli :: send_query]-クエリを送信して返すために使用されます
  • link:/mysqli/mysqli_set_charset [mysqli :: set_charset]-デフォルトのクライアント文字セットを設定します
  • link:/mysqli/mysqli_set_local_infile_default [mysqli :: set_local_infile_default]-これは、load local infileコマンドのユーザー定義ハンドラーの設定を解除するために使用されます
  • link:/mysqli/mysqli_set_local_infile_handler [mysqli :: set_local_infile_handler]-LOAD DATA LOCAL INFILEコマンドのコールバック関数を設定するために使用されます
  • link:/mysqli/mysqli_sqlstate [mysqli :: $ sqlstate]-以前のMySQL操作からのSQLSTATEエラーを返します。
  • link:/mysqli/mysqli_ssl_set [mysqli :: ssl_set]-SSLを使用して安全な接続を確立するために使用されます
  • link:/mysqli/mysqli_stat [mysqli :: stat]-LOAD DATA LOCAL INFILEコマンドのコールバック関数を設定するために使用されます
  • link:/mysqli/mysqli_stmt_init [mysqli :: stmt_init]-ステートメントを初期化し、mysqli_stmt_prepareで使用するオブジェクトを返します。
  • link:/mysqli/mysqli_thread_id [mysqli :: mysqli :: $ thread_id]-現在の接続のスレッドIDを返します
  • link:/mysqli/mysqli_thread_safe [mysqli :: thread_safe]-スレッドセーフが指定されているかどうかを返します。
  • link:/mysqli/mysqli_use_result [mysqli :: use_result]-結果セットの取得を開始するために使用されます
  • link:/mysqli/mysqli_warning_count [mysqli :: $ warning_count]-指定されたリンクの最後のクエリからの警告の数を返します