こんにちは!! 新卒1年目の伊藤です。 今回の記事では、私がしてしまったALTER文にまつわる失敗とその再発防止に役立つIntelliJの機能を紹介していきます。
私がした失敗の再現
私が当時した失敗をsampleテーブルを用いて紹介します。
やりたかったことは既存のテーブルにAUTO_INCREMENT
の追加です。
他の制約やCOMMENTについて変更は加えません。
/*テーブル作成*/ CREATE TABLE `sample` ( `id` bigint(20) NOT NULL COMMENT "識別ID", `name` varchar(40) DEFAULT NULL COMMENT "名前", PRIMARY KEY(`id`) ); /*目的:`id`カラムの制約に`AUTO_INCREMENT`の追加*/ /*ALTER文実行*/ ALTER TABLE sample modify id bigint AUTO_INCREMENT;
今回の目的に対して、上記のSQLでは適切な修正とは言えません!!
なぜならAUTO_INCREMENT
以外にも変更されている点があるからです。
下記のsqlを実行すれば一目瞭然。
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = "sample";
ALTER TABLE実行前の結果(TablePlus)
ALTER TABLE実行後の結果(TablePlus)
EXTRAの項目にauto_increment
は実装されていますが、COLUMN_COMMENTにあった識別ID
が消えています。
このように、ALTER文では実行する際に既存の制約も全て記載しないといけません。
正しく書くとこうなります。
ALTER TABLE sample modify id bigint AUTO_INCREMENT comment '識別ID';
しかし、ALTER文を実行する度にSHOW TABLE
で制約を確認するとチェック漏れの可能性も出てきます。
そこでALTER文を実行する際におすすめのツールを紹介します。
ALTER文を作成する時におすすめのツール
IntelliJにある、Modify Table
と呼ばれるツールです
Database の項目で編集したいテーブルで右クリックすると現れる
実際のUI
テーブル名やカラム名が表示されており、変更を加えたい箇所にカーソルを合わせれば簡単に変更を加えることができます。 例えば、上で行なったAUTO_INCREMENTの設定を行いたい場合は画像のように設定します。
Previewを見てもらうとわかる通り、alter文が生成されます。AutoIncrementの項目以外はid
の画面を開いた時には既に記入済みのため、既存の制約などは意識しなくても問題ありません。
あとは、これでOKを押すだけ正しいALTER文が実行されます。
また、このツールで実行することが不安なときはPreview
から文をコピーできるため別のクライアントツールやCLIからでも実行することもできます。
まとめ
ALTER文は便利な文は後から変更を効かせることができるので便利な文ですが、既存の制約を消してしまうので使うときは最新の注意を払って安全に使いましょう!!
ラボルでは今回のようにミスをした場合、チームや個人単位で再発防止策を考えています。
その中で今回のようなツールに出会うこともあります。
バグや失敗は0に越したことはないですが、もし起こしてしまってもどうやって今後同じ失敗をしないかを考えていくことを大事にしていきたいですね!
最後に
ラボルでは、エンジニアを積極採用中です。1、2年目のエンジニアから経験豊富なテックリードやエンジニリングマネージャーまで、興味がある方はぜひご応募ください!!