1時間で学ぶMySQLの基礎

1時間で学ぶMySQLの基礎

MySQL を使い始める

mySQL (リレーショナル データベース管理システム)

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース管理システムであり、現在は Oracle の製品です。 MySQL は、最も人気のあるリレーショナル データベース管理システムの 1 つです。WEB アプリケーションに関しては、MySQL は最高の RDBMS (リレーショナル データベース管理システム) アプリケーション ソフトウェアです。

MySQL は、すべてのデータを 1 つの大きなウェアハウスに格納するのではなく、異なるテーブルにデータを格納するリレーショナル データベース管理システムであり、速度と柔軟性が向上します。

MySQL で使用される SQL 言語は、データベースにアクセスするために最も一般的に使用される標準化された言語です。 MySQL ソフトウェアは二重ライセンス ポリシーを採用しており、コミュニティ エディションと商用エディションに分かれています。サイズが小さく、速度が速く、総所有コストが低いこと、特にオープン ソースであることから、MySQL は中小規模の Web サイトの開発用の Web サイト データベースとして一般的に選択されています。
コミュニティ エディションの優れたパフォーマンスにより、PHP および Apache と組み合わせると優れた開発環境を形成できます。

1. データベースは、データ構造に従ってデータを整理、保存、管理する倉庫です。各データベースには、保存されたデータの作成、アクセス、管理、検索、コピーを行うための 1 つ以上の異なる API があります。

2. リレーショナル データベース管理システム (RDBMS) を使用して、大量のデータを保存および管理します。リレーショナル データベースは、リレーショナル モデルに基づいて構築されたデータベースであり、集合代数などの数学的な概念と方法を使用してデータベース内のデータを処理します。

3. RDBMS の機能:

1. データは表形式で表示されます

2. 各行はレコード名です

3. 各列はレコード名に対応するデータフィールドです

4. フォームは多数の行と列から構成される

5. データベースは複数のフォームから構成される

4. RDBMS 用語

冗長性: 2 倍のデータを格納します。冗長性により、システムを高速化できます。

主キー: 主キーは一意です。データ テーブルには主キーを 1 つだけ含めることができます。主キーを使用してデータを照会できます。

外部キー: 外部キーは 2 つのテーブルを関連付けるために使用されます。

複合キー: 複合キー (複合キー) は、複数の列をインデックス キーとして使用し、通常は複合インデックスに使用されます。

インデックス: インデックスを使用して、データベース テーブル内の特定の情報にすばやくアクセスします。インデックスは、データベース テーブル内の 1 つ以上の列の値を順序付ける構造です。本の目次に似ています。

参照整合性: 参照整合性では、関係において存在しないエンティティへの参照が許可されないことが求められます。エンティティ整合性は、データの一貫性を確保するためにリレーショナル モデルが満たす必要がある整合性制約です。

5. MySQL は、すべてのデータを 1 つの大きなウェアハウスに格納するのではなく、異なるテーブルにデータを格納するリレーショナル データベース管理システムであり、速度と柔軟性が向上します。

MySQL 管理

6. MySQL サーバーを起動および停止します。

(1)MySQLサーバーが起動しているかどうかを確認します。

ps -ef | grepmysqld

(2)MySQLサーバーを起動します。

root@host# cd /usr/bin

./safe_mysqld&

(3)現在実行中のMySQLサーバーをシャットダウンします。

root@host# cd /usr/bin

./mysqladmin -u ルート -p シャットダウン

パスワードを入力してください: ******

7. MySQL ユーザー設定

MySQL データベースのユーザー テーブルに新しいユーザーを追加します。

root@host# mysql -u root –p //データベースを選択 パスワードを入力:*******
mysql> mysql を使用します。
データベースが変更されました

mysql> ユーザーに挿入
(ホスト、ユーザー、パスワード、
select_priv、insert_priv、update_priv) //権限Yを設定する
値 ('localhost'、'guest'、
パスワード('guest123'), 'Y', 'Y','Y');

クエリは正常、1 行が影響を受けました (0.20 秒)

mysql> 権限をフラッシュします。

FLUSH PRIVILEGES ステートメントを実行する必要があることに注意してください。このコマンドは実行後に認証テーブルを再ロードします。

ユーザーを追加するもう一つの方法はSQL GRANTコマンドを使うことです。

mysql> SELECT、INSERT、UPDATE、DELETE、CREATE、DROP の権限を付与
-> チュートリアルについて。*
-> 宛先: 'zara'@'localhost'
-> 'zara123' によって識別されます。

8. MySQLを管理するためのコマンド

USE データベース名: 操作する MySQL データベースを選択します。

mysql> W3CSCHOOL を使用します。

データベースが変更されました

SHOW DATABASES: MySQL データベース管理システムのデータベースを一覧表示します。

mysql> データベースを表示します。

SHOW TABLES: 指定されたデータベース内のすべてのテーブルを表示します。このコマンドを使用する前に、use コマンドを使用して操作するデータベースを選択する必要があります。

mysql> W3CSCHOOL を使用します。

データベースが変更されました

mysql> テーブルを表示;

データ テーブルからの列の表示: データ テーブルのプロパティ、属性タイプ、主キー情報、NULL かどうか、デフォルト値などの情報を表示します。

mysql> W3Cschool_tbl から列を表示します。

+-----------------+--------------+------+-----+---------+-------+

| フィールド | タイプ | Null | キー | デフォルト | 追加 |

+-----------------+--------------+------+-----+---------+-------+

SHOW INDEX FROM データ テーブル: PRIMARY KEY を含むデータ テーブルの詳細なインデックス情報を表示します。

SHOW TABLE STATUS LIKE data table\G: このコマンドは、MySQL データベース管理システムのパフォーマンスと統計情報を出力します。

mysql> SHOW TABLESTATUS FROM W3CSCHOOL; # W3CSCHOOLデータベース内のすべてのテーブルに関する情報を表示します

mysql> SHOW TABLESTATUS from W3CSCHOOL LIKE 'W3Cschool%'; #名前がW3Cschoolで始まるテーブルの情報

mysql> SHOW TABLESTATUS from W3CSCHOOL LIKE 'W3Cschool%'\G; #列ごとにクエリ結果を印刷するには\Gを追加します

