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

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

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

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

2回答

3851閲覧

MariaDBでAUTO_INCREMENT値を最大値以下にできる?

mocchi

総合スコア15

MySQL

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

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2017/05/10 01:51

MariaDB 10.2.2を使用しています。InnoDB

AUTO_INCREMENTを使用しているとき
ALTER TABLE <tablename> AUTO_INCREMENT = 13;
で変更できますがこれは最大値より小さく変更はできません。

ググると
ALTER TABLE<tablename> ALGORITHM= COPY, AUTO_INCREMENT= 13;
というような記述も見られますができませんでした。

仕様に合わなければ自分でトリガで自動採番したりするべきだと思いますが
AUTO_INCREMENTを使用したまま強引にでも最大値以下にする方法というのは存在しないのでしょうか?

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

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

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

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

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

yambejp

2017/05/10 02:09

最大値の定義は何でしょう?すでに13より大きな値が設定されていているのに13始まりにするということでしょうか?抜け番をうめるのでしょうか?であれば意味が無いのでやめたほうがいいと思います
mocchi

2017/05/10 02:31

たとえば仕様上大きな値を特別な値として持っているDBを移行せざるを得ない場合などを想定しています。あくまで、よくないというのは重々承知の上でそういうことができるのかどうかという質問になります
maisumakun

2017/05/10 03:16

イレギュラーな値を「マイナスの側に」入れることは時折やってました。
guest

回答2

0

ベストアンサー

実質的に不可能です。

公式FAQによれば、AUTO_INCREMENTを動かした場合も、次に入る値は「AUTO_INCREMENT値と、既存の最大値より1大きな値のうち大きい方」となっていますので、仮にAUTO_INCREMENTを小さい値に戻せたとしても、それは無視されます

投稿2017/05/10 02:30

maisumakun

総合スコア145121

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

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

mocchi

2017/05/10 03:44

maxをとるというが必ず行われるのですね。やはり無理ですか。何か設定でもあればと思ったのですが
guest

0

移行時をそうていしているのであれば一旦あらたらなテーブルのauto_increment属性を付けずに
流し込んで、移行後にユニークなintのカラムだということを担保しておいてあらため
auto_incrementの属性をつければよいのでは?
もちろんその際も最大値を下回るauto_incrementの指定はありえませんけどね

ちなみにユニークな数値の振り直しは以下でできます

SQL

1create table tbl (id int unique,data varchar(10)); 2insert into tbl values(1,'a'),(2,'b'),(4,'c'),(5,'d'),(10,'e'); 3update tbl set id=(select @a:=@a+1 from (select @a:=0) as dummy) order by id asc; 4

投稿2017/05/10 03:10

yambejp

総合スコア114572

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

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

mocchi

2017/05/10 03:40

id値は変えたくないのでidを指定して流し込むのですが、たとえばidが9999とかが特別な値(最大9999)で1~3までしか使ってないときなど無理ですよね。4から使ってほしいが..
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問