create table table1 (
a tinyint unsigned not null,
b tinyint unsigned not null,
unique index_table1 ( a, b )
);
insert into table1 values('1','1');
insert into table1 values('1','2');
update table1 set b = b+1 where a = '1';
とすると、
ERROR 1062: Duplicate entry '1-2' for key 1
とエラーになってしまいます。
どうやら unique の制約に引っかかっているみたいです。
結果としては
1,2
1,3
になればいいのですが、一個一個bが多い順番にSQLを発行するか、unique 制約を外すしかないんでしょうか?
(面倒なので、一発でやりたいのです)
No.2ベストアンサー
- 回答日時:
そもそもが、unique属性をつけているフィールドを
インクリメントするという運用方法がまちがっているのでは?
unique値は入力時に仕様が確定していて当然ですので
あとから変更して値がかぶる可能性があるような作り方は
するべきではありません。
もし非常にイレギュラーな処理として、今回の作業が発生したという
のであれば、ご自身でも指摘されている通り、uniqueをはずして
変更してからuniqueをつけなおすというやり方が妥当でしょう。
回答ありがとうございます。
やはり仕様を考え直したほうがいいのでしょうか。
今回のことは、ユーザーにテーブルをいじらせるためのものです。
<table>
<tr><td>1-1</td><td>1-2</td></tr>
<tr><td>2-1</td><td>2-2</td></tr>
</table>
とあり、1-1には「あ」という文字があるとします。
ユーザーには一列目などにセルを入れることができるようにすることを目的にしています。
<table>
<tr><td>1-1</td><td>1-2</td></tr>
<tr><td>x-1</td><td>x-2</td></tr>
<tr><td>2-1</td><td>2-2</td></tr>
</table>
このような挿入を許可するために、元の2-1、2-2を3-1、3-2として値を変更しようとして質問のようなものになりました。
このため、同じ値に書き込ませないためにunique属性をつけています。
多分仕様的に難しいのかもしれませんね。
とりあえず、移動するものを一つ一つ指定するような形では動くようにしましたが、
他に良いやり方がありましたら教えてください。
よろしくお願いします。
No.3
- 回答日時:
MySQL は UPDATE でも ORDER BY 句が使用できます。
バージョン3.23.38のドキュメントにも記述されているので、質問者さんの環境でも使用できるのでは。
回答ありがとうございます。
update table1 set b = b+1 where a = '1' order by b desc;
として試しましたが、
ERROR 1064: You have an error in your SQL syntax near 'order by `b` desc' at line 1
とエラーが出てしまいました。
できるかと思ったのに残念です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLについて教えて下さい with(...
-
INSERT文でフィールドの1つだ...
-
count集計の結果が0の場合でも...
-
'internal' のシステム メモリ...
-
MySQLで複数のSELECT文を1文に...
-
SQL server改行コード
-
SQLでの計算結果がおかしい
-
Unionの結果全体をOrder By し...
-
SQLServerでの切り上げ処理
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
全角文字を含む行を検索
-
SELECT 文 GROUP での1件目を...
-
エクセルの関数について教えて...
-
SQLで特定の項目の重複のみを排...
-
VIEWの元のテーブルのindexって...
-
JANコードとPOSコードは同じ?
-
重複していないレコードの抽出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INSERT文でフィールドの1つだ...
-
SQLについて教えて下さい with(...
-
count集計の結果が0の場合でも...
-
SQLでフィールドの順番を変更し...
-
'internal' のシステム メモリ...
-
グループ毎の最大値を持つデー...
-
SQL server改行コード
-
Unionの結果全体をOrder By し...
-
SQL Server 2005 Express で CD...
-
MySQLで複数のSELECT文を1文に...
-
JOINで1つのテーブルに空白があ...
-
自作関数の方がパフォーマンス...
-
「重複を間引いた数」をcountし...
-
効率の良い検索方法が分かりま...
-
SQLを作ったのですがうまくいき...
-
SQLでの計算結果がおかしい
-
SELECTを含むUPDATEについて
-
Access 複数キーワード検索クエ...
-
複数テーブルからデータを取り...
-
uniqueキーをupdateで+1するとE...
おすすめ情報