プロが教えるわが家の防犯対策術!

my_itemsテーブルのIDにAUTO_INCREMENT
を追加ができるかで質問します。
現在のMySQLのテーブルの構造は以下です。
mysql> SHOW CREATE TABLE my_items; my_items | CREATE TABLE `my_items` (
`id` int(11) NOT NULL DEFAULT '0',
`item_name` text NOT NULL,
`price` int(11) NOT NULL DEFAULT '0',
`keyword` int(11) NOT NULL,
PRIMARY KEY (`price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
------------------------------------------------------
以上です。

質問1
`id` int(11) NOT NULL DEFAULT '0',
にAUTO_INCREMENTを追加する場合
どんなコマンドなりますか?
もしかして 以下で正解でしょうか?
my_items | CREATE TABLE `my_items` (
`id` int(11) NOT NULL AUTO_INCREMENT DEFAULT '0',
`item_name` text NOT NULL,
`price` int(11) NOT NULL DEFAULT '0',
`keyword` int(11) NOT NULL,
PRIMARY KEY (`price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

質問2
質問1が正解だった場合
追加したらTABLE my_items; のテーブルデータは
消えてなくなりますか?

以上よろしくお願いいたします。

A 回答 (1件)

先頭の


my_items |
は表示されたゴミですかね?

(1)idのDEFAULT句と削除
(2)idにAUTO_INCREMENTを指定
(3)PRIMARY KEYはpriceでなく、idにする。

DROP TABLE(データも消える)してから、

CREATE TABLE `my_items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`item_name` text NOT NULL,
`price` int(11) NOT NULL DEFAULT '0',
`keyword` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4;

ALTER TABLEでデータを格納した状態で制約の追加や削除も行えますが、制約に違反する行が存在するとエラーになります。
使い始めたばかりのようなので、DROP TABLEして上記のCREATE TABLEを実行した方がいいと思います。
    • good
    • 1
この回答へのお礼

ありがとうございます。
やっぱりオートインクリメントないみたいです。
phpMyAdmin でAI指定のオートインクリメント
を指定したつもりだったのですが反映されませんでした。
最初から100%無理芸なので
mysql> desc my_items;
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| id | int(11) | NO | | 0 | |
| item_name | text | NO | | NULL | |
| price | int(11) | NO | PRI | 0 | |
| keyword | int(11) | NO | | NULL | |
4 rows in set (0.01 sec)

Aンス:DROP TABLE(データも消える)してから、
 なるほどなるほど

やっぱり追加はできないみたいなので全部消してから
じゃないとダメですよね!

mysql> DROP TABLE my_items;
Query OK, 0 rows affected (0.06 sec)

mysql> CREATE TABLE `my_items` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> `item_name` text NOT NULL,
-> `price` int(11) NOT NULL DEFAULT '0',
-> `keyword` int(11) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB
-> DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.03 sec)

お礼日時:2023/01/04 03:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す