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

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

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

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

Q&A

解決済

4回答

465閲覧

MySQLのテーブルに設定されているユニークキーの項目を追加する方法はないのでしょうか?

takujiji

総合スコア24

MySQL

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

0グッド

0クリップ

投稿2019/03/11 06:00

SQL

1create table test ( 2 id int(11) not null auto_increment, 3 test1 int(11) not null, 4 test2 int(11) not null, 5 test3 int(11) not null, 6 test4 int(11) not null, 7 PRIMARY KEY (`id`), 8 UNIQUE KEY `test_test` (`test1`,`test2`) 9) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 10

上記のようなテーブルを作成したとします。

create時に、ユニークキーとして登録したカラムは、test1,test2でした。

ですが、「ユニークキーとして test3 も追加したい」という場合、下記のようにユニークキーを削除し、改めてカラムを指定して登録するという手順を踏むことで対応が可能なことが分かりました。

SQL

1alter table test drop index `test_test`; 2alter table test add unique `test_test` (`test1`,`test2`,`test3`); 3

ですが、一旦削除せずに、1回のコマンドで項目を追加する方法はあるのでしょうか?

SQL

1alter table test change unique `test_test` (`test1`,`test2`,`test3`,`test4`); 2alter table test update unique `test_test` (`test1`,`test2`,`test3`,`test4`);

上記の方法はエラーになりましたが、こんな感じのコマンドがあってもいいんじゃないかと思ったのですが、「そんなものはない!」と分かればそれはそれでスッキリするのですが...

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

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

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

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

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

guest

回答4

0

ベストアンサー

「そんなものはない!」

ですが、dropとaddは一文で処理できます

SQL

1create table test (id int primary key,test1 int,test2 int, test3 int,unique key `test_test` (`test1`,`test2`)); 2alter table test drop index `test_test`, add unique `test_test` (`test1`,`test2`,`test3`);

投稿2019/03/11 06:11

編集2019/03/11 06:15
yambejp

総合スコア114769

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

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

yambejp

2019/03/11 06:15

念の為createでつくるところから書いておきました
takujiji

2019/03/11 06:39

ありがとうございました。スッキリしました! 今回の変更は、実稼働中のデータベースに反映させる変更ですので、1行で書いて実行するほうが不具合が発生する可能性は減りますね。 助かりました!
guest

0

マニュアル見ますと

そもそもUPDATEはないですし、相当であるMODIFYも提示のCHANGEも対象はCOLUMNなのでdropしてaddしかないのではないでしょうか。

投稿2019/03/11 06:10

m.ts10806

総合スコア80850

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

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

maisumakun

2019/03/11 06:12

MySQL 8.0ではインデックスにVISIBLEとINVISIBLEがあって、その変更だけはALTER INDEXできるとのことです(MySQL 8.0を実用したこともないので、今回初めて知りましたが)。
m.ts10806

2019/03/11 06:14

8.0私も実用したことないので勉強になりました。 質問者さんの利用バージョン確認は必要ですね…
takujiji

2019/03/11 06:36

ありがとうございました。スッキリしました! 私が使っている MySQLは 5.6ですので、今回は使えませんでしたが、8になるとまた新しい記述方法があるということで、8を使うときにはまた改めて勉強したいと思います。
m.ts10806

2019/03/11 06:37

8になっても今回の要件を満たせるわけでもないのでそれとは別で「こんな機能もあるのか」くらいにとどめておいてもらえたらと。
takujiji

2019/03/11 06:44

ありがとうございます。5.6も使いこなせていませんが、8になったらこんなに便利なのか、と思えるようになるよう勉強していきます!
guest

0

「そんなものはない!」と分かればそれはそれでスッキリするのですが...

はい、そのとおりです。

こちらにMySQLのALTER TABLEのシンタックスがありますが、ALTER INDEXで可能なのはVISIBLEINVISIBLEを切り替えることだけです。

投稿2019/03/11 06:10

編集2019/03/11 06:11
maisumakun

総合スコア145183

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

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

takujiji

2019/03/11 06:34

ありがとうございました。スッキリしました! 私が使っている MySQLは 5.6ですので。 ただ、8からは新しい設定方法が追加されるようですので、8を使うときにはまた改めて勉強したいと思います。
guest

0

そんなものはない!」

です。

投稿2019/03/11 06:08

Orlofsky

総合スコア16415

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

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

takujiji

2019/03/11 06:30

ありがとうございました。スッキリしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問