9. PHP MySQL 関数の形式: mysql_function(value,value,...);

MySQL 接続

10. MySQLバイナリモードを使用して接続する

[ルート@ホスト]# mysql -uroot -p
パスワードを入力してください:******
ログインに成功すると、mysql> コマンド プロンプト ウィンドウが表示され、任意の SQL ステートメントを実行できます。
mysql>コマンドプロンプトウィンドウを終了するには、exitコマンドを使用します: mysql> exit

11. PHP スクリプトを使用して MySQL に接続する

PHP は、データベースに接続するための mysql_connect() 関数を提供します。
connectionmysql_connect(server,user,passwd,new_link,client_flag);5すべてのパラメータはオプションです。MySQL データベースから切断するには、PHP の mysql_close() 関数を使用します。
bool mysql_close (リソース $link_identifier );
通常、スクリプトの実行が終了すると、開いている非永続的な接続が自動的に閉じられるため、mysql_close() は使用しないでください。
mysql_close() は、mysql_pconnect() によって確立された永続的な接続を閉じません。

mysql_connect は、次のコードで実行されます。
if(!$conn)
{
die('接続できませんでした: ' .mysql_error());
}
echo '接続に成功しました';
mysql_close($conn);

MySQL データベースの作成/削除

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

root ユーザーとしてログインします。root ユーザーは最高の権限を持ち、mysql mysqladmin コマンドを使用してデータベースを作成できます。
[root@host]#mysqladmin -u root -pcreate/drop W3CSCHOOL
パスワードを入力してください:*****

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

PHP は、mysql_query 関数を使用して MySQL データベースを作成または削除します。

bool mysql_query(sql、接続);
 
mysql_connect は、次のコードで実行されます。
if(!$conn)
{
 die('接続エラー: ' . mysql_error());
}
echo '接続に成功しました<br />';
$sql = 'W3CSCHOOL データベースの作成/削除';
$retval = mysql_query( $sql, $conn );
if(!$retval) の場合
{
 die('データベースの作成に失敗しました: ' . mysql_error());
}
echo "データベース W3CSCHOOL が正常に作成されました\n";
mysql_close($conn);

MySQL データベースの選択

14. PHPスクリプトを使用してMySQLデータベースを選択する

PHP には、データベースを選択するための関数 mysql_select_db が用意されています。

bool mysql_select_db( db_name, 接続 );
mysql_connect は、次のコードで実行されます。
if(!$conn)
{
 die('接続に失敗しました: ' . mysql_error());
}

echo '接続に成功しました';
mysql_select_db('W3CSCHOOL');
mysql_close($conn);

MySQL テーブルの作成/削除

15. MySQL テーブルの作成

MySQL テーブルを作成するには、次の情報が必要です。

テーブル名

テーブルフィールド名

各テーブルフィールドを定義する

作成構文: CREATE TABLE table_name (column_name column_type);

削除構文: DROP TABLE table_name ;

次の例では、W3CSCHOOL データベースにデータ テーブル w3cschool_tbl を作成します。

チュートリアル_tbl(
 チュートリアルID INT NOT NULL AUTO_INCREMENT,
 チュートリアルタイトル VARCHAR(100) NOT NULL,
 チュートリアル著者 VARCHAR(40) NOT NULL,
 submission_date 日付、
 主キー ( w3cschool_id )
);

16.コマンドプロンプトからテーブルを作成する

データ テーブルを作成するには、SQL ステートメント CREATE TABLE を使用します。

mysql> テーブル w3cschool_tbl( を作成します
 -> w3cschool_id INT NOTNULL AUTO_INCREMENT、
 -> w3cschool_title VARCHAR(100) NOT NULL、
 -> w3cschool_author VARCHAR(40) NOT NULL、
 -> submission_date 日付、
 -> 主キー (w3cschool_id)
 -> );

MySQL コマンドの終了文字はセミコロン (;) です。

17. PHPスクリプトを使用してテーブルを作成/削除したり、データを挿入する

構文: bool mysql_query( sql, connection);

$sql = "CREATE TABLEtutorials_tbl( "Create"tutorial_id INT NOTNULL AUTO_INCREMENT, ".
  「tutorial_title VARCHAR(100) NOT NULL,」。
  「tutorial_author VARCHAR(40) NOT NULL,」。
  「submission_dateDATE、」。
  "主キー (tutorial_id));"
;
$sql = "DROP TABLEw3cschool_tbl"; deletemysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn); // 成功したかどうかを判断するために設定されたパラメータ。
if(!$retval) の場合
{
 die('データテーブルの作成に失敗しました: ' . mysql_error());
}
echo "データテーブルが正常に作成されました\n";
mysql_close($conn);

MySQLデータ挿入

18. MySQL テーブルにデータを挿入するための一般的な INSERT INTO SQL 構文は次のとおりです。

テーブル名にINSERT INTO (フィールド1、フィールド2、...フィールドN)
価値観
( 値1、値2、...値N );

データが文字型の場合、"value" のように一重引用符または二重引用符を使用する必要があります。

w3cschool_tbl テーブルにデータを挿入します。

mysql> INTOw3cschool_tbl を挿入する
->(w3cschool_title、w3cschool_author、提出日)
->値
->("PHP を学ぶ", "JohnPoul", 今すぐ());

(->) は SQL ステートメントの一部ではありません。これは新しい行のみを表します。SQL ステートメントが長すぎる場合は、Enter キーを使用して新しい行を作成し、SQL ステートメントを記述できます。SQL ステートメントのコマンド ターミネータはセミコロン (;) です。

19. PHPスクリプトを使用してデータを挿入する

$sql = "w3cschool_tblに挿入"。
「(w3cschool_title、w3cschool_author、submission_date)」。
「価値観」
"('$w3cschool_title','$w3cschool_author','$submission_date')";

MySQLクエリデータ

20. MySQL データベース内のデータをクエリするための一般的な SELECT 構文は次のとおりです。

SELECT 列名,列名
テーブル名から
[WHERE句]
[オフセットM][制限N]

SELECT コマンドを使用して 1 つ以上のレコードを読み取ることができます。

