列itemID
にMySQLのテーブルを作成しました。テーブルを作成した後、この列をAUTOINCREMENT
に変更します。 ALTERステートメントを使用してこれをどのように行うことができますか?
テーブル定義:
ALLITEMS (itemid int(10) unsigned, itemname varchar(50))
次のコードを使用していますが、スローされていますエラー:構文が正しくありません。
ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT;
CREATE TABLE ALLITEMS(
itemid INT(10)UNSIGNED,
itemname VARCHAR(50)
);
ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;
DESC ALLITEMS;
INSERT INTO ALLITEMS(itemname)
VALUES
('Apple'),
('Orange'),
('Banana');
SELECT
*
FROM
ALLITEMS;
以前にもCHANGE
およびMODIFY
キーワードと混同されていました。
ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;
ALTER TABLE ALLITEMS MODIFY itemid INT(5);
そこにいる間に、AUTO_INCREMENT
は事前定義された番号で開始することもできます。
ALTER TABLE tbl AUTO_INCREMENT = 100;
構文:
ALTER TABLE `table1` CHANGE `itemId` `itemId` INT( 11 ) NOT NULL AUTO_INCREMENT
ただし、テーブルには定義済みのキー(itemIdの主キーなど)が必要です。
ALTER TABLE `ALLITEMS`
CHANGE COLUMN `itemid` `itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
AUTO_INCREMENT PRIMARY KEYをOPの既存のテーブルに追加するための基本的な構文:
ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY;
または、新しいテーブルの場合、 ドキュメント の構文例を次に示します。
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
トラップと注意事項:
AUTO_INCREMENT
列にはインデックスが必要です。 (通常、これをプライマリキーにしたいが、MySQLはこれを要求しない。)AUTO_INCREMENT
列をUNSIGNED
にすることをお勧めします。ドキュメントから:可能であれば、UNSIGNED属性を使用してより大きな範囲を許可します。
CHANGE
句またはMODIFY
句を使用して列AUTO_INCREMENT
を作成する場合(または実際にwheneverCHANGE
句またはMODIFY
句を使用する場合)、すべての修飾子を含めるよう注意する必要がありますNOT NULL
やUNSIGNED
など、SHOW CREATE TABLE yourtable
を呼び出すときにテーブル定義に表示される列の場合。それ以外の場合、これらの修飾子は失われます。ALTER TABLE allitems
CHANGE itemid itemid INT(10) AUTO_INCREMENT;
ALTER TABLE tblcatalog
CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT FIRST;