Home > Tags > CREATE

CREATE

MySQL: 新規テーブルを作成・削除、構造の確認 - CREATE TABLE、DROP TABLE、DESCRIBE文

前回までにCREATE USERとGRANTコマンドでbookshelfデータベースを作成し、それを扱う全権限を持つユーザyukunを追加しました。
今回はCREATE TABLEコマンドでデータベースに新しいテーブルを作成し、それをDESCRIBEコマンドで確認してみます。また、それらに関連する他のコマンドも取り上げてみます。

新規テーブルの作成 - CREATE TABLE コマンド

以下のコマンドを打つと、

mysql> CREATE TABLE book
    -> (
    -> id INT(11),
    -> category_id INT(11),
    -> title VARCHAR(64),
    -> author_name VARCHAR(32),
    -> detail TEXT,
    -> price INT(11),
    -> image VARCHAR(64)
    -> );
Query OK, 0 rows affected (0.09 sec)

mysql>

次のようなテーブルを作成します。

id category_id title author_name detail price image

このコマンドを一般化すると、

CREATE TABLE <テーブル名>
( <列名1> <データ型>, <列名2> <データ型>, ... );

です。
ちなみに、ここでのidやtitleは列名といいテーブルの縦1列の属性名で、この列はフィールド、カラム(column)とも言います。また、テーブルの横1列と言い、この行はレコード、ロウ(row)とも言います。
<テーブル名>の前にIF NOT EXISTSを付けると、DB中に<テーブル名>がない場合にのみ作成します。

主キーを設定してテーブルを作成する

