sql >> Database teknologi >  >> RDS >> Mysql

Opdater SQL-tilstand i MySQL

MySQL har ændret standardværdien for variablen sql_mode siden tidligere udgivelser, hvilket bryder den eksisterende kode i flere applikationer. Denne vejledning forklarer, hvordan du ændrer sql_mode i henhold til applikationsfunktionerne. Den indeholder også trinene til at bevare denne værdi ved genstart af serveren.

Noter :Du kan også følge MySQL tutorials - Sådan installeres MySQL 8 på Ubuntu, Sådan fjerner du MySQL fuldstændigt fra Ubuntu, og lær grundlæggende SQL-forespørgsler ved hjælp af MySQL.

Standardværdien for variablen sql_mode i MySQL 8 er som vist nedenfor.

# 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

I mit tilfælde muligheden ONLY_FULL_GROUP_BY bryder koden, derfor vil jeg fjerne den til demonstration formål .

Opdater direkte

Vi kan direkte opdatere værdien af ​​sql_mode ved hjælp af kommandoerne som vist nedenfor.

# 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";

Værdien for sql_mode vil blive ændret ved hjælp af de ovennævnte forespørgsler. Problemet er, at variablen får sin standardværdi tilbage ved genstart af serveren. Vi kan bevare værdien som vist i næste afsnit.

Opdater permanent

Vi kan bevare værdien af ​​sql_mode ved at opdatere my.cnf fil. Placeringen af ​​denne fil varierer afhængigt af servermiljøet og versionen. De mest almindelige placeringer af denne fil omfatter/etc/my. cnf , /etc/mysql /my.cnf , og /usr /etc/my.cnf . Det kan også være på den lokale sti for brugeren ~/.my.cnf . På mit system med Ubuntu 18.04 LTS og MySQL 8 fandt jeg denne fil på /etc/mysql /my.cnf .

Linux Mint 18 , filplaceringen er /usr /my.cnf . Du kan også søge i filen ved at bruge kommandoen som vist nedenfor.

# 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-serveren vil se på de ovennævnte placeringer for standardkonfigurationer både på systemniveau og lokalt niveau. Opdater my.cnf-filen som vist nedenfor. Jeg har brugt nano-editoren til demonstration formål .

# 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"

Gem nu filen, og afslut editoren. Sørg for at inkludere [mysqld] over variablen.

Genstart MySQL-serveren for at indstille værdien af ​​variablen sql_mode som konfigureret af os i filen my.cnf som vist ovenfor.

# 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

Oversigt

I denne vejledning har vi opdateret værdien af ​​MySQL-variablen sql_mode og også bevaret det permanent på servergenstarten.


  1. Sådan planlægges en lagret procedure i MySQL

  2. Sådan fungerer SQLite Sum()

  3. ActiveAndroid Forudfyld tabel ved hjælp af skemamigrering

  4. Sådan forbinder du en database til Python