- ベストアンサー
途中からプライマリーキーを作成
プログラム初心者です テーブルに途中からプライマリーキーを作成することはできますか? idとゆうカラムを追加で作成して主キーにしようとしたのですがエラーがでます idはint型でテーブルには100行あるのですが全部0になっているのが原因かもしれません このidカラムに1~100まで数字を与える方法はありますか? よろしくお願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ざっと調べてみました どうやらphpMyAdminのバージョンによる仕様のようですね 一度idカラムを削除し、phpMyAdminの構造タブから 1個のカラムを追加する(追加位置は先頭?適当に)として実行し 名前をid、データ型をintとし、nullにチェックをせず、 A_I(オートインクリメント)にチェックをいれた上で保存してください (たぶんその時点で主キー属性がついていると思います)
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>やってみたのですが全部1になってしまいました はて?再現しないです ちなみにこんな感じでやっても同じ? create table tbl (id int,data varchar(20)); insert into tbl(data) values('v1'),('v2'),('v3'),('v4'),('v5'); select * from tbl; →idがnullになっているはず update tbl set id=@a:=coalesce(@a+1,1); select * from tbl; →idが1からの連番になっているはず
お礼
そのコードでそのままテーブルを作ってidが全てnullを確認してからupdateしてみると こちらの結果ではidが全部1になってしまいました 上のほうに注意書きがでてしまいました 多分idが全部同じでphpmyadminからidを特定できないのでupdateができませんとゆう意味だと思います ↓ 「このテーブルには、一意の列が含まれていません。グリッド編集、チェックボックス、編集、コピー、および削除機能は使用できません。」
- yambejp
- ベストアンサー率51% (3827/7415)
プライマリキーはユニークな値でかつnot nullでなくてはいけません tblのidに1から順番の数値を振る方法はこんな感じ (強制で書き変わるので運用には注意) update tbl set id=@a:=coalesce(@a+1,1);
お礼
回答ありがとうございます やってみたのですが全部1になってしまいました。うーん
お礼
削除して追加するだけでオートインクリメントがついてました お手数かけました。途中からも自動的につけられるとは知らなかったです。。。 ありがとうございました