Open8
mysql テーブル作成 ~ カラム追加, 削除
テーブルを作成する。
最低1カラム必要。
# create table テーブル名 (カラム)
mysql> create table a (a1 int);
Query OK, 0 rows affected (0.02 sec)
mysql> desc a;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| a1 | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)
テーブル削除
mysql> drop table a;
Query OK, 0 rows affected (0.01 sec)
mysql> desc a;
ERROR 1146 (42S02): Table 'hoge.a' doesn't exist
主キーを追加する
primary keyをつけるとNull不可能, 主キーになる
mysql> create table a (id int primary key);
Query OK, 0 rows affected (0.01 sec)
mysql> desc a;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
insert。
主キーには同じ値を入れられない。主キーにauto_incrementがないので毎回値を指定する必要がある
mysql> insert into a values (1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values (1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
alterで主キーにauto_incrementつける
modify id auto_increment
ではだめ。modify id int auto_increment
incrementsではなくincrement
auto_incrementは外すことも可能
mysql> alter table a modify id int auto_increment;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> desc a;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
+-------+---------+------+-----+---------+----------------+
1 row in set (0.00 sec)
idを指定しなくても大丈夫になる
mysql> insert into a values ();
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ();
Query OK, 1 row affected (0.01 sec)
mysql> insert into a values ();
Query OK, 1 row affected (0.00 sec)
mysql> select * from a;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
+----+
4 rows in set (0.00 sec)
auto_incrementはずせる
mysql> alter table a modify id int ;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> desc a;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
id値を指定しても問題ない。
id値を指定しないと最大値 + 1になるのかな。
mysql> insert into a values (10);
Query OK, 1 row affected (0.01 sec)
mysql> select * from a;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 10 |
+----+
5 rows in set (0.00 sec)
mysql> insert into a values ();
Query OK, 1 row affected (0.00 sec)
mysql> insert into a values ();
Query OK, 1 row affected (0.00 sec)
mysql> select * From a;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 10 |
| 11 |
| 12 |
+----+
7 rows in set (0.00 sec)
alterでカラムを追加する。
デフォルト値を指定しない場合、既存のレコードは、null許容ならnullになる。
null拒否ならtypeのデフォルト値(intなら0)になる。
default値を指定したらその値になる。
mysql> alter table a add column a1 int ;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc a;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| a1 | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> select * from a;
+----+------+
| id | a1 |
+----+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
| 6 | NULL |
| 10 | NULL |
| 11 | NULL |
| 12 | NULL |
| 13 | NULL |
+----+------+
9 rows in set (0.00 sec)
# not null制約
mysql> alter table a add column a2 int not null;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from a;
+----+------+----+
| id | a1 | a2 |
+----+------+----+
| 1 | NULL | 0 |
| 2 | NULL | 0 |
| 3 | NULL | 0 |
| 4 | NULL | 0 |
| 6 | NULL | 0 |
| 10 | NULL | 0 |
| 11 | NULL | 0 |
| 12 | NULL | 0 |
| 13 | NULL | 0 |
+----+------+----+
9 rows in set (0.00 sec)
# デフォルト値を指定
mysql> alter table a add column a3 int default 2;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from a;
+----+------+----+------+
| id | a1 | a2 | a3 |
+----+------+----+------+
| 1 | NULL | 0 | 2 |
| 2 | NULL | 0 | 2 |
| 3 | NULL | 0 | 2 |
| 4 | NULL | 0 | 2 |
| 6 | NULL | 0 | 2 |
| 10 | NULL | 0 | 2 |
| 11 | NULL | 0 | 2 |
| 12 | NULL | 0 | 2 |
| 13 | NULL | 0 | 2 |
+----+------+----+------+
9 rows in set (0.00 sec)
カラム削除
mysql> alter table a drop column a1;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from a;
+----+----+------+
| id | a2 | a3 |
+----+----+------+
| 1 | 0 | 2 |
| 2 | 0 | 2 |
| 3 | 0 | 2 |
| 4 | 0 | 2 |
| 6 | 0 | 2 |
| 10 | 0 | 2 |
| 11 | 0 | 2 |
| 12 | 0 | 2 |
| 13 | 0 | 2 |
+----+----+------+
9 rows in set (0.00 sec)