OFFSET を使用すると、SELECT ステートメントがクエリを開始するデータ オフセットを指定できます。デフォルトでは、オフセットは 0 です。

LIMIT 属性を使用して、返されるレコードの数を設定できます。

アスタリスク (*) を使用して他のフィールドを置き換えることができ、SELECT ステートメントはテーブル内のすべてのフィールド データを返します。

mysql> w3cschool_tblから*を選択します


21。 PHPスクリプトを使用してデータを取得する

データを取得するには、PHP 関数 mysql_query() と SQL SELECT コマンドを使用します。
この関数は、SQL コマンドを実行し、照会されたすべてのデータを PHP 関数 mysql_fetch_array() を通じて使用または出力するために使用されます。

データテーブルw3cschool_tbl内のすべてのレコードを表示するには、次の例を試してください。

$sql = 'w3cschool_id、w3cschool_title、を選択します。
w3cschool_author、提出日
w3cschool_tbl から';
mysql_select_db('W3CSCHOOL');
$retval = mysql_query( $sql, $conn );
if(!$retval) の場合
{
die('データを取得できませんでした: ' .mysql_error());
}
while($row =mysql_fetch_array($retval, MYSQL_ASSOC))
while($row =mysql_fetch_assoc($retval))

MYSQL_NUMパラメータを使用してテーブルを表示する

while($row =mysql_fetch_array($retval, MYSQL_NUM))

MYSQL_NUMパラメータを使用してテーブルを表示する

{
echo "チュートリアルID:{$row['w3cschool_id']} <br>"。
"タイトル:{$row['w3cschool_title']} <br> "。
「著者:{$row['w3cschool_author']} <br>」。
「提出日: {$row['submission_date']}」。
"--------------------------------<br>";
}
mysql_free_result($retval); カーソルメモリを解放する
echo "データが正常に取得されました\n";
mysql_close($conn);


MYSQL_ASSOC の場合、このパラメータを設定すると、クエリ結果として連想配列が返されます。フィールド名を配列のインデックスとして使用できます。

MySQL データの選択

22。 SQL SELECT ステートメントを使用して、MySQL テーブルからデータを読み取ります。

テーブルから条件付きでデータを選択する必要がある場合は、SELECT ステートメントに WHERE 句を追加できます。以下は、WHERE 句を使用してテーブルからデータを読み取る SQL SELECT ステートメントの一般的な構文です。

