分MySQLはバージョン8.0.13からsql_require_primary_keyというオプションが追加されました。このオプションを追加することで,作成するテーブルに主キー(プライマリキー)をつけなければ作成できないような制限を入れることができます。今回はこのオプションについて説明していきます。8.0.18になります。sql_require_primary_keyについてsql_require_primary_keyは,my.cnfなどの設定ファイルに設定するか,SET構文を用いて設定することができます。VARIABLES構文で確認できます。sec)sql_require_primary_keyが設定されている状態で主キーのないテーブルを作成しようとすると,下記のようなエラーが表示され,DDLが実行できません。作成する場合は主キーを設定するか,sql_require_primary_keyのオプションをOFFにする必要があります。setting.もし,事前に作成していたテーブルがすでに主キーがない状態で,このオプションをONにした場合は,既存のテーブルは影響を受けず,今後作成するテーブルに対してのみエラーとなります。TABLE構文sql_require_primary_keyをONにしている場合は,テーブルの作成だけでなく,以下の点も注意が必要です。TABLE構文で主キーを削除しようとした場合でも,このオプションにより主キーを削除することができません。制約のあるカラムで主キーを代替することもできません。主キーが必須となってしまいます。TABLE構文の中に主キーの削除と追加の構文を記述することで回避することができます。一時テーブルを作成する場合も主キーが必須となってしまいます。バッチなどで一時テーブルを利用している場合は事前に一時テーブルのDDLを確認し,主キーがついているか確認しましょう。対応のストレージエンジン対応するストレージエンジンですが,主キーが設定できるストレージエンジン(MyISAMやInnoDBなど)に対しては利用可能です。CSVストレージエンジンのような主キーを設定できないストレージエンジンで利用しようとするとエラーになりますし,主キーなしで作成しようとするとsql_require_primary_keyの制限にあたり,作成することができません。しても利用したい場合は,このオプションを一時的にOFFにする必要があります。各テーブルで利用しているストレージエンジンはinfomation_schema.TABLES.ENGINEで確認することができるので,設定する前は一度確認してみましょう。setting.レプリケーションsql_require_primary_keyがマスター側でOFF,スレーブ側でONの状態で,マスターに主キーがないテーブルを作成しようとする場合でも,スレーブ側で主キーのないテーブルが作成されます。@@session.sql_require_primary_key=0*//*!*/;というイベントを確認することができます。これはMySQLのバージョンが8.0.13以上の場合のみ実行されるため,スレーブ側では一時的にOFFになり,レプリケーションが通るという理屈です。コメントを使ったMySQLバージョンによる実行については,公式ドキュメントのコメントの構文をご確認ください。8.0(スレーブかつsql_require_primary_key=1)のようなレプリケーションを利用している場合は注意が必要です。8.0(スレーブ)側でエラーになって,レプリケーションが止まってしまいます。止まってしまった場合は一度OFFにしてレプリケーションを再開し,問題のクエリが通ったことが確認できたら再びONに戻してから再度レプリケーションをSTOP・STARTする必要があります。ここで,レプリケーションをSTOP・STARTする理由は,再起動しないとsql_require_primary_keyがOFFのままのコネクションが残ってしまうためです。必要であればレプリケーションをSTOP・STARTしましょう。8.0から新たに導入されたオプションについて解説しました。主キーがないテーブルを作成しないように,運用ではなくシステムでカバーすることはとても便利です。8.0を導入する際は,合わせてこのオプションをどうするか検討してみてください。8.0著者プロフィール深町日出海(ふかまちひでみ)GMOメディア株式会社のデータベースエンジニア。OracleとMySQLを担当。得意なプログラム言語はJava。MySQLの好きなところはTABLEやINDEXの識別子に64byteまで使えるところ。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。