テーブル:データ定義(SQL文)テーブルの作成・削除・情報表示・定義変更
- テーブルの作成〔CREATE TABLE文〕
- テーブルの削除〔DROP TABLE〕
- テーブル構造を変更
- テーブルの名前を変更〔ALTER TABLE RENAME / RENAME TABLE〕
- テーブル作成時のSQL文を表示〔SHOW CREATE TABLE文〕
- テーブル情報を表示〔SHOW TABLE STATUS文〕
- テーブル一覧表示〔SHOW TABLES文〕
- このページで使用しているサンプルデータ
テーブルの作成
CREATE TABLE文
unknown
既に同名のデータベースを作成しようとすると、エラーになります。
エラーを発生させないためには、キーワードIF NOT EXISTSを指定します。
キーワードIF NOT EXISTSを指定すると、同名のテーブルが存在するか確認し、存在しない場合のみ作成処理を行うため、エラーが発生しません。
⇒ CREATE TABLE IF NOT EXISTS [データベース名.]テーブル名 ( ... );
データベース未選択の場合は、データベース名.テーブル名
のようにテーブル名の前にデータベース名を指定してして下さい。
USE文などで既にデータベースが選択されている場合は、テーブル名の前にデータベース名の指定は不要です。
# db_Customerデータベースに、tbl_Addressテーブルを作成 # 既にデータベースが選択されている場合は、データベース名の指定は不要 mysql> CREATE TABLE IF NOT EXISTS db_User.tbl_Customer( Enter -> UserID INT NOT NULL PRIMARY KEY, Enter -> FirstName VARCHAR(32) NOT NULL, Enter -> LastName VARCHAR(32) NOT NULL, Enter -> Sex CHAR(2) DEFAULT 0, Enter -> Age INT DEFAULT NULL Enter -> ); Enter Query OK, 0 rows affected (0.06 sec) # テーブルが作成されているか確認 mysql> DESCRIBE tbl_Customer; Enter +-----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+-------+ | UserID | int(11) | | PRI | 0 | | | FirstName | varchar(32) | | | | | | LastName | varchar(32) | | | | | | Sex | char(2) | YES | | 0 | | | Age | int(11) | YES | | NULL | | +-----------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
テーブルの削除
DROP TABLE
unknown
複数のテーブルを削除する場合は、削除するテーブル名をカンマ区切りで指定します。
テーブルが存在するか調べてから削除文を実行する場合は、IF EXISTSを指定します。 これがないと、テーブル名がデータベースに存在しない場合、エラーになります。 IF EXISTSを指定していれば、テーブルが存在しない場合に削除文が実行されないため、エラーが発生しません。
データベース未選択の場合は、データベース名.テーブル名
のようにテーブル名の前にデータベース名を指定してして下さい。
USE文などで既にデータベースが選択されている場合は、テーブル名の前にデータベース名の指定は不要です。
# データベース選択 mysql> USE db_User Enter # データベースからテーブルを削除 mysql> DROP TABLE IF EXISTS tbl_CustomerA; Enter Query OK, 0 rows affected (0.00 sec) # データベースから、複数のテーブルを削除 # 削除するテーブル名はカンマ(,)区切りで指定 mysql> DROP TABLE IF EXISTS tbl_CustomerA, tbl_CustomerB; Enter Query OK, 0 rows affected (0.00 sec) mysql>
テーブル構造を変更
unknown
テーブルの名前を変更
ALTER TABLE RENAME / RENAME TABLE
unknown
または
RENAME TABLE 旧テーブル名 TO 新テーブル名[, 旧テーブル名 TO 新テーブル名, ... ];
テーブルの名前を変更します。
複数のテーブル名を1文で変更したい場合は、RENAME TABLE文を使用します。
IGNOREを指定すると、ユニークキーの重複があった場合、最初のレコードを使用し、他の重複レコードを削除します。
データベース未選択の場合は、データベース名.テーブル名
のようにテーブル名の前にデータベース名を指定してして下さい。
USE文などで既にデータベースが選択されている場合は、テーブル名の前にデータベース名の指定は不要です。
# データベース選択 mysql> USE db_User Enter Database changed # テーブル名を確認 mysql> SHOW TABLES; Enter +-------------------+ | Tables_in_db_user | +-------------------+ | tbl_customera | ←「tblA」にリネーム | tbl_customerb | +-------------------+ 2 rows in set (0.00 sec) # テーブル名変更 mysql> ALTER TABLE tbl_CustomerA RENAME tblA; Enter Query OK, 0 rows affected (0.39 sec) # リネームされているか確認 mysql> SHOW TABLES; Enter +-------------------+ | Tables_in_db_user | +-------------------+ | tbl_customerb | | tbla | ←リネームされている +-------------------+ 2 rows in set (0.00 sec) mysql>
# データベース選択 mysql> USE db_UserEnter Database changed # テーブル名を確認 mysql> SHOW TABLES; Enter +-------------------+ | Tables_in_db_user | +-------------------+ | tbl_customerb | | tbla | ←「tbl_CustomerA」にリネーム +-------------------+ 2 rows in set (0.00 sec) ### テーブル名変更 mysql> RENAME TABLE tblA TO tbl_CustomerA; Enter Query OK, 0 rows affected (0.09 sec) # リネームされているかテーブル名を確認 mysql> SHOW TABLES; Enter +-------------------+ | Tables_in_db_user | +-------------------+ | tbl_customera | ←リネームされている | tbl_customerb | +-------------------+ 2 rows in set (0.00 sec) ### 複数のテーブル名を変更 mysql> RENAME TABLE Enter -> tbl_CustomerA TO tbl1, Enter -> tbl_CustomerB TO tbl2; Enter Query OK, 0 rows affected (0.43 sec) # リネームされているかテーブル名を確認 mysql> SHOW TABLES; Enter +-------------------+ | Tables_in_db_user | +-------------------+ | tbl1 | | tbl2 | +-------------------+ 2 rows in set (0.00 sec) mysql>
テーブル作成時のSQL文を表示
SHOW CREATE TABLE文
unknown
または
SHOW CREATE TABLE テーブル名\G
SQL文の末尾をセミコロンはなく、\G
にすると、実行結果を縦方向に出力します。
データベース未選択の場合は、データベース名.テーブル名
のようにテーブル名の前にデータベース名を指定してして下さい。
USE文などで既にデータベースが選択されている場合は、テーブル名の前にデータベース名の指定は不要です。
# 指定したデータベースの全テーブル情報を表示 mysql> SHOW TABLE STATUS FROM db_User; Enter +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ | Name | Type | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Create_options | Comment | +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ | tbl_customera | MyISAM | Dynamic | 4 | 28 | 112 | 4294967295 | 2048 | 0 | NULL | 2007-02-27 20:30:05 | 2007-02-27 20:30:08 | NULL | | | | tbl_customerb | MyISAM | Dynamic | 3 | 28 | 84 | 4294967295 | 2048 | 0 | NULL | 2007-02-27 20:30:05 | 2007-02-27 20:30:09 | NULL | | | +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ 2 rows in set (0.10 sec) ### ワーイルドカード使用 # テーブル名が「B」で終るテーブルの情報のみ表示 mysql> SHOW TABLE STATUS LIKE '%B'; Enter +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ | Name | Type | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Create_options | Comment | +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ | tbl_customerb | MyISAM | Dynamic | 3 | 28 | 84 | 4294967295 | 2048 | 0 | NULL | 2007-02-27 20:30:05 | 2007-02-27 20:30:09 | NULL | | | +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ 1 row in set (0.06 sec) mysql>
テーブル情報を表示
SHOW TABLE STATUS文
unknown
データベース未選択の場合は、データベース名.テーブル名
のようにテーブル名の前にデータベース名を指定してして下さい。
USE文などで既にデータベースが選択されている場合は、テーブル名の前にデータベース名の指定は不要です。
SHOW TABLE STATUS;
と入力すれば、テーブル情報が表示されます。
# 指定したデータベースの全テーブル情報を表示 mysql> SHOW TABLE STATUS FROM db_User; Enter +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ | Name | Type | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Create_options | Comment | +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ | tbl_customera | MyISAM | Dynamic | 4 | 28 | 112 | 4294967295 | 2048 | 0 | NULL | 2007-02-27 20:30:05 | 2007-02-27 20:30:08 | NULL | | | | tbl_customerb | MyISAM | Dynamic | 3 | 28 | 84 | 4294967295 | 2048 | 0 | NULL | 2007-02-27 20:30:05 | 2007-02-27 20:30:09 | NULL | | | +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ 2 rows in set (0.10 sec) ### ワーイルドカード使用 # テーブル名が「B」で終るテーブルの情報のみ表示 mysql> SHOW TABLE STATUS LIKE '%B'; Enter +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ | Name | Type | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Create_options | Comment | +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ | tbl_customerb | MyISAM | Dynamic | 3 | 28 | 84 | 4294967295 | 2048 | 0 | NULL | 2007-02-27 20:30:05 | 2007-02-27 20:30:09 | NULL | | | +---------------+--------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+----------------+---------+ 1 row in set (0.06 sec) mysql>
テーブル一覧表示
SHOW TABLES文
unknown
データベース未選択の場合は、データベース名.テーブル名
のようにテーブル名の前にデータベース名を指定してして下さい。
USE文などで既にデータベースが選択されている場合は、テーブル名の前にデータベース名の指定は不要です。
# データベース未選択の場合は、FROM データベース名を指定 mysql> SHOW TABLES FROM db_User; Enter +-------------------+ | Tables_in_db_user | +-------------------+ | tbl_customera | | tbl_customerb | +-------------------+ 2 rows in set (0.00 sec) # データベース選択 mysql>USE db_User Enter Database changed # テーブル名一覧表示 mysql> SHOW TABLES; Enter +-------------------+ | Tables_in_db_user | +-------------------+ | tbl_customera | | tbl_customerb | +-------------------+ 2 rows in set (0.00 sec) # ワイルドカード使用 # テーブル名が「B」で終わるテーブルのみ表示 mysql> SHOW TABLES LIKE'%B'; Enter +------------------------+ | Tables_in_db_user (%B) | +------------------------+ | tbl_customerb | +------------------------+ 1 row in set (0.00 sec) mysql>
このページで使用しているサンプルデータ
unknown
### データベース(db_User)作成 CREATE DATABASE IF NOT EXISTS db_User; ###データベース選択 USE db_User; ### テーブル(tbl_CustomerA)作成 CREATE TABLE tbl_CustomerA( UserID VARCHAR(4) NOT NULL PRIMARY KEY, FirstName VARCHAR(32) NOT NULL, LastName VARCHAR(32) NOT NULL, Sex CHAR(2) DEFAULT NULL, Age INTEGER DEFAULT NULL ); # データ挿入 INSERT INTO tbl_CustomerA (UserID,FirstName,LastName,Sex,Age) VALUES ('U001','花子','鈴木','f',21), ('U002','太郎','田中','m',30), ('U003','一郎','鈴木','m',45), ('U004','萌子','山口','f',18); ### テーブル(tbl_CustomerB)作成 CREATE TABLE IF NOT EXISTS db_User.tbl_CustomerB( UserID VARCHAR(4) NOT NULL PRIMARY KEY, FirstName VARCHAR(32) NOT NULL, LastName VARCHAR(32) NOT NULL, Sex CHAR(2) DEFAULT NULL, Age INTEGER DEFAULT NULL ); # データ挿入 INSERT INTO tbl_CustomerB (UserID,FirstName,LastName,Sex,Age) VALUES ('P001','まなみ','青山','f',43), ('P002','綾子','沢崎','f',36), ('P003','研二','羽山','m',45);