sql >> Database >  >> RDS >> Mysql

Update SQL-modus in MySQL

MySQL heeft de standaardwaarde van de variabele sql_mode gewijzigd sinds vorige releases, wat de bestaande code in verschillende applicaties breekt. In deze zelfstudie wordt uitgelegd hoe u de sql_mode kunt wijzigen volgens de toepassingsfuncties. Het biedt ook de stappen om deze waarde te behouden bij het opnieuw opstarten van de server.

Opmerkingen :U kunt ook de MySQL-zelfstudies volgen - MySQL 8 op Ubuntu installeren, MySQL volledig van Ubuntu verwijderen en basis-SQL-query's leren met MySQL.

De standaardwaarde van de variabele sql_mode in MySQL 8 is zoals hieronder weergegeven.

# 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

In mijn geval de optie ONLY_FULL_GROUP_BY breekt de code, daarom zal ik deze verwijderen voor demonstratie doel .

Direct bijwerken

We kunnen de waarde van sql_mode direct bijwerken met behulp van de onderstaande commando's.

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

De sql_mode-waarde wordt gewijzigd met behulp van de bovengenoemde query's. Het probleem is dat de variabele zijn standaardwaarde terugkrijgt bij het opnieuw opstarten van de server. We kunnen de waarde behouden zoals weergegeven in de volgende sectie.

Permanent bijwerken

We kunnen de waarde van sql_mode behouden door my.cnf . bij te werken het dossier. De locatie van dit bestand verschilt afhankelijk van de serveromgeving en -versie. De meest voorkomende locaties van dit bestand zijn/etc/my. cnf , /etc/mysql /mijn.cnf , en /usr /etc/my.cnf . Het kan ook op het lokale pad van de gebruiker staan ​​~/.my.cnf . Op mijn systeem met Ubuntu 18.04 LTS en MySQL 8 vond ik dit bestand op /etc/mysql /mijn.cnf .

Op Linux Mint 18 , de bestandslocatie is /usr /mijn.cnf . U kunt het bestand ook doorzoeken met de onderstaande opdracht.

# 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

De MySQL-server kijkt naar de bovengenoemde locaties voor de standaardconfiguraties, zowel op systeemniveau als op lokaal niveau. Werk het my.cnf-bestand bij zoals hieronder weergegeven. Ik heb de nano-editor gebruikt voor demonstratie doel .

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

Sla nu het bestand op en verlaat de editor. Zorg ervoor dat u [mysqld] . opneemt boven de variabele.

Start de MySQL-server opnieuw om de waarde van de variabele sql_mode in te stellen zoals door ons is geconfigureerd in het my.cnf-bestand zoals hierboven weergegeven.

# 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

Samenvatting

In deze zelfstudie hebben we de waarde van de MySQL-variabele sql_mode bijgewerkt en bewaarde het ook permanent op de herstart van de server.


  1. Een web-app maken vanaf nul met Python Flask en MySQL:deel 2

  2. postgresql dubbele sleutel schendt unieke beperking

  3. Hoe praat Access met ODBC-gegevensbronnen? Deel 3

  4. Soorten SQL-opdrachten