質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

5077閲覧

ERROR 1062 (23000): Duplicate entry '' for key 'users.user_id'を解決したい

suika11

総合スコア166

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2022/02/16 00:22

編集2022/02/16 00:47

前提・実現したいこと

すでに存在するusersテーブルに下記のクエリを発行するとタイトルのエラーメッセージが返ってきます
カラムを追加するためにはどうしたらいいでしょうか

Mysql

1alter table users add user_id varchar(15) not null unique;

発生している問題・エラーメッセージ

ERROR 1062 (23000): Duplicate entry '' for key 'users.user_id'

該当のソースコード

users.table

1+-------------------+-----------------+------+-----+---------+----------------+ 2| Field | Type | Null | Key | Default | Extra | 3+-------------------+-----------------+------+-----+---------+----------------+ 4| id | bigint unsigned | NO | PRI | NULL | auto_increment | 5| name | varchar(255) | NO | | NULL | | 6| email | varchar(255) | NO | UNI | NULL | | 7| email_verified_at | timestamp | YES | | NULL | | 8| password | varchar(255) | NO | | NULL | | 9| remember_token | varchar(100) | YES | | NULL | | 10| icon | text | YES | | NULL | | 11| profile | text | YES | | NULL | | 12| created_at | timestamp | YES | | NULL | | 13| updated_at | timestamp | YES | | NULL | | 14+-------------------+-----------------+------+-----+---------+----------------+

補足情報(FW/ツールのバージョンなど)

MySQL 8.0.28

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/02/16 00:38

useridとuser_idはどのように使い分けるのでしょうか
suika11

2022/02/16 00:47

useridカラムはalter table文の練習で追加した名残でした。今回全く関係ありません。useridカラムを削除し質問文も修正します
m.ts10806

2022/02/16 01:28

データが存在するテーブルへの追加って結構悪手だと思います。 特にユニーク制約つけようとしてるので。外部キーも? いずれにしてもデータの関係性整理されたほうが良いのでは
suika11

2022/02/16 02:24

DB設計など考えず作成してしまいました。調べつつ一度整理してみます。ありがとうございます。
guest

回答1

0

ベストアンサー

alter table users add user_id varchar(15) not null unique;
は、テーブル users にカラム user_id を varchar(15) で追加しようとしていますよね。

もしかして複数行レコードが存在していますか?

not null unique の指定がついていると、
追加された user_id を既存のレコードにも適用しようとしますが、
default 値の指定がないため NULL を詰めようとして、
すでに存在するレコード上で複数のレコード上に同じ値(NULL)が存在するためにエラーとなっています。

ところで、すでにカラム userid が存在するようですが、
カラムの名称変更をしたいのでしょうか。
ALTER TABLE tbl_name RENAME COLUMN old_col_name TO new_col_name
とすることでできそうですが。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.1.9 ALTER TABLE ステートメント

より汎用的にすでにレコードが存在する状況でカラムの変更を加えるには工夫が必要になります。
例えば、

  1. 番号リスト 一旦テーブルを名称変更する。
  2. 新テーブルを作る。
  3. 旧テーブルに対してSELECT文で取得した結果を元にテーブルに挿入する、「INSERT ... SELECT ステートメント」を活用してデータを救済。

MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.2.6.1 INSERT ... SELECT ステートメント
っていう方法もありますので、ご検討ください。

投稿2022/02/16 00:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suika11

2022/02/16 01:49

ありがとうございます。なんとか解決できました。また何かありましたらよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問