thumbnail 一問一答の一歩

MySQLでデータが編集できないときの直し方

UNIQUEキーの作成をする機会はほとんどなかったが、以下のエラーでUNIQUEキーの作成をしなければならない状況になったのでここにメモを行う。


This table does not contain a unique colmn. Grid edit checbox Edit,Copy and Delete featres are not avaible

問題集の補足説明から来た方のために、具体的な状況は以下に記す。

WordPressを用いて作成しているこのサイトの公開作業中の出来事である。

ローカル(テスト環境)では完成済で本番環境、つまりサーバー内にデータを移行中のときにデータのURLを本番環境のものに置き換えようとした

→データを書き換えることができずに、エラーが発生する。

データが入っているMYSQLに入っているデータを開くとデータの編集、コピー、削除機能が表示されずに、エラーメッセージが表示されており、UNIQUEカラムを作成すればよいと分かる

せっかくSQL文について勉強していたので、コードを用いたUNQUE制約の作成について説明を行う。

なお、GUIを用いている方法については以下のリンクで紹介されている。

UNIQUEカラムを作成する以前に作成しておくべきバックアップについても以下のリンク先で詳しく紹介されているので、この場での紹介は省略する。

phpMyAdminで編集・更新・削除が出来ないときの対処方法
Web制作 データベースの更新の必要があったのでphpMyAdminにログインしたところ、下記のようなエラー文が表示され、通常表示されるはずの「編集」「削除」等の項目が表示されておりませんでした。 This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available. 訳:この表にはユニークカラムがありません。 グリッド編集、チェックボックス、編集、コピー、削除機能は使用できません。 phpMyAdminがバージョンアップに伴い、ユニークキーを作成しないと、編集等の機能が使えない仕様になったようです。 ユニークキー作成の前に念のためデータベースのバックアップを作成しておきましょう。 「エクスポート」をクリック。 『エクスポート方法:簡易』、『フォーマット:SQL』、『エンコーディングへの変換:なし』を選択して、『実行』をクリック。 実行をクリックするとsqlファイルのダウンロードが始まります。以上でバックアップの作成は完了です。 続いてデータベースにユニークキーを作成してみましょう。『構造』をクリックします。 『1個のカラムを追加する』、『テーブルの先頭』、『実行』をクリック。 『名前:任意』(今回は「id」としました。)、『データ型:INT』、『インデックス:UNIQUE』、『A_I(AUTO INCREMENT):チェック』、『保存する』をクリック。 問題無ければ「テーブル ○○ は正常に変更されました」と表示されます。表示をクリックしてテーブルを確認してみましょう。 無事ユニークキーが作成され、『編集』、『コピー』、『削除』が表示されるようになりました。 以上で設定完了です。 phpMyAdminに限らず、レンタルサーバーにインストールされているサービスはセキュリティ面から日々バージョンアップが行われております。バージョンアップに伴い不具合等が発生する可能がありますので、サーバー管理者はバージョンに合わせた管理が必要になります。

https://deco8.net/phpmyadmin-error/

なお、GUIで設定している記事の補足としては以下の画面が出たときにインデックス名を何も入力しないとエラーになるので注意


インデックス名追加画面

バックアップが終わったら、SQLと書かれた部分を選択するとテキストエディタのようなものが出てくるはずである。

そのテキストエディタにSQL文を書くと、文の中見に応じたデータ処理をしてくれるので、その中にUNEQUE制約を作成するコードを記入する。


ALTER TABLE 表名 ADD CONSTRAINT UNIQUE(列名);

書き終えた後に右下の方にスクロールすると出てくる「実行」を押すとUNIQUEキーが作成され、データの作成や更新が出来るはずである。

補足.エラーコード#1067を解消する方法

以上の処理で正常終了すればUNQUEカラムは正常に作成されているが、私の場合は別なエラーも発生した。
しかし、発生したエラーについては以下のリンクに対処法が丁寧にまとめられれいたのでリンクを貼るだけにとどめる

問題ページに戻る