カラム(フィールド):データ定義(SQL文)主キーの設定・削除、AUTO_ICREMENT属性の設定
- 主キー設定〔ALTER TABLE ADD PRIMARY KEY 〕
- 主キー削除〔ALTER TABLE DROP PRIMARY KEY〕
- カラムにAUTO_INCREMENT属性を設定
- AUTO_INCREMENT属性フィールドの開始番号を設定
主キー設定
ALTER TABLE ADD PRIMARY KEY
unknown
ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名);
指定したカラムを主キー(PRIMARY KEY)に設定します。
# tbl_Addressテーブルのフィールドを確認 mysql> DESCRIBE tbl_Address; Enter +--------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+-------+ | UserID | int(11) | YES | | NULL | | →主キーに設定 | zip | int(11) | YES | | NULL | | | Ken | varchar(5) | YES | | NULL | | | addr | varchar(200) | YES | | NULL | | +--------+--------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) # UserIDフィールドを主キーに設定 mysql> ALTER TABLE tbl_Address ADD PRIMARY KEY(UserID); Enter Query OK, 0 rows affected (0.53 sec) Records: 0 Duplicates: 0 Warnings: 0 # 主キーが設定されているか確認 mysql> DESCRIBE tbl_Address; Enter +--------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+-------+ | UserID | int(11) | | PRI | 0 | | | zip | int(11) | YES | | NULL | | | Ken | varchar(5) | YES | | NULL | | | addr | varchar(200) | YES | | NULL | | +--------+--------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
主キー削除
ALTER TABLE DROP PRIMARY KEY
unknown
ALTER TABLE テーブル名 DROP PRIMARY KEY;
指定したテーブルから主キーを削除します。フィールドが削除されるわけではありません。
# tbl_Addressテーブルのフィールドを確認 mysql> DESCRIBE tbl_Address; Enter +--------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+-------+ | UserID | int(11) | | PRI | 0 | | →主キーを削除 | zip | int(11) | YES | | NULL | | | Ken | varchar(5) | YES | | NULL | | | addr | varchar(200) | YES | | NULL | | +--------+--------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> ALTER TABLE tbl_Address DROP PRIMARY KEY; Enter Query OK, 0 rows affected (0.15 sec) Records: 0 Duplicates: 0 Warnings: 0 # 主キーが削除されているか確認 mysql> DESCRIBE tbl_Address; Enter +--------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+-------+ | UserID | int(11) | | | 0 | | | zip | int(11) | YES | | NULL | | | Ken | varchar(5) | YES | | NULL | | | addr | varchar(200) | YES | | NULL | | +--------+--------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)
カラムにAUTO_INCREMENT属性を設定
unknown
ALTER [IGNORE] TABLE テーブル名 MODIFY [COLUMN] create_definition [FIRST | AFTER カラム名]
または
ALTER TABLE テーブル名 MODIFY カラム名 INT AUTO_INCREMENT;
または
ALTER TABLE テーブル名 MODIFY カラム名 INT AUTO_INCREMENT;
テーブル作成時にフィールドのオプションで指定するのを忘れた場合などは、後付でも 以下のようにすれば、主キーフィールドにAUTO_INCREMENT属性を設定できます。
ただし、AUTO_INCREMENT属性は、主キーを設定したカラムにしか設定できません。 主キーの設定をしていない場合は、主キーの設定をしてからAUTO_INCREMENT属性を設定する必要があります。
TEXT型のフィールドは、AUTO_INCREMENT属性の設定不可。
# tbl_Addressテーブルのフィールドを確認 mysql> DESCRIBE tbl_Address; Enter +--------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+-------+ | UserID | int(11) | | PRI | 0 | | →AUTO_INCREMENT属性を設定 | Zip | varchar(8) | YES | | NULL | | | Ken | varchar(5) | YES | | NULL | | | Addr | varchar(200) | YES | | NULL | | +--------+--------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) # 主キーであるUserIDフィールドにauto_increment属性を設定 mysql> ALTER TABLE tbl_Address MODIFY UserID INT auto_increment; Enter Query OK, 0 rows affected (0.13 sec) Records: 0 Duplicates: 0 Warnings: 0 # auto_increment属性が設定されたか確認 mysql> DESCRIBE tbl_Address; Enter +--------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+----------------+ | UserID | int(11) | | PRI | NULL | auto_increment | | Zip | varchar(8) | YES | | NULL | | | Ken | varchar(5) | YES | | NULL | | | Addr | varchar(200) | YES | | NULL | | +--------+--------------+------+-----+---------+----------------+ 4 rows in set (0.01 sec) # tbl_Addressテーブルにデータを挿入 mysql> INSERT INTO tbl_Address (Zip,Ken,Addr) VALUES Enter -> (2140010,'神奈川県','川崎市川崎区川崎1-2-3'), Enter -> (1120022,'東京都','文京区文京2-3-4'); Enter Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 2 # tbl_Addressテーブルの内容を確認 # UserIDフィールドは自動採番された値が格納されているはずです mysql> SELECT * FROM tbl_Address; Enter +--------+---------+-------+-----------------------+ | UserID | Zip | Ken | Addr | +--------+---------+-------+-----------------------+ | 1 | 2140010 | 神奈・| 川崎市川崎区川崎1-2-3 | | 2 | 1120022 | 東京・| 文京区文京2-3-4 | +--------+---------+-------+-----------------------+ 2 rows in set (0.00 sec)
AUTO_INCREMENT属性フィールドの開始番号を設定
unknown
ALTER TABLE テーブル名 AUTO_INCREMENT=数値;
AUTO_INCREMENT属性は最後にレコードが挿入された順に、1から自動採番していきますが、 任意の数値を開始番号に指定することができます。
# tbl_Addressテーブルの内容を確認 mysql> SELECT * FROM tbl_Address; Enter +--------+---------+-------+-----------------------+ | UserID | Zip | Ken | Addr | +--------+---------+-------+-----------------------+ | 1 | 2140010 | 神奈・| 川崎市川崎区川崎1-2-3 | | 2 | 1120022 | 東京・| 文京区文京2-3-4 | +--------+---------+-------+-----------------------+ 2 rows in set (0.00 sec) # AUTO_INCREMENTの値を 100 に設定 mysql> ALTER TABLE tbl_Address AUTO_INCREMENT=100; Enter Query OK, 2 rows affected (0.34 sec) Records: 2 Duplicates: 0 Warnings: 0 #新しく2件のデータをtbl_Addressテーブルに挿入 mysql> INSERT INTO tbl_Address (Zip,Ken,Addr) VALUES Enter -> (1550031,'東京都','世田谷区下北1-1-1'), Enter -> (1600023,'東京都','新宿区西新宿9-8-7'); Enter Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 2 # AUTO_INCREMENT属性を持つUserIDの値が100から採番されているか確認 mysql> SELECT * FROM tbl_Address; Enter +--------+---------+-------+-----------------------+ | UserID | Zip | Ken | Addr | +--------+---------+-------+-----------------------+ | 1 | 2140010 | 神奈・| 川崎市川崎区川崎1-2-3 | | 2 | 1120022 | 東京・| 文京区文京2-3-4 | | 100 | 1550031 | 東京・| 世田谷区下北1-1-1 | | 101 | 1600023 | 東京・| 新宿区西新宿9-8-7 | +--------+---------+-------+-----------------------+ 4 rows in set (0.00 sec)