Kategorien
Datenbanken Mysql,MariaDB

Restriction – on Update, on Delete

Fremdschlüsseleinschränkungen mit ON Update, On Delete (Restrict, No Action, Cascade, Null)

Zögern Sie nicht, der Datenbank Einschränkungen aufzuerlegen. Sie können sicher sein, dass Sie über eine konsistente Datenbank verfügen, und das ist einer der guten Gründe, eine Datenbank zu verwenden. Vor allem, wenn Sie mehrere Anwendungen haben, die dies anfordern (oder nur eine Anwendung, aber mit einem direkten Modus und einem Batch-Modus mit unterschiedlichen Quellen).

Mit MySQL haben Sie keine erweiterten Einschränkungen wie in PostgreSQL, aber zumindest sind die Fremdschlüsselbeschränkungen ziemlich fortgeschritten.

Nehmen wir ein Beispiel, eine Firmentabelle mit einer Benutzertabelle, die Personen aus diesem Unternehmen enthält

CREATE TABLE COMPANY (
     company_id INT NOT NULL,
     company_name VARCHAR(50),
     PRIMARY KEY (company_id)
) ENGINE=INNODB;

CREATE TABLE USER (
     user_id INT, 
     user_name VARCHAR(50), 
     company_id INT,
     INDEX company_id_idx (company_id),
     FOREIGN KEY (company_id) REFERENCES COMPANY (company_id) ON...
) ENGINE=INNODB;

Schauen wir uns die ON UPDATE-Klausel an:

  • ON UPDATE RESTRICT : die Vorgabe : Wenn Sie versuchen, eine company_id in der Tabelle COMPANY zu aktualisieren, lehnt die Engine die Operation ab, wenn mindestens ein USER auf diese Firma verlinkt.
  • ON UPDATE NO ACTION : wie RESTRICT.
  • ON UPDATE CASCADE : normalerweise das Beste: Wenn Sie eine company_id in einer Zeile der Tabelle COMPANY aktualisieren, aktualisiert die Engine sie entsprechend für alle USER-Zeilen, die auf diese COMPANY verweisen (aber keine aktivierten Trigger in der USER-Tabelle, Warnung). Die Engine verfolgt die Änderungen für Sie, das ist gut.
  • ON UPDATE SET NULL : Wenn Sie eine company_id in einer Zeile der Tabelle COMPANY aktualisieren, setzt die Engine die zugehörigen USERs company_id auf NULL (sollte im Feld USER company_id verfügbar sein). Ich kann bei einem Update nichts Interessantes sehen, was damit zu tun hat, aber ich kann mich irren.

Und jetzt auf der ON DELETE-Seite:

  • ON DELETE RESTRICT : die Standardeinstellung: Wenn Sie versuchen, eine company_id-ID in der Tabelle COMPANY zu löschen, lehnt die Engine die Operation ab, wenn mindestens ein BENUTZER auf diese Firma verlinkt, kann Ihr Leben retten.
  • ON DELETE NO ACTION : wie RESTRICT
  • ON DELETE CASCADE : gefährlich : Wenn Sie eine Firmenzeile in der Tabelle COMPANY löschen, löscht die Engine auch die zugehörigen USERs. Dies ist gefährlich, kann aber verwendet werden, um automatische Bereinigungen für sekundäre Tabellen vorzunehmen (es kann also etwas sein, das Sie wollen, aber ganz sicher nicht für ein COMPANY<->USER-Beispiel)
  • ON DELETE SET NULL : handful : Wenn Sie eine COMPANY-Zeile löschen, haben die zugehörigen USERs automatisch die Beziehung zu NULL. Wenn Null Ihr Wert für Benutzer ohne Unternehmen ist, kann dies ein gutes Verhalten sein, z. B. müssen Sie die Benutzer möglicherweise als Autoren einiger Inhalte in Ihrer Anwendung behalten, aber das Entfernen des Unternehmens ist für Sie kein Problem.

Normalerweise ist meine Standardeinstellung: ON DELETE RESTRICT ON UPDATE CASCADE. mit einigen ON DELETE ON DELETE CASCADE für Track-Tabellen (Protokolle – nicht alle Protokolle–, solche Dinge) und ON DELETE SET NULL, wenn die Master-Tabelle ein „einfaches Attribut“ für die Tabelle ist, die den Fremdschlüssel enthält, wie eine JOB-Tabelle für die USER-Tabelle.

Kategorien
Mysql,MariaDB

How to change mysql root password on Linux

  1. Stop mysql Service
    sudo systemctl stop mysql

tep by step instructions:

  1. Start off by stopping the MySQL service:
    sudo systemctl stop mysql
  2. Now, we need to restart the MySQL service but without password privileges being granted. Note that the & at the end of the command just runs the service in the background and will allow us to continue using the current terminal.
    sudo mysqld_safe --skip-grant-tables &
  3. You’ll now be able to connect to the MySQL server as root, without specifying a password: mysql -u root
  4. Now, reset the root password, but first flush the privileges to reload the grants:mysql>
    FLUSH PRIVILEGES;
    mysql> use mysql;
    mysql> update user set plugin=“mysql_native_password“ where User=’root‘;
    mysql> ALTER USER ‚root’@’localhost‘ IDENTIFIED BY ’new_password_here‘;
    mysql> FLUSH PRIVILEGES;
    mysql> quit;
  5. Finally, shut down the MySQL service and start it back up.$ sudo systemctl restart mysql
Kategorien
Allgemein Mysql,MariaDB

Export and Import all MySQL databases at one time

Export all Databases and Tables

mysqldump -u root -p --all-databases > alldb.sql

// Sometimes problems with tablespaces then use
mysqldump -u root -p --all-databases > alldb.sql

SINGLE Database

mysqldump -u root -p db1 db2 dbx > alldb.sql

mysqldump -u root -p db1 db2 dbx > db.sql

#some hoster have sometimes problems with tablespaces
mysqldump -h hostnameOrIp -u root -p --no-tablespaces db1 db2 dbx > alldb.sql

INNODB Database Export

mysqldump.exe -u root -v --single-transaction --single-transaction --skip-lock-tables database_name_to_export > filename.sql

-v show all exporting line
–single_transaction flag will start a transaction before running. Rather than lock the entire database, this will let mysqldump read the database in the current state at the time of the transaction, making for a consistent data dump.

Import Databases

All Databases

mysql> sudo mysql -u root -p db_name < export.sql

Single Database

mysql> CREATE DATABASE db_name;
mysql> sudo mysql -u root -p db_name <  export.sql

Kategorien
Befehle Mysql,MariaDB

MySQL und MariaDB: User anlegen und Rechte zuweisen

User anlegen und Rechte zuweisen

mysql -u root -p
select * from mysql;
CREATE USER 'newUser'@'localhost' IDENTIFIED BY 'securePassword';
CREATE DATABASE  newDatabase;
GRANT ALL PRIVILEGES ON newDatabase. * TO 'newUser'@'localhost';
FLUSH PRIVILEGES;

User mit Root-Rechten

CREATE USER 'admin'@'localhost' identified by 'securepassword!!!';

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' with grant option;

FLUSH PRIVILEGES;

exit

service mysql restart