MySQL 5.6 Developer試験 公式「試験内容 チェックリスト」
[https://education.oracle.com/ja/mysql-56-developer/pexam_1Z0-882:embed:cite]
MySQL 5.6 リファレンスマニュアル
[https://dev.mysql.com/doc/refman/5.6/ja/:embed:cite]
MySQLの標準的なドライバを使用するPHP、Java、および.NET開発の主要な特徴、機能およびオプションを識別する
PHP
[https://www.php.net/manual/ja/mysqlinfo.api.choosing.php:emebed:cite]
-
2つ(古いもの含め3つ)ある
- ext/mysqli
- MySQL専用
- PDO
- MySQL以外にも使えるやつ
- ext/mysql
-
mysqliの前身
- といいつつ互換はないとかなんとか
-
古い
- 5.x時点で非推奨。PHP7.xで削除
-
PHPにはコネクションプールはない
- 単に持続的に接続しているだけ
-
【所感】2020/06/06現在、業務で普段遣いしているのはPDO
- LaravelのConnectionの内部で使われている
Java
JDBC
[https://docs.oracle.com/javase/jp/8/docs/technotes/guides/jdbc/index.html:embed:cite]
- たぶんこれ
.NET
ADO.NET
[https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/ado-net-code-examples:embed:cite]
- たぶんこれ
MySQlのエラー・メッセージを解釈する
[https://dev.mysql.com/doc/refman/5.6/ja/error-message-language.html:embed:cite]
- エラーメッセージ言語を設定できる
mysqld --lc_messages_dir=/usr/share/mysql --lc_messages=fr_FR
-
上記起動オプションで起動したならば:
- fr_FRが
french
にマッピングされる /usr/share/mysql/french
でエラーメッセージが検索される
- fr_FRが
サーバーのエラーコードおよびメッセージ
[https://dev.mysql.com/doc/refman/5.6/ja/error-messages-server.html:embed:cite]
エラー: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR)
メッセージ: ユーザー '%s'@'%s' のアクセスは拒否されました (使用パスワード: %s)
こういうやつ
クライアントのエラーコードおよびメッセージ
[https://dev.mysql.com/doc/refman/5.6/ja/error-messages-client.html:embed:cite]
エラー: 2001 (CR_SOCKET_CREATE_ERROR)
メッセージ: UNIX のソケット (%d) を作成できません
こういうやつ
使用可能な診断情報を収集する
[https://dev.mysql.com/doc/refman/5.6/ja/diagnostics-area.html:embed:cite]
mysql> DROP TABLE test.no_such_table;
ERROR 1051 (42S02): Unknown table 'test.no_such_table'
- テーブルを使用するため診断領域クリア
- 条件が発生したので移入する
mysql> SHOW WARNINGS;
+-------+------+------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------+
| Error | 1051 | Unknown table 'test.no_such_table' |
+-------+------+------------------------------------+
1 row in set (0.00 sec)
- 診断情報抽出
GET DIAGNOSTICS CONDITION 1
@p1 = MYSQL_ERRNO,@p2 = RETURNED_SQLSTATE, @p3 = MESSAGE_TEXT;
SELECT @p1 AS MYSQL_ERRNO
, @p2 AS RETURNED_SQLSTATE
, @p3 AS MESSAGE_TEXT
FROM DUAL;
+-------------+-------------------+------------------------------------+
| MYSQL_ERRNO | RETURNED_SQLSTATE | MESSAGE_TEXT |
+-------------+-------------------+------------------------------------+
| 1051 | 42S02 | Unknown table 'test.no_such_table' |
+-------------+-------------------+------------------------------------+
1 row in set (0.00 sec)
- テーブル不使用、警告も生成しない場合、診断領域はそのまま
mysql> SET @x = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------+
| Error | 1051 | Unknown table 'test.no_such_table' |
+-------+------+------------------------------------+
1 row in set (0.00 sec)
-
テーブルを使用せず、エラー生成する場合
- 診断領域をクリアして移入
mysql> SET @x = @@x;
ERROR 1193 (HY000): Unknown system variable 'x'
mysql> SHOW WARNINGS;
+-------+------+-----------------------------+
| Level | Code | Message |
+-------+------+-----------------------------+
| Error | 1193 | Unknown system variable 'x' |
+-------+------+-----------------------------+
1 row in set (0.00 sec)
-
条件番号が1までしかないのに2の抽出を試みてみる
- テーブルを触らず、警告発生
- 診断領域はクリアされず、条件が移入される
mysql> GET DIAGNOSTICS CONDITION 2 @p = MESSAGE_TEXT;
Query OK, 0 rows affected, 1 warning (0.00 sec)
SHOW WARNINGS;
+-------+------+-----------------------------+
| Level | Code | Message |
+-------+------+-----------------------------+
| Error | 1193 | Unknown system variable 'x' |
| Error | 1758 | Invalid condition number |
+-------+------+-----------------------------+
2 rows in set (0.00 sec)
- 2つめが入ったので今度はちゃんと動く
mysql> GET DIAGNOSTICS CONDITION 2 @p = MESSAGE_TEXT;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @p;
+--------------------------+
| @p |
+--------------------------+
| Invalid condition number |
+--------------------------+
1 row in set (0.00 sec)
- 警告の場合でも、テーブルを触ると診断領域はクリアされる
mysql> DROP TABLE no_such_table;
ERROR 1051 (42S02): Unknown table 'sample.no_such_table'
mysql> SHOW WARNINGS;
+-------+------+--------------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------------+
| Error | 1051 | Unknown table 'sample.no_such_table' |
+-------+------+--------------------------------------+
1 row in set (0.00 sec)
mysql> CREATE TABLE tbl (d timestamp);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO tbl VALUES ('2039-01-01 00:00:00');
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> SHOW WARNINGS;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1264 | Out of range value for column 'd' at row 1 |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)
診断領域をクリアするか否か
テーブル触る | テーブル触らない | |
---|---|---|
警告 | クリア | |
エラー | クリア | クリア |
- CONDITIONの数はNUMBERで取れる
mysql> DROP TABLE no_such_table;
ERROR 1051 (42S02): Unknown table 'sample.no_such_table'
mysql> GET DIAGNOSTICS CONDITION 3 @p = MESSAGE_TEXT;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> GET DIAGNOSTICS CONDITION 3 @p = MESSAGE_TEXT;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> GET DIAGNOSTICS CONDITION 3 @p = MESSAGE_TEXT;
Query OK, 0 rows affected (0.00 sec)
mysql> GET DIAGNOSTICS @n = NUMBER;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @n;
+------+
| @n |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
- 関連するシステム変数
mysql> SELECT @@max_error_count,@@warning_count,@@error_count,@@sql_notes;
+-------------------+-----------------+---------------+-------------+
| @@max_error_count | @@warning_count | @@error_count | @@sql_notes |
+-------------------+-----------------+---------------+-------------+
| 64 | 3 | 3 | 1 |
+-------------------+-----------------+---------------+-------------+
1 row in set (0.00 sec)
-
max_error_count
を超えて追加しようとした分は暗黙理に捨てられる- RESIGNALによって追加された場合はつねに診断領域に追加され、ところてん式に古いものが捨てられる
warning_count
,error_count
は捨てられた分も数える- 例:
max_error_count
を2にしてみる
mysql> SET @@max_error_count = 2;
Query OK, 0 rows affected (0.01 sec)
- 警告を4つ発生させる
mysql> DROP TABLE no_such_table;
ERROR 1051 (42S02): Unknown table 'sample.no_such_table'
mysql> GET DIAGNOSTICS CONDITION 3 @p = MESSAGE_TEXT;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> GET DIAGNOSTICS CONDITION 3 @p = MESSAGE_TEXT;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> GET DIAGNOSTICS CONDITION 3 @p = MESSAGE_TEXT;
Query OK, 0 rows affected, 1 warning (0.00 sec)
-
NUMBER (診断領域に実際に格納されている件数)は2
- 上限にかかった
mysql> GET DIAGNOSTICS @n = NUMBER;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @n;
+------+
| @n |
+------+
| 2 |
+------+
1 row in set (0.00 sec)
- いちばん古い
Unknown table 'sample.no_such_table'
が残っている = 新しいものが捨てられている
mysql> SHOW WARNINGS;
+-------+------+--------------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------------+
| Error | 1051 | Unknown table 'sample.no_such_table' |
| Error | 1758 | Invalid condition number |
+-------+------+--------------------------------------+
2 rows in set (0.00 sec)
- システム変数確認
mysql> SELECT @@max_error_count,@@warning_count,@@error_count,@@sql_notes;
+-------------------+-----------------+---------------+-------------+
| @@max_error_count | @@warning_count | @@error_count | @@sql_notes |
+-------------------+-----------------+---------------+-------------+
| 2 | 4 | 4 | 1 |
+-------------------+-----------------+---------------+-------------+
1 row in set (0.00 sec)