mysql> CREATE TABLE book2
    -> (
    -> id INT(11) NOT NULL AUTO_INCREMENT,
    -> title VARCHAR(64),
    -> author_name VARCHAR(32),
    -> detail TEXT,
    -> image VARCHAR(64),
    -> PRIMARY KEY (id)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql>

NOT NULLを指定することによってそのレコードを挿入する際にidフィールドが空であることを防止し、AUTO_INCREMENTを指定することによってレコードが追加されると(その際idフィールに代入指定が無い場合)idフィールドに1を代入し、その後もレコード追加の度に前挿入レコードのidに+1した値を代入していきます。余談ですが、SQLiteではINTEGER型のフィールドを主キーとするとデフォルトでauto incrementされます。

ちなみに、データベース内で既に作成されているテーブルと同じ名前のテーブルを再度作成しようとすると以下のようなエラーを返します。

mysql> CREATE TABLE book
...<中略>
ERROR 1050 (42S01): Table 'book' already exists
mysql>

テーブルの情報を出力するコマンド

データベース内のテーブルを表示 - SHOW TABLES コマンド

さて、上で作成したテーブルが本当に出来ているのかSHOW TABLES コマンドで確認してみましょう。

mysql> SHOW TABLES;
+---------------------+
| Tables_in_bookshelf |
+---------------------+
| book                |
| book2               |
+---------------------+
2 rows in set (0.00 sec)

mysql>

しっかり出来ていますね。

テーブルの構造を表示 - DESCRIBE(DESC)コマンド

それでは、テーブル内の構造はどうでしょうか。book2はオプションで色々設定しましたので、DESCRIBE(DESC)コマンドで確認してみましょう。

mysql> DESC book2;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| id          | int(11)     | NO   | PRI | NULL    | auto_increment |
| title       | varchar(64) | YES  |     | NULL    |                |
| author_name | varchar(32) | YES  |     | NULL    |                |
| detail      | text        | YES  |     | NULL    |                |
| image       | varchar(64) | YES  |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

mysql>

DESCでも同じ結果が返ってきます。

既存テーブルを再作成できるCREATE TABLE文を出力 - SHOW CREATE TABLE コマンド

別の環境でもう一度作成したい場合等に使えます。

mysql> SHOW CREATE TABLE book2;
CREATE TABLE `book2` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(64) default NULL,
  `author_name` varchar(32) default NULL,
  `detail` text,
  `image` varchar(64) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

上述のCREATE TABLE文では省いていたオプションが明示されていますが、確かにこの文でbook2を作成できます。

既存テーブルの削除 - DROP TABLE コマンド

最後に、テーブルの削除を試してみます。

mysql> DROP TABLE book;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW TABLES;
+---------------------+
| Tables_in_bookshelf |
+---------------------+
| book2               |
+---------------------+
1 row in set (0.00 sec)

mysql>

一般化すると、

DROP TABLE <テーブル名>;

ですね。
SHOW TABLESで削除されていることが確認できています。削除したテーブルは復元できませんので、このコマンドは気をつけて打ちましょう。

リファレンス

MySQL: ユーザの追加とパスワード、権限の付加 - GRANT文

前回はCREATE DATABASEコマンドでbookshelfという名前のDBを作成し、SHOW DATABASESコマンドでそれを確認しました。

一連の操作はroot権限で行いましたがこれはセキュリティ上よろしくないので、今回はrootユーザへのパスワードの設定と、新しくユーザ(ここでは安直に"yukun")を作成しbookshelfを操作する権限を付加してみます。

rootユーザのパスワードの設定・変更方法

普通のコマンドプロンプト(Win)かターミナル(Mac)で以下のコマンドを用いてパスワードを設定します。

$ mysqladmin -u root password <パスワード>

また、設定したパスワードを変更するには、

$ mysqladmin -u root -p <古いパスワード> <新しいパスワード>

新規ユーザの追加 - CREATE USER文

root権限で以下のコマンドを打ちます。

mysql> CREATE USER yukun IDENTIFIED BY 'ticktack';
Query OK, 0 rows affected (0.00 sec)

mysql>

一般式

CREATE USER <ユーザ名> IDENTIFIED BY '<パスワード>';

ユーザの追加はCREATE USERコマンドを使用します。上の例では、"yukun"という名前のユーザを作成し、"ticktack"というパスワードを設定しました。パスワードは本来もっと複雑なものにする必要がありますが今回はローカルでの開発用、と限定した環境での仕様を念頭においていますので、安直な単語にしました。

それでは一回MySQLをログアウトして、再度ユーザyukunとしてログインし、bookshelを使ってみましょう。

mysql> quit
Bye

C:\Users\yukun>mysql -u yukun -pticktack
mysql> USE bookshelf;
ERROR 1044 (42000): Access denied for user 'yukun'@'%' to database 'bookshelf'
mysql>

USEコマンドでbookshelfを使用しようと試みていますが、ユーザyukunは操作権限が無いためエラーが出ていますね。それでは、このユーザyukunにデータベースbookshelfに対する全操作の権限を付加してみましょう。

ユーザにDBを操作する権限を付加 - GRANT文

もう一度rootユーザでMySQLにログインし以下のコマンドを打ちます。

mysql> GRANT ALL PRIVILEGES ON bookshelf.* TO yukun@localhost IDENTIFIED BY 'ticktack';
Query OK, 0 rows affected (0.00 sec)

mysql>

一般式

GRANT <操作名> ON <データベース名>.<テーブル名>
TO <ユーザ名>@<ホスト名> IDENTIFIED BY '<パスワード>';

さぁ、今度こそbookshelfを操作できるはずですので、もう一度先ほどのUSEコマンドを打ってみましょう。

C:\Users\yukun>mysql -u yukun -pticktack
mysql> USE bookshelf;
Database changed
mysql>

おぉ、USEコマンドで使用するDBを選択できるようになっていますね(^-^)b

MySQL: ログインと新規データベースの作成・削除 - CREATE DATABASE、DROP DATABASE文

Windowsに開発用のMySQLを新規にインストールとパス設定した環境で進めていきます。まず、プロンプト上で以下のコマンドを一行打ちMySQLに接続してみます。

rootユーザでログイン

C:\Users\yukun>mysql -u root
mysql>

まだrootユーザにパスワードを設定してないので、
>mysql -u root
でログインできます。仮にパスワードが設定されていると次行のプロンプトでパスの入力を求められます。

新規データベース(DB)の作成 - CREATE DATABASEコマンド

さて、MySQLに接続したことでプロンプトが>からmysql>に変わっています。次に以下のコマンドで新しいデータベースを作成してみましょう。

mysql> CREATE DATABASE bookshelf;
mysql>

CREATE DATABASEコマンドでbookshelfという名前のDBを作成しています。コマンドは大文字で打っていますが、別に小文字でも構いません。これは「コマンドである」ことを分かりやすくするための措置です。
また、ここで文字コードを指定する場合は以下のように打ちます。

mysql> CREATE DATABASE bookshelf DEFAULT CHARACTER SET utf8;

実際にデータベースが作成されているか、SHOW DATABASESコマンドで確認してみましょう。

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bookshelf          |
| cdcol              |
| mysql              |
| phpmyadmin         |
| test               |
| webauth            |
+--------------------+
mysql>

おぉ、確かにbookshelfが作成されています。

ログアウトはquitコマンドを打てばOK

mysql> quit
Bye
C:\Users\yukun>

データベースの削除 - DROP DATABASE文

データベースの削除の文は、

DROP DATABASE <データベース名>;

です。

Home > Tags > CREATE

バックナンバー
最近のコメント
最近のトラックバック
メタ情報

Return to page top