テーブル名1、テーブル名2からフィールド1、フィールド2、...フィールドNを選択します...
[WHERE 条件1 [AND[OR]] 条件2.....

WHERE 句は、SQL DELETE または UPDATE コマンドでも使用できます。
文字列を比較するには LIKE を使用します。そうしないと、MySQL の WHERE 句での文字列比較では大文字と小文字が区別されません。 BINARY キーワードを使用すると、WHERE 句で大文字と小文字を区別して文字列を比較できます。

23。 PHP スクリプトを使用してデータを読み取る

データを取得するには、PHP 関数 mysql_query() と、WHERE 句を指定した同じ SQL SELECT コマンドを使用します。この関数は、SQL コマンドを実行し、クエリされたすべてのデータを mysql_fetch_array() を通じて出力するために使用されます。

$sql = 'w3cschool_id、w3cschool_title、を選択します。
w3cschool_author、提出日
w3cschool_tblより
ここで、w3cschool_author="Sanjay"';

MySQL アップデート

24。 MySQL でデータを変更または更新するには、SQL UPDATE コマンドを使用できます。

一般的な SQL 構文:

UPDATE テーブル名 SET フィールド1=新しい値1、フィールド2=新しい値2

[WHERE句]

データ テーブルの w3cschool_id 3 の w3cschool_title フィールド値を更新します。

mysql>w3cschool_tbl を更新
-> SET w3cschool_title='JAVA の学習'
-> ここで w3cschool_id=3;

PHPスクリプトを使用してデータを更新する

$sql = 'w3cschool_tblを更新
SETw3cschool_title="JAVA を学ぶ"
ここで、w3cschool_id=3';

MySQL 削除

25. DELETE FROM table_name[WHERE句

WHERE 句が指定されていない場合は、MySQL テーブル内のすべてのレコードが削除されます。

WHERE句では任意の条件を指定できます

w3cschool_tblテーブル内のw3cschool_id 3のレコードを削除します。

mysql> w3cschool_tbl から w3cschool_id=3 を削除します。

PHPスクリプトを使用してデータを削除する

$sql = 'w3cschool_tblから削除
ここで、w3cschool_id=3';

MySQL LIKE句

パーセント記号 (%) 文字は、QL LIKE 句で任意の文字を表すために使用されます。

パーセント記号 (%) がない場合、LIKE 句は等号 (=) と同じ効果を持ちます。
26. LIKE 句を使用してテーブルからデータを読み取る QL SELECT ステートメントの一般的な構文は次のとおりです。
SELECT フィールド1、フィールド2、...フィールドN テーブル名1、テーブル名2...
WHERE フィールド1 LIKE条件1 [AND [OR]] フィールド2 = 'somevalue'
LIKEは通常、メタ文字検索と同様に%と一緒に使用されます。


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

$sql = 'w3cschool_id、w3cschool_title、を選択
w3cschool_author、提出日
w3cschool_tblより
ここで、w3cschool_author は "%jay%" のように表示されます。

MySQL ソート

SELECT フィールド1、フィールド2、...フィールドN テーブル名1、テーブル名2...

ORDER BY フィールド1、[フィールド2...] [ASC [DESC]]

ASC または DESC キーワードは、クエリ結果を昇順または降順に設定するために使用されます。デフォルトでは昇順でソートされます。

MySQL グループ化

SELECT 列名、関数(列名)
テーブル名から
WHERE 列名演算子値
GROUP BY 列名;

WITH ROLLUP は、グループ化された統計データに基づいて同じ統計 (SUM、AVG、COUNT など) を実行できます。

coalesce は、NUll を置き換えることができる名前を設定します。coalesce 構文:

coalesce(a,b,c) を選択します。

パラメータの説明: a==null の場合は b を選択します。b==null の場合は c を選択します。a!=null の場合は a を選択します。abc が両方とも null の場合は null (意味なし) を返します。

mysql> SELECT coalesce(name, 'total'), SUM(singin) as singin_countFROM employee_tbl GROUP BY name WITHROLLUP;

+--------------------------+--------------+

| 合体(名前、'total') | singin_count |

+--------------------------+--------------+

| シャオリー | 2 |

| シャオミン | 7 |

| シャオ・ワン | 7 |

| 合計 | 16 |

+--------------------------+--------------+

MySQL マルチテーブルクエリ

27. MySQL の JOIN を使用して、SELECT、UPDATE、および DELETE ステートメントで複数のテーブルを結合します。

JOIN は、その機能に応じて、大きく次の 3 つのカテゴリに分類できます。

INNER JOIN (内部結合、または等価結合): 2 つのテーブル内の一致するフィールドを持つレコードを取得します。
LEFT JOIN: 右側のテーブルに対応する一致するレコードがない場合でも、左側のテーブルのすべてのレコードを取得します。
RIGHT JOIN: LEFT JOIN の反対で、左側のテーブルに対応する一致するレコードがない場合でも、右側のテーブルのすべてのレコードを取得するために使用されます。

| w3cschool_author | w3cschool_count |

+-----------------+----------------+

| マフラーン | 20 |

| マハナズ | NULL |

| ジェン | NULL |

| ギル | 20 |

| ジョン・ポール | 1 |

| サンジェイ | 1 |

+-----------------+----------------+

mysql> w3cschool_tbl から * を選択;

+-------------+----------------+-----------------+-----------------+

| w3cschool_id | w3cschool_title | w3cschool_author | 提出日 |

+-------------+----------------+-----------------+-----------------+

| 1 | PHP を学ぶ | John Poul |2007-05-24 |
| 2 | LearnMySQL | Abdul S | 2007-05-24 |
| 3 | JAVATutorial | Sanjay | 2007-05-06 |

上記の 2 つのテーブルを接続して、tcount_tbl テーブル内の w3cschool_tbl テーブル内のすべての w3cschool_author フィールドに対応する w3cschool_count フィールド値を読み取ります。

mysql> w3cschool_tbl から a.w3cschool_id、a.w3cschool_author、b.w3cschool_count を選択し、a を INNER JOIN して tcount_tbl b を a.w3cschool_author = b.w3cschool_author に結合します。

+-----------+---------------+---------------+

| w3cschool_id | w3cschool_author | w3cschool_count |

+-----------+---------------+---------------+

| 1 | ジョン・ポール | 1 |

| 3 | サンジェイ | 1 |

w3cschool_tblは左のテーブル、tcount_tblは右のテーブルです。

mysql> a.w3cschool_id、a.w3cschool_author、b.w3cschool_count を w3cschool_tbl から選択し、 tcount_tbl b を a.w3cschool_author = b.w3cschool_author で LEFTJOIN します。

+-------------+-----------------+----------------+

| w3cschool_id | w3cschool_author | w3cschool_count |

+-------------+-----------------+----------------+

| 1 | ジョン・ポール | 1 |

| 2 | アブドゥル S | NULL |

| 3 | サンジェイ | 1 |

右側のテーブル tcount_tbl に対応する w3cschool_author フィールド値 Abdul S がない場合でも、左側のデータ テーブル w3cschool_tbl から選択されたすべてのフィールド データ。

MySQL NULL

IS NULL: この演算子は、列の値が NULL の場合に true を返します。
IS NOT NULL: 列の値が NULL でない場合に演算子は true を返します。

NULL 値を他の値 (NULL であっても) と比較すると、常に false が返されます。

PHP スクリプトを使用して NULL 値を処理する:

PHP スクリプトでは、if...else ステートメントを使用して変数が空かどうかを確認し、対応する条件ステートメントを生成できます。

MySQL 正規表現

28. REGEXP 演算子は、MySQL で正規表現のマッチングを実行するために使用されます。

^ 入力文字列の先頭と一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、^ は '\n' または '\r' の後の位置にも一致します。
$ は入力文字列の末尾に一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は '\n' または '\r' の前の位置にも一致します。
. は「\n」を除く任意の 1 文字に一致します。 '\n' を含む任意の文字を一致させるには、'[.\n]' のようなパターンを使用します。

理解を深めるための例(テーブル名:person_tbl):

名前フィールドで「st」で始まるすべてのデータを検索します。

mysql> name を SELECT FROM person_tbl WHERE name REGEXP '^st';

名前フィールドが「ok」で終わるすべてのデータを検索します。

mysql> name を SELECT FROM person_tbl WHERE name REGEXP 'ok$';

名前フィールドに文字列「mar」を含むすべてのデータを検索します。

mysql> name FROM person_tbl WHERE name REGEXP 'mar' を SELECT します。

名前フィールド内で、母音文字で始まるか、文字列「ok」で終わるすべてのデータを検索します。

mysql> SELECT name FROM person_tbl WHERE name REGEXP'^[aeiou]|ok$';

MySQL トランザクション

29. MySQL トランザクションは主に、操作量が多く複雑度の高いデータを処理するために使用されます。

MySQL では、Innodb データベース エンジンを使用するデータベースまたはテーブルのみがトランザクションをサポートします。

トランザクション処理を使用すると、データベースの整合性を維持し、SQL ステートメントのバッチがすべて実行されるか、まったく実行されないかのいずれかを確実にすることができます。

トランザクションは、挿入、更新、および削除ステートメントを管理するために使用されます。

トランザクションは、原子性、一貫性、独立性、永続性の 4 つの条件 (ACID) を満たす必要があります。

1. トランザクションの原子性: トランザクションのセットは成功するか、取り消されます。

2. 安定性: 不正なデータ(外部キー制約など)がある場合、トランザクションは取り消されます。

3. 分離: トランザクションは独立して実行されます。トランザクションの結果が他のトランザクションに影響を与える場合、他のトランザクションは取り消されます。トランザクションを 100% 分離するには、速度を犠牲にする必要があります。

4. 信頼性: ソフトウェアまたはハードウェアがクラッシュすると、InnoDB データ テーブル ドライバーはログ ファイルを使用してファイルを再構築および変更します。信頼性と高速性を同時に実現することはできません。innodb_flush_log_at_trx_commit オプションは、トランザクションがログに保存されるタイミングを決定します。

MySQL コンソールでトランザクションを使用して、次の操作を実行します。

1. 取引を開始する

取引を開始する

2. セーブポイントを作る

セーブポイント セーブポイント名

3. 操作

4. ロールバックまたはコミットできます。問題がなければコミットします。問題がある場合はロールバックします。

PHP でのトランザクション例の使用

mysql_query("SETAUTOCOMMIT=0"); // MYSQL はデフォルトですぐに実行されるため、自動的にコミットしないように設定します。mysql_query("BEGIN"); // トランザクション定義を開始します。

if(!mysql_query("trans (id) 値に挿入('2')"))
{
mysql_query("ROOLBACK"); //実行が失敗したかどうかを判断し、ロールバックします}
mysql_query("COMMIT");//トランザクションを実行 mysql_close($handler);
MySQLの変更

30.データ テーブルの名前を変更したり、データ テーブル フィールドを変更したりする場合は、MySQL ALTER コマンドを使用する必要があります。

ALTER コマンドと DROP 句は、上記で作成したテーブルの i 列を削除するために使用されます。

mysql> ALTER TABLE テスト alter_tbl DROP i;

データ テーブルに残っているフィールドが 1 つだけの場合、DROP を使用してフィールドを削除することはできません。

ADD 句を使用してデータ テーブルに列を追加し、testalter_tbl テーブルに i フィールドを追加して、データ型を定義します。

mysql> ALTER TABLE testalter_tbl に i INT を追加します。

次の ALTERTABLE ステートメントが正常に実行されたら、SHOW COLUMNS を使用してテーブル構造の変更を表示します。

テーブル testalter_tbl を変更して i を削除します。
ALTER TABLE testalter_tbl に i INT を追加します。
テーブル testalter_tbl を変更して i を削除します。
ALTER TABLE testalter_tbl に i INT AFTER c を追加します。

FIRST および AFTER キーワードは ADD 句でのみ使用されるため、テーブル フィールドの位置をリセットする場合は、最初に DROP を使用してフィールドを削除し、次に ADD を使用してフィールドを追加して位置を設定する必要があります。

フィールドのタイプと名前を変更します。

31. ALTER コマンドで MODIFY 句または CHANGE 句を使用します。

フィールドcの型をCHAR(1)からCHAR(10)に変更するには、次のコマンドを実行します。
mysql> ALTER TABLE test alter_tbl MODIFY c CHAR(10);
CHANGE 句を使用すると、構文は大きく異なります。 CHANGE キーワードの後に​​、変更するフィールドの名前を続け、新しいフィールドのタイプと名前を指定します。次の例を試してください。
mysql> ALTER TABLE testalter_tbl を変更 ij BIGINT;
<pフィールド j を BIGINT から INT に変更する場合、SQL ステートメントは次のようになります。
mysql> ALTER TABLE testalter_tbl CHANGE jj INT;

ALTER はフィールドのデフォルト値を変更します。mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
ALTER および DROP は列のデフォルト値を削除します。ALTER TABLEtestalter_tbl ALTER i DROP DEFAULT;
ALTER と TYPE はデータ テーブル タイプを変更します。mysql> ALTER TABLEtestalter_tbl TYPE = MYISAM;
ALTER TABLE は RENAME を使用してデータ テーブルの名前を変更します。mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

MySQL インデックス

インデックスを使用すると、MySQL の取得速度を大幅に向上できます。インデックスは、単一列インデックスと結合インデックスに分けられます。単一列インデックスは、1 つの列のみを含むインデックスです。テーブルには複数の単一列インデックスを設定できますが、これらは複合インデックスではありません。複合インデックス。つまり、インデックスには複数の列が含まれます。
インデックスを作成し、そのインデックスが SQL クエリ ステートメント (通常は WHERE 句の条件として) に適用されていることを確認します。
インデックスは、主キーとインデックス フィールドを格納し、エンティティ テーブルのレコードを指すテーブルでもあります。
デメリット: インデックスによりクエリ速度は大幅に向上しますが、INSERT、UPDATE、DELETE などのテーブル更新の速度も低下します。テーブルを更新する場合、MySQL はデータだけでなくインデックス ファイルも保存する必要があるためです。
共通インデックスを作成する3つの方法

CREATE INDEX indexName ONmytable(username(length));

CHAR または VARCHAR 型の場合、長さはフィールドの実際の長さより短くてもかまいません。BLOB または TEXT 型の場合は、長さを指定する必要があります。

テーブル構造を変更する

ALTER mytable ADD INDEX[indexName] ON (username(length))

テーブル作成時に直接指定する

テーブルmytableを作成します( 
ID INT NULLではありません、 
ユーザー名 VARCHAR(16) NOTNULL, 
INDEX [インデックス名](ユーザー名(長さ)) 
);

インデックスを削除する構文

DROP INDEX [インデックス名] ONmytable;

ユニークインデックス: 先頭にUNIQUEを追加

ALTER コマンドを使用したインデックスの追加と削除

テーブルにインデックスを追加する方法は 4 つあります。

ALTER TABLE tbl_name ADD PRIMARYKEY (column_list): このステートメントは主キーを追加します。つまり、インデックス値は一意である必要があり、NULL にすることはできません。
ALTER TABLE tbl_name ADD UNIQUEindex_name (column_list): このステートメントは、値が一意である必要があるインデックスを作成します (NULL は複数回出現する可能性があります)。
ALTER TABLE tbl_name ADD INDEXindex_name (column_list): 通常のインデックスを追加します。インデックス値は複数回出現できます。
ALTER TABLE tbl_name ADD FULLTEXTindex_name (column_list): このステートメントは、フルテキスト インデックスのインデックスを FULLTEXT として指定します。

ALTERコマンドを使用して主キーを追加および削除する

主キーは 1 つの列にのみ適用できます。主キー インデックスを追加するときは、主キーがデフォルトで空でない (NOT NULL) ことを確認する必要があります。以下に例を示します。

mysql> ALTER TABLE テスト alter_tbl MODIFY i INT NOT NULL;

mysql> ALTER TABLE テスト alter_tbl 主キーを追加します (i);

ALTER コマンドを使用して主キーを削除することもできます。

mysql> ALTER TABLE testalter_tbl で PRIMARY KEY を削除します。

SHOW INDEX コマンドは、テーブル内の関連するインデックス情報を一覧表示します。 \G を追加することで出力をフォーマットできます。

mysql> SHOW INDEX FROM table_name\G

MySQL 一時テーブル

一時テーブルは現在の接続でのみ表示されます。接続を閉じると、MySQL は自動的にテーブルを削除し、すべてのスペースを解放します。

mysql> 一時テーブル SalesSummary を作成します

mysql> SalesSummary テーブルを削除します。

MySQL テーブルのコピー

新しいクローン テーブル clone_tbl を作成します。テーブル内のデータをコピーする場合は、INSERT INTO... SELECT ステートメントを使用できます。

mysql> INSERT INTOclone_tbl (w3cschool_id,
-> w3cschool_title、
-> w3cschool_author、
-> 提出日)
-> w3cschool_id、w3cschool_title を選択、
-> w3cschool_author、提出日
-> w3cschool_tbl から;

MySQL メタデータ

以下の3種類のMySQL情報を知りたいです。

クエリ結果情報: SELECT、UPDATE、または DELETE ステートメントによって影響を受けるレコードの数。
データベースおよびデータ テーブル情報: データベースおよびデータ テーブルの構造情報が含まれます。
MySQL サーバー情報: データベース サーバーの現在のステータス、バージョン番号などが含まれます。

(1)do()を使って$queryを実行する

私の $count = $dbh->do($query);

(2)prepare()とexecute()を使って$queryを実行する

私の $sth =$dbh->prepare ($query);

私の$count =$sth->execute();

PHP では、mysql_affected_rows() 関数を使用して、クエリ ステートメントによって影響を受けるレコードの数を取得します。

$result_id = mysql_query ($query、$conn_id);
# クエリが失敗した場合は、$count = ($result_id ?mysql_affected_rows ($conn_id) : 0); を返します。
print ("$count行が影響を受けました\n");

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

PERLの例

# 現在のデータベースで使用可能なすべてのテーブルを取得します。

私の @tables =$dbh->tables() ;
foreach $テーブル (@tables) {
 print "テーブル名 $table\n";
}

PHP の例:

$db_list = mysql_list_dbs($con);
($db = mysql_fetch_object($db_list)) の間
{
 echo $db->Database . "<br/>";
}

MySQL シーケンス

MySQLシーケンスは1、2、3、...などの整数のセットです。

列を定義するには、MySQL AUTO_INCREMENT を使用します。

mysql> テーブル挿入の作成

-> (

-> id INT UNSIGNED NOT NULL AUTO_INCREMENT、

最後に挿入されたテーブルの自動インクリメント列の値を取得するには、SQL の LAST_INSERT_ID() 関数を使用します。

PERLの例

AUTO_INCREMENT の値を取得するには、mysql_insertid 属性を使用します。以下に例を示します。

$dbh->do("INSERT INTO 昆虫 (名前、日付、起源)

VALUES('moth','2001-09-14','windowsill')");

私の$seq = $dbh->{mysql_insertid};

PHPの例

PHP は、mysql_insert_id() 関数を使用して、実行された挿入 SQL ステートメント内の AUTO_INCREMENT 列の値を取得します。

mysql_query("INSERT INTO 昆虫 (名前、日付、起源)
VALUES('moth','2001-09-14','windowsill')",$conn_id);
mysql_insert_id は、次のコードで使用できます。

リセットシーケンス

データ テーブル内の複数のレコードを削除し、残りのデータの AUTO_INCREMENT 列を再配置した場合は、自動増分列を削除してから再度追加することでこれを実行できます。

mysql> ALTER TABLEinsect DROP id;

mysql> ALTER TABLE昆虫

-> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST、

-> 主キー (id) を追加します。

通常、シーケンスは 1 から始まりますが、開始値 100 を指定する必要がある場合は、次のようになります。

-> id INT UNSIGNEDNOT NULL AUTO_INCREMENT = 100,

または、テーブルが正常に作成された後、次のステートメントを使用してこれを実現します。

mysql> ALTER TABLE tAUTO_INCREMENT = 100;

MySQLは重複データを処理します

テーブルに重複データが表示されないようにする

データの一意性を確保するために、MySQL データ テーブル内の指定されたフィールドを PRIMARY KEY または UNIQUE インデックスとして設定します。

テーブル内の first_name フィールドと last_name フィールドに一意のデータを設定します。データの一意性を設定するには、二重主キー モードを設定できます。二重主キーを設定すると、そのキーのデフォルト値は NULL にできず、NOT NULL に設定できます。以下のように表示されます。

テーブル person_tbl を作成する
(
 first_name CHAR(20) NOT NULL、
 last_name CHAR(20) NOT NULL、
 性別CHAR(10),
 主キー (姓、名)
);

INSERT IGNORE INTO と INSERT INTO の違いは、INSERT IGNORE ではデータベースにすでに存在するデータが無視されることです。データベースにデータがない場合、新しいデータが挿入されます。データがある場合、そのデータはスキップされます。これにより、データベース内の既存のデータを保持し、ギャップにデータを挿入するという目的を達成できます。

INSERT IGNORE INTO を使用すると、実行後にエラーは発生せず、重複したデータがデータ テーブルに挿入されることはありません。

mysql> person_tbl(姓、名)に無視を挿入します

->VALUES('ジェイ', 'トーマス');

クエリは正常、1 行が影響を受けました (0.00 秒)

REPLACE INTO 同じプライマリまたは一意のレコードが存在する場合は、まずそれを削除します。新しいレコードを再度挿入します。

UNIQUE(姓, 名)

重複レコードをクエリする

user_table から user_name、count(*) を count として選択し、user_name で count>1 を持つグループを作成します。

人から*を選択

peopleId が (count(peopleId) > 1 を持つ peopleId で peoplegroup から peopleId を選択)

重複データのカウント

テーブル内の first_name と last_name の重複レコードの数を数えます。

mysql> SELECT COUNT(*) 繰り返し、姓、名として

 -> person_tbl から
 ->GROUP BY 姓、名
 ->繰り返し回数が 1 回を超える;

重複データのフィルタリング

重複しないデータを読み取るには、SELECT ステートメントで DISTINCT キーワードを使用して重複データを除外できます。

mysql> SELECT DISTINCT 姓、名

-> person_tbl から

->ORDER BY last_name;

GROUP BY を使用して、データ テーブル内の重複しないデータを読み取ることもできます。

mysql> 姓、名を選択
 -> person_tbl から
 ->GROUP BY (姓、名);

重複排除

テーブル内の重複データを削除するには、次の SQL ステートメントを使用できます。

mysql> CREATE TABLE tmp SELECT last_name,first_name, sex

 -> FROMperson_tbl;

 -> GROUP BY (姓、名);

mysql> テーブル person_tbl を削除します。

mysql> ALTER TABLE tmp の名前を person_tbl に変更します。

データ テーブルに INDEX (インデックス) と PRIMAY KEY (主キー) を追加して、テーブル内の重複レコードを削除することもできます。方法は次のとおりです。

mysql>テーブル person_tbl を無視する変更
 ->主キーを追加します (last_name, first_name);

MySQL と SQL インジェクション

特殊文字がフィルタリングされていない場合、表示される SQL は次のようになります。

// 必要のないSQL文を挿入するために$nameを設定します

$name = "Qadir';ユーザーから削除;";

mysql_query("SELECT * FROM users WHERE name='{$name}'");

上記のインジェクション ステートメントでは、$name 変数をフィルター処理しなかったため、不要な SQL ステートメントが $name に挿入され、users テーブル内のすべてのデータが削除されます。

SQL インジェクションを防ぐには、次の点に注意してください。

1. ユーザー入力を決して信頼しないでください。ユーザー入力を検証するには、正規表現を使用したり、長さを制限したり、一重引用符や二重の「-」などを変換したりできます。

2. 動的 SQL アセンブリは使用しないでください。パラメータ化された SQL を使用するか、ストアド プロシージャを直接使用して、データを照会およびアクセスすることができます。

3. 管理者権限でデータベース接続を使用しないでください。アプリケーションごとに権限が制限された個別のデータベース接続を使用してください。

4. 機密情報を直接保存したり、パスワードや機密情報を暗号化したりハッシュ化したりしないでください。

5. アプリケーションの例外情報では、できるだけプロンプトを少なくする必要があります。元のエラー情報をラップするには、カスタム エラー メッセージを使用するのが最適です。

6. SQL インジェクションの検出方法は、一般的に補助ソフトウェアまたは検出用ウェブサイト プラットフォームを採用します。ソフトウェアでは一般的に SQL インジェクション検出ツール jsky を使用し、ウェブサイト プラットフォームでは Yisi ウェブサイト セキュリティ プラットフォーム検出ツールを使用します。 MDCSOFT SCAN等MDCSOFT-IPS を使用すると、SQL インジェクション、XSS 攻撃などを効果的に防御できます。

Perl や PHP などのスクリプト言語では、ユーザー入力データをエスケープして SQL インジェクションを防ぐことができます。

PHP の MySQL 拡張機能には、特殊な入力文字をエスケープするための mysql_real_escape_string() 関数が用意されています。

(get_magic_quotes_gpc()) の場合
{
 $name = stripslashes($name);
}

$name =mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

Like ステートメントへの挿入

類似クエリを実行するときに、ユーザーが「_」と「%」を含む値を入力すると、次のような状況が発生する可能性があります。ユーザーはもともと「abcd_」のみをクエリしたかったのですが、クエリ結果には「abcd_」、「abcde」、「abcdf」などが含まれていました。ユーザーが「30%」(注:30パーセント)をクエリしたい場合にも問題が発生する可能性があります。

PHP スクリプトでは、次の例に示すように、addcslashes() 関数を使用して上記の状況を処理できます。

$sub =addcslashes(mysql_real_escape_string("%something_"), "%_");

// $sub == \%something\_

mysql_query("SELECT * FROM メッセージ WHERE subject LIKE '{$sub}%'");

addcslashes() 関数は、指定された文字の前にバックスラッシュを追加します。

構文:

addcslashes(文字列,文字)

MySQL エクスポートデータ

SELECT ... INTO OUTFILE ステートメントを使用してデータをエクスポートする

データ テーブル w3cschool_tbl のデータを /tmp/tutorials.txt ファイルにエクスポートします。

mysql> tutorials_tblから*を選択します

-> 出力ファイル '/tmp/tutorials.txt' に出力します。

値がカンマで区切られたファイルを生成します。この形式は多くのプログラムで使用できます。

a、b、a+b を選択して INTOOUTFILE '/tmp/result.text' に格納します。
フィールドは ',' で終了し、オプションで '"' で囲まれます
'\n' で終了する行
test_table から;

SELECT ... INTO OUTFILE ステートメントには次のプロパティがあります。

LOAD DATA INFILE は、SELECT ... INTO OUTFILE、SELECT 構文の逆の操作です。データベースのデータをファイルに書き込むには、SELECT ... INTO OUTFILE を使用し、ファイルをデータベースに読み込むには、LOAD DATA INFILE を使用します。

SELECT ... INTO OUTFILE 'file_name' を使用して、選択した行をファイルに書き込むことができます。ファイルはサーバー ホスト上に作成されるため、この構文を使用するには FILE 権限が必要です。

出力は既存のファイルにすることはできません。ファイルデータの改ざんを防ぎます。

ファイルを取得するには、サーバーにログインするためのアカウントが必要です。それ以外の場合、SELECT ... INTO OUTFILE は効果がありません。

UNIX では、ファイルは読み取り可能で、MySQL サーバーが所有する権限を持つように作成されます。つまり、ファイルを読み取ることはできますが、削除できない可能性があります。

テーブルを生データとしてエクスポート

mysqldump は、MySQL がデータベースをダンプするために使用するユーティリティです。

tutorials_tbl テーブルを /tmp ディレクトリにエクスポートします。

$ mysqldump -u ルート -p --no-create-info \

--tab=/tmp W3CSCHOOL w3cschool_tbl

パスワード******

データベース全体をエクスポートするには、次のコマンドを使用します。

$ mysqldump -u ルート -pW3CSCHOOL > database_dump.txt

パスワード******

すべてのデータベースをバックアップするには、次のコマンドを使用できます。

$ mysqldump -u root -p --all-databases > database_dump.txt

パスワード******

mysqldump コマンドでデータベース名とテーブルを指定します。

ソース ホストで次のコマンドを実行して、データを dump.txt ファイルにバックアップします。

$ mysqldump -u root -pdatabase_name table_name> dump.txt

パスワード*****

バックアップされたデータベースをMySQLサーバーにインポートする必要があります。

$ mysql -u root -pdatabase_name <dump.txtパスワード*****

次のコマンドは、エクスポートされたデータをリモートサーバーに直接インポートしますが、2つのサーバーが接続されており、互いにアクセスできることを確認してください。

$ mysqldump -u root -pdatabase_name \

|

MySQLインポートデータ

現在のディレクトリからファイルdump.txtを読み、ファイルのデータを現在のデータベースのmytblテーブルに挿入します。

mysql> datalocal infile 'dump.txt'をテーブルmytblにロードします。

ユーザーが FIELDS 句を指定する場合、その句 (TERMINATED BY、[OPTIONALLY] ENCLOSED BY、および ESCAPED BY) もオプションですが、ユーザーは少なくともそのうちの 1 つを指定する必要があります。

mysql> datalocal infile 'dump.txt'をテーブルmytblにロードします

-> フィールドは ':' で終了します

-> 行は '\r\n' で終了します。

列の順序を指定します。

たとえば、データ ファイル内の列の順序は a、b、c で​​すが、挿入テーブル内の列の順序は b、c、a です。データのインポート構文は次のとおりです。

mysql> load datalocal infile 'dump.txt'

-> テーブル mytbl (b, c, a) にデータを挿入します。

MySqlimportを使用してデータをインポートします

MySQlimportクライアントは、LoadData InfileQLステートメントへのコマンドラインインターフェイスを提供します。 mysqlimport のほとんどのオプションは、LOAD DATA INFILE 句に直接対応しています。

dump.txt ファイルから mytbl テーブルにデータをインポートするには、次のコマンドを使用します。

$ mysqlimport -u root -p - local database_name dump.txt

パスワード*****

mysqlimport コマンドでは、指定された形式を設定するためのオプションを指定できます。コマンド ステートメントの形式は次のとおりです。

$ mysqlimport -u root-p - local - fields-terminated-by = ":" \

-lines-terminated-by = "\ r \ n" database_name dump.txt

パスワード*****

列の順序を設定するには、mysqlimport ステートメントで --columns オプションを使用します。

$ mysqlimport -u root -p - local - columns = b、c、a \

database_name dump.txt

パスワード*****

以下もご興味があるかもしれません:
  • MySQL 基本データベース作成
  • MySQLの基本を学ぶ MySQLコマンドを簡単に学ぶ
  • 20分でわかるMySQLの基礎
  • MySQL 初心者ガイド - クイックリファレンス
  • 30 分でわかる MySQL クイック スタート (画像付き)
  • 21 分でわかる MySQL 入門チュートリアル
  • すぐに学べるMySQLインデックス入門スーパーチュートリアル
  • MySQLの基礎知識のまとめ
  • MySQL ビューの基本操作 (V)
  • MySQL の基本クイックスタート知識のまとめ (マインドマップ付き)

<<:  node.jsのコアモジュールとは

>>:  Samba を使用して Linux サーバー上で共有ファイル サービスを構築する方法

推薦する

シェルを使用して複数のサーバーでバッチ操作を実行する方法

目次SSHプロトコルパスワード接続プロセスsshツールssh公開鍵ログインバッチ操作複数サーバーファ...

Vue は Ctrip のカルーセル効果を模倣します (スライディング カルーセル、以下は高度に適応)

まずケースを見てみましょう。vue+swiper を使用して実装します。スライドの高さが異なる場合、...

React+Ant Design開発環境をセットアップするための実装手順

基礎1. スキャフォールディングを使用してプロジェクトを作成し、開始する1.1 足場を設置する: n...

Nginx ドメイン名の書き換えとワイルドカードドメイン名の解決を設定する方法

この記事では、ドメイン名の書き換えとワイルドカードドメイン名の解決を行うための Nginx の設定方...

mysql ビュー関数の分析と使用例

この記事では、例を使用して MySQL ビューの機能と使用方法を説明します。ご参考までに、詳細は以下...

WebページのレイアウトではIE6の互換性の問題を考慮する必要があります

下の図は、当社のウェブサイト統計システムの訪問者詳細におけるブラウザ閲覧率を示しており、IE6 が ...

ウェブサイトデザインの基礎知識:初心者の方はぜひお読みください

今では多くの人がウェブサイト作成に参加していますが、ウェブサイトはどのように作成すればよいのでしょう...

JavaScript の for ループと二重 for ループの詳細な説明

forループfor ループは配列の要素をループします。文法: for (初期化変数; 条件式; 繰り...

Reactの基本のまとめ

目次序文始めるReactライフサイクルリアクトファイバーリアクトセットステートReactイベントメカ...

Linuxコマンドに基づいてフォルダー内の特定のファイルパスを抽出します

最近では、特定のフォルダ内の特定のファイルを自動的に検索する必要があり、ファイルパスとファイル名を別...

mysql-5.7.21-winx64 無料インストール版のインストール - Windows チュートリアル詳細説明

1 ダウンロードアドレスは https://dev.mysql.com/downloads/mysq...

JavaScriptはクリックトグル機能を実装します

この記事の例では、クリックして切り替える機能を実装するためのJavaScriptの具体的なコードを参...

Vue3.0でカスタム命令を書くための簡単な手順

序文Vue には、v-if、v-bind、v-on などの豊富な組み込みディレクティブが用意されてい...

MySQL 最適化接続最適化

記事「MySQL の最適化: キャッシュの最適化」では、システムによってコンパイルされた変数値、また...