
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で質問しましょう!
似たような質問が見つかりました
- PHP php エラー 2 2022/10/23 16:43
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- MySQL MYSQL エラー 2 2022/10/18 11:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
count集計の結果が0の場合でも...
-
SQLでフィールドの順番を変更し...
-
JOINで1つのテーブルに空白があ...
-
MySQLで複数のSELECT文を1文に...
-
差し込み後、元データを変更し...
-
for whichの使い方
-
エクセルの関数について教えて...
-
EXISTSを使ったDELETE文
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
フィルターかけた後、重複を除...
-
誰か教えてください
-
python random.choice について
-
テーブルの内容とテーブルのカ...
-
SQLServerで文字列の末尾からあ...
-
スクリーンセイバー
-
ストアド内で動的にSQLを作る際...
-
日付について
-
Outlook 送受信エラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INSERT文でフィールドの1つだ...
-
count集計の結果が0の場合でも...
-
SQLでフィールドの順番を変更し...
-
JOINで1つのテーブルに空白があ...
-
SQLについて教えて下さい with(...
-
'internal' のシステム メモリ...
-
SQL server改行コード
-
グループ毎の最大値を持つデー...
-
SQLServerでの切り上げ処理
-
「重複を間引いた数」をcountし...
-
SQL Server 2005 Express で CD...
-
自作関数の方がパフォーマンス...
-
uniqueキーをupdateで+1するとE...
-
DB2でのロック
-
効率の良い検索方法が分かりま...
-
MySQLで複数のSELECT文を1文に...
-
結合? コピー? 初歩的な質...
-
外部結合での"OR"文
-
SQLでの計算結果がおかしい
-
★Mysql ある日程から10日後以降...
おすすめ情報