MySQL超入門(その2)

なんやかんや前はいじっていたMySQLの使い方を完全に忘れたのでメモ(その2)。

前回のおさらい

今回は、

  • コマンドプロンプトを管理者モードで起動する
  • MySQLを起動する
  • MySQLにログインする
  • データベースの作成(名前は「python_test_db」とする)
  • 操作するデータベースを切り替える
  • データベースにテーブルを作成する(テーブル名とカラムは下記の通り。)
mysql> CREATE TABLE person (id INT, name VARCHAR(100));

まで終えた状態から再開する想定です。

テーブルにレコードを追加する

次のコマンドでテーブルにレコードを追加できます。

mysql> INSERT INTO person (id, name) VALUES (1, 'やまだ');
Query OK, 1 row affected (0.01 sec)

テーブルを表示して確認してみます。

mysql> SELECT * FROM person;
+------+--------+
| id   | name   |
+------+--------+
|    1 | やまだ |
+------+--------+
1 row in set (0.00 sec)

正常にレコードが追加されました。

テーブルのレコードを削除する(カラムの値で指定する)

データの削除の方法はいくつかあります。まずはカラムの値で指定して削除する方法です。

構文は「DELETE FROM (テーブル名) WHERE (カラム名) (条件式) (カラムの値);」

今回の例のテーブルにはidとnameがあります。idで指定して削除する場合は、次のようになります。

mysql> DELETE FROM person WHERE id = 1;
Query OK, 1 rows affected (0.00 sec)

これで「id = 1」のレコードが削除できました。

また、nameで指定して削除する場合は、次のようになります。

mysql> DELETE FROM person WHERE name = 'たなか';
Query OK, 1 rows affected (0.00 sec)

テーブルのレコードを削除する(全部まとめて削除する)

テーブルのすべてのレコードを削除する場合は次のコマンドを使います。

mysql> DELETE FROM person;
Query OK, 1 rows affected (0.00 sec)

なお、大量のレコードがある場合は次のコマンドを使うほうが高速に削除できます。

mysql> TRUNCATE TABLE person;
Query OK, 1 rows affected (0.00 sec)

テーブルにレコードを追加する際の注意

既に下記のようなレコードを持つテーブルがあったとします。

mysql> SELECT * FROM person;
+------+--------+
| id   | name   |
+------+--------+
|    1 | やまだ |
+------+--------+
1 row in set (0.00 sec)

ここに次のようなコマンドを打つと、

mysql> INSERT INTO person (id, name) VALUES (1, 'やまだ');
Query OK, 1 row affected (0.01 sec)

同じレコードが2つになってしまいます。

mysql> SELECT * FROM person;
+------+--------+
| id   | name   |
+------+--------+
|    1 | やまだ |
|    1 | やまだ |
+------+--------+
2 rows in set (0.00 sec)

つまりidやname等のカラムが全く同じレコードを複数追加することができてしまいます。

テーブルのレコードを更新する

既に下記のようなレコードを持つテーブルがあったとします。

mysql> SELECT * FROM person;
+------+--------+
| id   | name   |
+------+--------+
|    1 | やまだ |
+------+--------+
1 row in set (0.00 sec)

レコードを更新する際にはカラムの値で指定します。

構文は「UPDATE (テーブル名) SET (カラム名) (条件式) (更新後のカラムの値) WHERE (カラム名) (条件式) (更新前カラムの値);」です。

nameで指定して更新してみます。

mysql> UPDATE person SET name = 'すずき' WHERE name = 'やまだ';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

テーブルを表示して確認してみます。

mysql> SELECT * FROM person;
+------+--------+
| id   | name   |
+------+--------+
|    1 | すずき |
+------+--------+
1 row in set (0.00 sec)

正常にレコードが更新されました。

もちろん、idで指定して更新することもできます。

mysql> UPDATE person SET name = 'たなか' WHERE name = 'すずき';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

テーブルを表示して確認してみます。

mysql> SELECT * FROM person;
+------+--------+
| id   | name   |
+------+--------+
|    1 | たなか |
+------+--------+
1 row in set (0.00 sec)

正常にレコードが更新されました。