De meeste moderne webapplicaties werken tegenwoordig samen met databases, meestal met een taal die SQL heet. Gelukkig voor ons is deze taal vrij eenvoudig te leren. In dit artikel beginnen we met enkele eenvoudige SQL-query's en gebruiken deze om te communiceren met een MySQL-database.
SQL (Structured Query Language) is een taal die is ontworpen voor interactie met relationele databasebeheersystemen (RDBMS), zoals MySQL, Oracle, Sqlite enz ... Om de SQL-query's in dit artikel uit te voeren, raad ik aan MySQL te installeren. Ik raad phpMyAdmin ook aan als visuele interface voor MySQL.
De volgende applicaties maken het zeer eenvoudig om zowel MySQL als phpMyAdmin op uw lokale computer te installeren:
We gaan de opdrachtregel gebruiken voor vragen. WAMP wordt al geleverd met een MySQL-console. Voor MAMP wil je dit artikel wellicht lezen.
Hier komt onze allereerste vraag. We gaan een database maken om mee te werken.
Open eerst uw MySQL-console en log in. Voor WAMP is het standaardwachtwoord leeg. Voor MAMP moet het wachtwoord standaard 'root' zijn.
Typ na het inloggen de vraag en druk op Enter:
CREËER DATABASE my_first_db;
Houd er rekening mee dat puntkomma (;) aan het einde van de query wordt toegevoegd, net zoals aan het einde van coderegels.
Ook zijn de speciale woorden 'CREATE DATABASE' niet hoofdlettergevoelig, samen met alle speciale woorden in SQL. Maar omwille van de leesbaarheid zullen we ze in hoofdletters schrijven.
Als u de standaardtekenset en sortering wilt instellen, kunt u in plaats daarvan dezelfde query als deze schrijven:
CREATE DATABASE my_first_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Hier is een lijst met ondersteunde tekensets en sorteringen in MySQL.
Deze query wordt gebruikt om een lijst te krijgen van alle databases die u heeft.
U kunt een bestaande database met deze query verwijderen.
Wees voorzichtig met deze vraag, omdat het u geen waarschuwingen geeft. Als u tabellen en gegevens onder de database hebt, worden deze allemaal onmiddellijk verwijderd.
Dit is technisch geen vraag. Het is een 'verklaring' en heeft aan het einde geen puntkomma nodig.
Het vertelt MySQL om een standaarddatabase te selecteren om mee te werken, voor de huidige sessie. Nu zijn we klaar om tabellen te maken en andere dingen te doen onder deze database.
U kunt denken aan een databasetabel zoals een spreadsheet of een csv-bestand dat gestructureerde gegevens bevat.
Net als in dit voorbeeld hebben tabellen kolomnamen en rijen met gegevens. Met SQL-query's kunnen we deze tabellen maken. We kunnen de gegevens ook toevoegen, lezen, bijwerken en verwijderen.
Met deze query kunnen we tabellen in de database maken. Helaas is de MySQL-documentatie niet erg vriendelijk voor nieuwe studenten. De structuur van dit type query kan erg complex worden, maar we zullen beginnen met een eenvoudige.
De volgende query maakt een tabel met twee kolommen.
MAAK TABLE gebruikers (gebruikersnaam VARCHAR (20), create_date DATE);
Houd er rekening mee dat we een query in meerdere regels kunnen schrijven en zelfs tabbladen kunnen gebruiken voor inspringen.
De eerste regel is eenvoudig. We maken gewoon een tabel met de naam 'gebruikers'. Daarna hebben we in paranthes de kolommen van een lijsttabel gescheiden door komma's. Na elke kolomnaam hebben we een gegevenstype, zoals VARCHAR of DATE.
VARCHAR (20) betekent dat de kolom een tekenreekstype is en maximaal 20 tekens lang kan zijn. DATE is ook een gegevenstype dat specifiek wordt gebruikt voor het opslaan van datums, in deze indeling: 'JJJJ-MM-DD'.
Voordat we die query uitvoeren, moeten we ook een kolom opnemen voor 'user_id', die een PRIMAIRE SLEUTEL is. Zonder al te veel in de details te komen, kunt u een PRIMAIRE SLEUTEL zien als een manier om elke rij met gegevens in een tabel te identificeren.
Nu wordt de vraag:
MAAK TABLE gebruikers (user_id INT AUTO_INCREMENT PRIMARY KEY, gebruikersnaam VARCHAR (20), create_date DATE);
INT maakt dit een 32-bit integer type (d.w.z. numeriek). AUTO_INCREMENT genereert automatisch een nieuw id-nummer telkens wanneer we nieuwe rijen met gegevens toevoegen. Het is niet verplicht, maar maakt het veel handiger.
Deze kolom hoeft geen geheel getal te zijn, maar is het meest gebruikte type. Het hebben van een PRIMARY KEY-kolom is ook niet vereist, maar wordt sterk aanbevolen voor een goed databaseontwerp en betere prestaties.
Laten we de query uitvoeren:
Met deze query kunt u een lijst met tabellen ophalen die zich momenteel in de database bevinden.
Om de structuur van een bestaande tabel te bekijken, kunt u deze query gebruiken.
Velden (ook wel kolommen genoemd) worden weergegeven in de resultaten, met hun eigenschappen.
Net als DROP DATABASES verwijdert deze query een tabel en de inhoud ervan, zonder een waarschuwing.
Deze query kan ook een vrij complexe structuur hebben vanwege de veelheid aan wijzigingen die het in een tabel kan uitvoeren. Laten we enkele eenvoudige voorbeelden bekijken.
(Zorg ervoor dat u de tabel opnieuw maakt die we net hebben neergezet of dat de volgende zoekopdrachten vanzelfsprekend niet werken.)
ALTER TABLE gebruikers VOEG e-mail toe VARCHAR (100) NA gebruikersnaam;
Dankzij de leesbaarheid van SQL denk ik niet dat die vraag zelfs een uitleg behoeft.
Dat was ook heel eenvoudig. Gebruik het echter met de nodige voorzichtigheid, want het verwijdert permanent gegevens zonder een waarschuwing.
Voeg de e-mailkolom opnieuw toe omdat we deze later gaan gebruiken:
ALTER TABLE gebruikers VOEG e-mail toe VARCHAR (100) NA gebruikersnaam;
Soms wilt u misschien de eigenschappen van een kolom wijzigen, zodat u deze niet hoeft te verwijderen en opnieuw te maken.
Die hernoemde de kolom gebruikersnaam in 'gebruikersnaam' en veranderde het type van VARCHAR (20) in VARCHAR (30). Een dergelijke wijziging mag de bestaande gegevens in de tabel niet verstoren.
Laten we wat gegevens toevoegen aan de tabel met behulp van deze query.
Zoals u kunt zien, bevat VALUES () de lijst met veldwaarden, gescheiden door komma's. De reekswaarden staan tussen enkele aanhalingstekens. En de waarden moeten in de volgorde staan van de kolommen die zijn gedefinieerd toen we de tabel maakten.
Merk op dat de eerste waarde NULL is voor het PRIMARY KEY-veld dat we 'user_id' noemden. We doen dit zodat een id automatisch wordt gegenereerd, omdat de kolom is ingesteld op AUTO_INCREMENT. Wanneer u voor de eerste keer een rij met gegevens invoert, wordt de ID 1. De volgende ingevoegde rij is 2 en zo verder ...
Hier is nog een syntaxis voor het invoegen van rijen.
Deze keer gebruiken we het sleutelwoord SET in plaats van VALUES en het wordt niet gevolgd door paratheses. Er zijn een paar dingen om op te merken:
Hier is nog een andere syntaxis.
Nogmaals, omdat elke kolom op naam wordt genoemd, kunnen deze in elke volgorde staan.
U kunt deze query gebruiken om de ID AUTO_INCREMENT voor de laatste ingevoegde rij in de huidige sessie op te halen.
Ik denk dat het een goed moment is om aan te tonen hoe je een MySQL-functie in je vragen kunt gebruiken.
De functie NOW () retourneert de huidige datum. U kunt het dus gebruiken om automatisch een DATE-kolom in te stellen op de huidige dag tijdens het invoegen van een nieuwe rij.
Merk op dat we een waarschuwing van MySQL hebben ontvangen, maar het is geen big deal. De reden is dat NOW () eigenlijk ook tijdinformatie retourneert.
Maar de kolom create_date die we hebben gemaakt, bevat alleen de datum en niet de tijd. Daarom zijn de geretourneerde gegevens afgekapt. We zouden in plaats daarvan de functie CURDATE () kunnen gebruiken, die alleen de datum retourneert, maar de gegevens die aan het einde zijn opgeslagen, zouden op elke manier hetzelfde zijn.
Het is duidelijk dat de gegevens die we hebben toegevoegd nutteloos zijn tenzij we het kunnen lezen. Dit is waar de SELECT-query binnenkomt.
Hier is de eenvoudigst mogelijke SELECT-query voor het lezen van een tabel:
In dit geval betekent de asterisk (*) dat we hebben gevraagd om alle kolommen uit de tabel op te halen. Als u alleen specifieke kolommen wilt, ziet de query er als volgt uit:
Vaker wel dan niet, we zijn alleen geïnteresseerd in sommige van de rijen, en niet alle. Laten we bijvoorbeeld zeggen dat we het e-mailadres voor de gebruiker 'nettuts' willen.
Zie het als een IF-verklaring. WAAR kunt u voorwaarden in de query plaatsen voor de resultaten waarnaar u op zoek bent.
Merk op dat voor de gelijkheidsvoorwaarde slechts één enkel teken gebruikt wordt (=), in plaats van dubbel (==), wat u misschien gewend bent van het programmeren.
U kunt ook andere vergelijkingsvoorwaarden gebruiken:
AND en OR kunnen worden gebruikt om voorwaarden te combineren:
Merk op dat numerieke waarden niet tussen aanhalingstekens hoeven te liggen.
Dit is handig voor het matchen van meerdere waarden.
Hiermee kunt u jokertekens zoeken.
Percentageteken (%) wordt gebruikt als jokerteken.
Als u wilt dat de resultaten in een specifieke volgorde worden geretourneerd, gebruikt u deze clausule:
De standaardvolgorde is ASC (dat wil zeggen oplopend). U kunt DESC toevoegen om de volgorde om te keren.
U kunt het aantal geretourneerde resultaten beperken.
LIMIT 2 krijgt gewoon de eerste 2 resultaten. LIMIET 1 OFFSET 2 krijgt 1 resultaat, na de eerste 2 resultaten. LIMIET 2, 1 betekent hetzelfde, maar houd er rekening mee dat het eerste getal de offset is en het tweede nummer de limiet.
Deze query wordt gebruikt voor het bijwerken van de gegevens in een tabel.
Meestal wordt het gebruikt met een WHERE-component, omdat u alleen specifieke rijen wilt bijwerken. Als er geen WHERE-component wordt opgegeven, worden alle rijen met dezelfde wijzigingen bijgewerkt.
U kunt ook een LIMIT-component gebruiken om het aantal rijen te beperken dat moet worden bijgewerkt.
Net als bij UPDATE wordt deze query ook meestal gebruikt met een WHERE-component.
Om de volledige inhoud van een tabel te verwijderen, kunt u dit gewoon doen:
VERWIJDEREN VAN gebruikers;
Maar meestal is het efficiënter om TRUNCATE te gebruiken.
TRUNCATE stelt ook de AUTO_INCREMENT-nummers opnieuw in, dus een nieuwe rij zal opnieuw de ID 1 hebben. Maar dit gebeurt niet met een DELETE-query, en de teller blijft omhoog gaan.
Bepaalde tekens moeten worden geëscaped, anders kunt u problemen ondervinden.
Backslash (\) wordt gebruikt om te ontsnappen.
Dit is ook om veiligheidsredenen erg belangrijk. Alle gebruikersinvoer die de database binnenkomt, moet op de juiste manier worden ontkomen. In PHP gebruik je de mysql_real_escape_string () functie of gebruik je voorbereide instructies omdat ze automatisch escapen.
Omdat MySQL veel speciale woorden heeft zoals SELECT of UPDATE, kun je botsingen voorkomen door aanhalingstekens rond je tabel- en kolomnamen te plaatsen. Maar dit zijn niet de reguliere citaten; je moet het backtick (') karakter gebruiken.
Stel dat u om de een of andere reden een kolom met de naam 'verwijderen' wilt toevoegen:
Bedankt voor het lezen van het artikel. Hopelijk heb ik je kunnen laten zien dat SQL een gemakkelijke leercurve heeft, maar het is erg krachtig.
Laat uw opmerkingen en vragen achter en geniet van een geweldige dag!
Klaar om je vaardigheden naar een hoger niveau te tillen, en te profiteren van je scripts en componenten? Bekijk onze zustermarktplaats, CodeCanyon.