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

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

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

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

Q&A

解決済

1回答

3581閲覧

別テーブルを参照してデフォルト値を挿入する

Take_it

総合スコア357

MySQL

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

0グッド

1クリップ

投稿2020/11/10 00:05

既存のテーブルにカラムを追加する必要がありますが、どのような手法を取るべきか。

以下の2つの既存テーブルがあります。

MySQL

1CREATE TABLE `単価` ( 2 `適用日` date NOT NULL, 3 `製品グループ名` varchar(30) NOT NULL, 4 `製品コード` char(20) NOT NULL, 5 `金額` bigint(20) NOT NULL, 6 `登録日` date NOT NULL 7) ENGINE=InnoDB DEFAULT CHARSET=utf8; 8 9ALTER TABLE `単価` 10 ADD UNIQUE KEY `UNI` (`適用日`,`製品グループ名`,`製品コード`);

MySQL

1CREATE TABLE `グループ管理` ( 2 `製品グループ名` varchar(30) NOT NULL, 3 `請求書ナンバー` int(11) NOT NULL, 4 `生産ラインID` int(11) NOT NULL 5) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6COMMIT;

「単価」のほうのテーブルで、適用日・製品グループ名・製品コードの3者が一致する重複を受け付けないようにしていますが、現状これだと不十分です。
製品コードと適用日が同一で、製品グループ名が異なる→登録可能
実際には、複数の製品グループが同一の「請求書ナンバー」に同居していて、別の製品として扱われていることがあり、このままだと単価の特定ができず請求書発行に支障があります。
(製品コードが同一であっても「別の製品である」という判別は、請求書ナンバーでしか区別ができない)

請求書ナンバーは、そのなかに複数の製品グループ名を内包していて、そのリストは「グループ管理」テーブルにあります。
そこで、「単価」テーブルに「請求書ナンバー」のカラムを追加したいのですが、
今後単価登録するデータに関しては登録時に当該製品グループ名が属する請求書ナンバーを挿入すればいいのですが、既存のデータを1件ずつUPDATEする手間も考えた時に、カラムの初期値を利用して上手い事できないものかと思うのですが、

MySQL

1ALTER TABLE `単価` ADD `請求書ナンバー` INT NOT NULL DEFAULT '@@@@' AFTER `適用日`;

@@@@この部分にどう記述すべきなのかがよくわからなくて止まっています。

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

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

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

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

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

maisumakun

2020/11/10 00:36

MySQLのバージョンはいくつですか?
Orlofsky

2020/11/10 02:21

昔、マスターテーブルと履歴テーブルをいっしょにしてひとつのテーブルでって全てのテーブルを設計していた人がいた。後から参入したわたしがSQLが複雑になり過ぎることとパフォーマンスが悪くなることを指摘したが、一切後戻りはしないという主義の人だった。 5テーブルくらいのJOINが必要なSELECT文を50人以上いたメンバーの誰も書けなかったと記憶している。
Take_it

2020/11/10 04:01

5.7.26 - MySQL Community Server (GPL)です。
maisumakun

2020/11/10 04:07

テーブル構造は変えてはいけない縛りでしょうか?
Take_it

2020/11/10 10:03

カラムの追加、別テーブルの追加はOKですが、既存カラムはいじれません
guest

回答1

0

ベストアンサー

DEFAULTには書けません

DEFAULTに書ける値は、固定のもの、もしくはCURRENT_TIMESTAMPだけです(MySQL 8.0.13の新機能としてデフォルト値に式を書けるようになっていますので、5.7では不可能です)。

どうしてもやりたいのであれば、トリガを使うことになります。

投稿2020/11/12 00:36

maisumakun

総合スコア145184

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

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

Take_it

2020/11/16 13:49

トリガで対応することにしました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問