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

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

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

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

5277閲覧

MYSQLにて文字列とauto_incrementを結合して自動採番できるようにしたい

hkok96

総合スコア3

MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2022/01/04 01:49

1.前提・実現したいこと
文字列と連番を組み合わせてできる自動採番の値をinsertしたいです。
連番をauto_incrementで設定したのですがエラーが出ていて困っています。

FYYYYYMMXXXX
F:固定
YYYYMM:データ登録時の年月6桁
XXX:連番
でF202201001,F202201002のような値をinsertしたいです。

2.発生している問題・エラーメッセージ
文字列結合をしたいので、concatを使いましたが、auto_incrementの箇所でエラーで発生しています。

Error Code: 1054. Unknown column 'auto_increment' in 'field list'

3.該当のソースコード

INSERT INTO Fee (FeeCd,CorpCd,FeeName) VALUES (CONCAT('F',DATE_FORMAT(NOW(),'%Y/%m'),auto_increment),'0000900002','aaa');

4.自分で調べたことや試したこと

select CONCAT('F',DATE_FORMAT(NOW(),'%Y/%m'),auto_increment); ```したが、 ```ここに言語を入力 Error Code: 1054. Unknown column 'auto_increment' in 'field list' ```のエラーが表示されました。 連番をauto_incrementで設定しているのが問題だと思うのですが、他にどんな方法で連番を設定していいかわからないので質問しました。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/01/04 02:03

何に使うのですか? 目的が分かるとその目的を果たすための別の提案(もっといい案かも)が出てくるかもしれません。
hkok96

2022/01/04 02:07

excelにデータを入力すると、insert文を作成して、それをmysqlに貼ってそのままinsertするという使い方をします。連番にしたいのは、DBに既にデータが入っていたことを想定しています。
退会済みユーザー

退会済みユーザー

2022/01/04 02:29

> 連番にしたいのは、DBに既にデータが入っていたことを想定しています。 せっかく返答いただいたのに何ですがその意味が分かりません。 INSERT する際、既存のレコードにダブりがあるが(FYYYYYMM もダブっている)、ダブっていても INSERT は行うので既存のレコードと識別できるよう XXXX を追加して FYYYYYMMXXXX という形にして 、その XXXX を AUTO_INCREMENT で採番した値にしたい? 主キーは必ず違うので識別できると思うのですが? 主キーを AUTO_INCREMENT にすれば一石二鳥という感じですけど。 もしくは FYYYYYMMXXXX というのを一つのフィールドに入れるのではなく、FYYYYYMM 用と XXXX 用の 2 つのフィールドを使って、 XXXX を AUTO_INCREMENT で採番するというのではダメ?
hkok96

2022/01/04 06:42 編集

>せっかく返答いただいたのに何ですがその意味が分かりません。 説明不足ですみません。 例えば既にF2022010001がDB上にあるけれど、誤ってF202201001をinsertしてしまうことがないように、FYYYYYMMXXXは被らないようにという意味です。 excelのROW関数で連番を設定しようとした際に、必ずしも001から始まるわけではないと上司に言われたことが残っていていたのですがうまく言語化できていませんでした。 >もしくは FYYYYYMMXXXX というのを一つのフィールドに入れるのではなく、FYYYYYMM 用と XXXX 用の 2 つのフィールドを使って、 XXXX を AUTO_INCREMENT で採番するというのではダメ? データベースに関してはすでにできていて、Excelで値を入力してinsert文をはけるようにするのが依頼された仕事なので、私の立場上難しいと思います。ただ、「FYYYYYMM 用と XXXX 用の 2 つのフィールドを使って、 XXXX を AUTO_INCREMENT で採番する」ならイメージがついてできそうだと思いました。ありがとうございます。
退会済みユーザー

退会済みユーザー

2022/01/04 07:18

> 例えば既にF2022010001がDB上にあるけれど、誤ってF202201001をinsertしてしまうことがないように、FYYYYYMMXXXは被らないようにという意味です。 年月だけでなく、年月日時分秒.ミリ秒 まで含めて FYYYYMMDDhhmmss.sss としてみるとかはいかがですか?
hkok96

2022/01/04 07:22

>年月だけでなく、年月日時分秒.ミリ秒 まで含めて FYYYYMMDDhhmmss.sss としてみるとかはいかがですか? 確かにその方法もありますね、ただ定義書にはFYYYYMMXXXでとあるのでFYYYYMMDDhhmmss.sssでやるのは時間のある時に試してみようと思います。 ありがとうございます。
guest

回答2

0

基本的にRDBに連番という考え方はありません
auto_incrementを利用するなら1から始まる3桁のデータであれば999個しか作成できません
(日付がかわってもインクリメントされつづける)

参考

SQL

1create table tbl(id int(3) unsigned zerofill primary key,val varchar(10),hoge varchar(20) as (concat('F',date_format(curdate(),'%Y%m'),id))); 2insert into tbl(id,val) values 3(1,'aaa'),(2,'bbb'),(3,'ccc');

投稿2022/01/04 02:13

編集2022/01/04 02:16
yambejp

総合スコア116724

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

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

0

ベストアンサー

そもそもカラムの設定なのでインサート時に取得してどうたらというのはできません。エラーはカラムのような指定の仕方をしているためのものです。

インサート実行後にlast_insert_id()を実行することで取得できます。
これでupdateするか、別途シーケンス管理テーブルを作って対応してください。

投稿2022/01/04 01:58

m.ts10806

総合スコア80875

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

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

hkok96

2022/01/04 02:07

ありがとうございます
m.ts10806

2022/01/04 02:21

結局どのように解決とされたのでしょう。フィードバックください
hkok96

2022/01/04 07:15

excelのセルに値を入力すると、insert文が生成されるものを作成していて、上司に確認したところ、excelのセルを動的に入力して、insert文はセルを入力する程度でいいとのことでした。 そのため、セルの動的入力をマクロでやろうと考えています。 last_insert_idに関しては全く知らなかったので勉強になりました。ありがとうございます。
m.ts10806

2022/01/04 07:26

次からで結構なのでその前提や背景は書かれたほうが良いです。 やりたいことが必ずしも望ましい対応とは限りませんし
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問