SQL Tips & Tricks voor Developers
Inleiding tot sql en linux commando's
Deze post verzamelt handige Linux commando's die nuttig zijn voor programmeurs. Hoewel niet elke programmeur een Linux expert is, kan een basiskennis en een paar specifieke commando's aanzienlijk de workflow verbeteren. De commando's zijn relatief eenvoudig, en gedetailleerde beschrijvingen worden achterwege gelaten. Dit artikel wordt voortdurend aangevuld met nieuwe inzichten en technieken.
Database backups met mysqldump
Het maken van een backup van je MySQL database is essentieel. Gebruik mysqldump -h localhost -u username -p database > file.sql om een backup te maken. Let op dat je hier het wachtwoord voor de gebruiker moet invoeren. Voor het herstellen gebruik je mysql --host localhost --user username -p database < file.sql. Ook hier is wachtwoordinvoer vereist. Zorg ervoor dat je backups regelmatig maakt en veilig bewaart.
Bestanden en mappen tellen
Soms is het nodig om snel het aantal bestanden en mappen in een directory te bepalen. Het commando ls /my/dir/ -l | wc -l geeft het totale aantal items weer. Om alleen bestanden met een bepaalde extensie te tellen, gebruik ls /my/dir | grep ".jpg". Je kunt deze commando's combineren voor een nog preciezere telling, bijvoorbeeld ls /my/dir -l | grep ".jpg" | wc -l. Dit is handig voor het beheren van je projectbestanden.
Ipv4 adressen opslaan in mysql
Het opslaan van IPv4 adressen in een MySQL database vereist de juiste aanpak. Het is sterk af te raden om een VARCHAR veld te gebruiken, omdat dit vaak te veel ruimte inneemt (bijvoorbeeld VARCHAR(100)). Een betere oplossing is het gebruik van een UNSIGNED INT(4) veld. Om dit te realiseren, moet je het IP adres converteren. PHP en MySQL bieden hiervoor de functies ip2long en long2ip.
Voorbeeld: ip adres opslag en conversie
Hier is een voorbeeld van het maken van een tabel om IP adressen op te slaan: CREATE TABLE IF NOT EXISTS ips (id int(10) unsigned NOT NULL AUTO_INCREMENT, ip int(4) unsigned NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;. Om het IP adres 127.0.0.1 in te voegen, gebruik je: INSERT INTO ips (ip) VALUES(INET_ATON('127.0.0.1')). Dit resulteert in de waarde 2130706433 in het ip veld. Je kunt deze waarde weer terug converteren naar het IP adres met long2ip(). Dit is veel efficiënter en biedt extra functionaliteit, zoals het zoeken binnen IP-adresbereiken.
Reorganiseren van auto-increment sleutels
Wanneer je een tabel met een automatisch toenemende primaire sleutel wilt reorganiseren, kan het proces in drie stappen worden uitgevoerd. Stel je hebt een tabel users met sleutels 1, 3, 5, 10 en je wilt deze veranderen naar 1, 2, 3, 4. Gebruik dan de volgende SQL queries: ALTER TABLE users DROP id;, ALTER TABLE users AUTO_INCREMENT = 1;, en ALTER TABLE users ADD id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;. Wees voorzichtig: dit werkt alleen als er geen relaties met de tabel zijn.
Optimalisatie van acl tabellen
Om de prestaties van ACL (Access Control List) tabellen te verbeteren, kun je indexes en foreign keys toevoegen. Een voorbeeld van optimalisatie is: /* ACL Tables */ CREATE TABLE acos (.); CREATE INDEX idx_acos_lft_rght ON acos(lft,rght); CREATE TABLE aros (.); CREATE INDEX idx_aros_lft_rght ON aros(lft,rght); CREATE TABLE aros_acos (.); CREATE UNIQUE INDEX idx_aros_acos_aro_id_aco_id ON aros_acos(aro_id, aco_id); ALTER TABLE aros_acos ADD CONSTRAINT FOREIGN KEY (aro_id) REFERENCES aros(id); ALTER TABLE aros_acos ADD CONSTRAINT FOREIGN KEY (aco_id) REFERENCES acos(id); Deze aanpassingen kunnen de query performance significant verbeteren.
