sql >> データベース >  >> RDS >> Mysql

MySQLでSQLモードを更新する

    MySQLは、変数 sql_modeのデフォルト値を変更しました いくつかのアプリケーションで既存のコードを壊している以前のリリース以来。このチュートリアルでは、アプリケーションの機能に応じてsql_modeを変更する方法について説明します。また、サーバーの再起動時にこの値を保持するための手順も提供します。

    メモ :MySQLチュートリアル(UbuntuにMySQL 8をインストールする方法、UbuntuからMySQLを完全に削除する方法、MySQLを使用した基本的なSQLクエリを学ぶ方法)に従うこともできます。

    MySQL8の変数sql_modeのデフォルト値は次のとおりです。

    # Default - sql_mode
    ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

    私の場合、オプション ONLY_FULL_GROUP_BY コードが壊れているため、デモ用に削除します目的

    直接更新

    sql_modeの値を直接更新できます 以下に示すコマンドを使用します。

    # Login
    mysql -u root -p

    # Globally
    SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

    # Session
    SET SESSION sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

    sql_mode値は、上記のクエリを使用して変更されます。問題は、サーバーの再起動時に変数がデフォルト値に戻ることです。次のセクションに示すように、値を保持できます。

    永続的に更新

    my.cnf を更新することで、sql_modeの値を保持できます。 ファイル。このファイルの場所は、サーバー環境とバージョンによって異なります。このファイルの最も一般的な場所には、 / etc/my。 cnf / etc / mysql /my.cnf 、および / usr /etc/my.cnf 。また、ユーザーのローカルパスにある可能性があります〜/.my.cnf 。 Ubuntu 18.04LTSとMySQL8を搭載したシステムで、このファイルは / etc / mysql /my.cnf

    LinuxMint18の場合 、ファイルの場所は / usr /my.cnf 。以下に示すコマンドを使用してファイルを検索することもできます。

    # Search the default config
    mysqld --verbose --help | grep -A 1 "Default options"

    # Output
    Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

    MySQLサーバーは、システムレベルとローカルレベルの両方で、デフォルト構成について上記の場所を調べます。以下に示すようにmy.cnfファイルを更新します。デモにnanoエディターを使用しました目的 。

    # Update my.cnf
    sudo nano /etc/mysql/my.cnf

    # Scroll down and update the file as shown below

    ...
    ...
    # # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

    次に、ファイルを保存して、エディターを終了します。必ず[mysqld]を含めてください 変数の上。

    MySQLサーバーを再起動して、上記のようにmy.cnfファイルで構成された変数sql_modeの値を設定します。

    # Using init
    sudo /etc/init.d/mysqld restart
    # OR
    sudo /etc/init.d/mysql restart

    # Using service
    sudo service mysql restart

    # Using systemd
    sudo systemctl restart mysqld.service
    # OR
    sudo systemctl restart mysql

    概要

    このチュートリアルでは、MySQL変数 sql_modeの値を更新しました また、サーバーの再起動時に永続的に保存されます。


    1. LD_DEBUG環境変数

    2. MariaDBでサフィックスを使用して日番号を返す方法

    3. SQLServerALLオペレーターの説明

    4. Selectステートメントのケース