xengineer’s diary

結果、メモ的な内容になっています。

mysqlの基本的操作(その1)

概要

いつもDB操作するときにググるのでメモ・・・

DB作って、テーブル作って、カラムにデータ挿入して、そのデータ更新する。

あとテーブルの削除。

簡単なところでよく使うSQLをメモ。

Database作成

syntaxはこれ。

> create database <db_name>;

実際動かすとこんな感じ。

$ mysql -u<username> -p<password>

mysql> create database arel_test;
Query OK, 1 row affected (0.04 sec)

mysql> show databases;
+-----------------------+
| Database              |
+-----------------------+
| information_schema    |
| arel_test             |
| performance_schema    |
+-----------------------+
3 rows in set (0.00 sec)

Databse情報表示

いくつかあるので、以下に僕がよく使うやつを。

Database一覧表示

> show databases;

Database環境設定表示

全部表示したい場合は↓↓

> show variables;

特定のを探してる場合は↓↓

> show variables like <variable>;

例えば、character_set_databaseが見たいときは、

mysql> show variables like "character_set_database";
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| character_set_database | utf8  |
+------------------------+-------+
1 row in set (0.05 sec)

Table 作成

syntaxはこれ。

> create table <table_name>(col data_type, col data_type);

col: カラム名。好きに名前をつけましょう data_type: mysqlで決められてるので、そこから選びましょう

どんなdata_typeがあるのかな、とググッてみた↓↓

MySQL Data Types

バージョンによっても多少違ったりするところはあると思うので、

一番は、各バージョンのMySQLのドキュメントを参照してちょ。

では試しに、test_tableという名前のテーブルを、こんなカラムで作ってみる。

カラム名 : data_type

  • col01 : int
  • col02 : varchar(64)
mysql> create table test_table(col01 int, col02 varchar(64));
Query OK, 0 rows affected (0.74 sec)

mysql> show tables;
+-------------------+
| Tables_in_ar_test |
+-------------------+
| test_table        |
+-------------------+
1 row in set (0.01 sec)

Table情報表示

Table一覧表示

さっき↑で使ったけど、

> show tables;

でテーブルの一覧が表示されます。

Table詳細表示

> describe <table_name>;

で、詳細でます。

例えば、こんな感じ。

mysql> desc test_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| col01 | int(11)     | YES  |     | NULL    |       |
| col02 | varchar(64) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.31 sec)

descは短縮系。

データ挿入

insert文ってやつです。

> insert into <table_name> (col, col, ...) values (val, val, ...);

最初のカッコの中に、データを挿入したいカラムを列挙して、

挿入する値自体は、次のカッコの中に、並べればOK。

さてさて、やってみよう。

mysql> insert into test_table (col01, col02) values (1, 'testvalue');
Query OK, 1 row affected (0.33 sec)

mysql> select * from test_table;
+-------+-----------+
| col01 | col02     |
+-------+-----------+
|     1 | testvalue |
+-------+-----------+
1 row in set (0.27 sec)

おー、できたできた。

確認したいので、ついでにselect文も。

> select * from <table_name>;

で、<table_name>というテーブルにある全カラム(*が全カラム、っていう意味)の、

全データが出てきます。

* に、カラム名を入れると、特定カラムだけ引っ張ってこれます。

データ更新

そのまんま。既存データを更新しますよと。

> update <table_name> set <column_name>=<value>;

例えば、さっきのテーブルに、

col01 : 1 col02 : testvalue2

っていうのを更にinsertして、col01の値を、"2"に更新してみる。

mysql> mysql> insert into test_table (col01, col02) values (1, 'testvalue2');
Query OK, 1 row affected (0.30 sec)

mysql> select * from test_table;
+-------+------------+
| col01 | col02      |
+-------+------------+
|     1 | testvalue  |
|     1 | testvalue2 |
+-------+------------+
2 rows in set (0.00 sec)

mysql> update test_table set col01=2;
Query OK, 2 rows affected (0.48 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from test_table;
+-------+------------+
| col01 | col02      |
+-------+------------+
|     2 | testvalue  |
|     2 | testvalue2 |
+-------+------------+
2 rows in set (0.00 sec)

あー、なるほど。。。col01が両方2になった・・・。

というわけで条件をつける。

col02=='testvalue2'のカラムだけcol01を更新しよう。

そんな時は where文を使います。

> update <table_name> set <column_name>=<value> where <column_name>=<value>;

じゃ、これを使ってみる。

mysql> update test_table set col01=1 where col02='testvalue2';
Query OK, 1 row affected (0.38 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from test_table;
+-------+------------+
| col01 | col02      |
+-------+------------+
|     2 | testvalue  |
|     1 | testvalue2 |
+-------+------------+
2 rows in set (0.00 sec)

おー。できたできた。

テーブル削除

さて、最後にきれいにテーブルを削除して終わりにしますか。

> drop table <table_name>;

で、きれいさっぱりいけます。

下記実演。

mysql> show tables;
+-------------------+
| Tables_in_ar_test |
+-------------------+
| test_table        |
+-------------------+
1 row in set (0.00 sec)

mysql> drop table test_table;
Query OK, 0 rows affected (0.49 sec)

mysql> show tables;
Empty set (0.00 sec)

ほんとにただのメモですわ。

おわり。