MySQL INSERT, UPDATE og DELETE tutorial

Der er kun i litteraturen I har fået udleveret beskrevet en lang række select-statements. Grundet dette vil jeg her lave en lille tutorial i at benytte insert, update og delete funktionerne så I også har mulighed for at få en forståelse for at indsætte, opdatere og slette data. Dette er dog ikke noget I behøver at vide noget om, da de udleverede Python-klasser allerede kan tage hånd om dette. Jeg mener dog trods dette at det er meget godt at vide hvad det er der sker bag ved scenen. Jeg vil i det nedenstående eksempler benytte mig af en tabel kaldet Person med attributterne ID, navn, cpr-nummer og adresse. Koden for at oprette tabellen ser ud som nedenstående:

CREATE TABLE Person(
    ID       INT(8)         PRIMARY KEY  AUTO_INCREMENT,
    navn     VARCHAR(255)   NOT NULL     DEFAULT "",
    cpr      INT(8)         NOT NULL     DEFAULT 0,
    addresse VARCHAR(255)   NOT NULL     DEFAULT "" 
)
TYPE = MYISAM
;

INSERT

INSERT bruges til, som navnet også antyder, at indsætte nye data i en tabel. Hvis vi gerne vil indsætte nye data på alle pladser i en række kan vi skrive:

INSERT INTO Person VALUES (1, "Peter", 2312432354, "En Vej");

Vi vil dog i vores tilfælde ikke indsætte noget i det første felt i rækken da vi har defineret denne til at auto-inkrementere sig selv. Grundet dette bliver vi nødt til at specificere hvilke felter vi gerne vil indsætte vores data i. Dette gøres således:

INSERT INTO Person (navn, cpr, addresse) VALUES ("Peter", 2312432354, "En Vej");

Ovenstående linje SQL skal læses således at vi gerne vil insætte ny data i tabellen Person og at det er felterne navn, cpr og adresse vi gerne vil indsætte variablerne, "Peter", "2312432354" og "En vej", i. Dette virker jo alt sammen meget fint men hvilket ID har databasen så kreeret til vores ny indsatte data? Dette kan vi finde ud af ved bruge følgende funktion:

SELECT LAST_INSERT_ID();

Denne funktion returnerer den sidst oprettede id inden for den givne forbindelse og altså ikke den sidst indsatte id for hele databasen. Dette skal forstås sådan at der selvom der mange der arbejder med den samme tabel på samme tid kommer dette ikke til at lave kludder i ovenstående funktions returnering og vi får altså kun den id som er blevet oprettet til det data vi selv sidst har sat ind. I skal dog være opmærksomme på at denne funktion kun virker i myphpadmin hvis i skriver den ind som en del af den SQL-sætning i vil udføre. Dette skyldes at myphpadmin laver en ny databaseforbindelse for hver SQL-handling der skal udføres. For yderligere information se: MySQL INSERT.

UPDATE

Vi har nu kigget på hvordan man indsætter ny data i sine tabeller, men denne data skal jo også ændres nogen gange, f.eks. ved ændring af adresse eller måske hvis et navn er blevet stavet forkert. Dette gøres via update-funktionen. Hvis vi forestiller os at den før indsatte person "Peter" i stedet skulle staves "Peder" kan dette gøre som følgende:

UPDATE Person SET navn="Peder" WHERE navn="Peter";

Dette vil resultere i at samtlige steder i tabellen hvor navnet Peter fremkommer vil blive ændret. Vi kan derfor også gøre eksemplet mere specifikt ved at definere rækkens id:

UPDATE Person SET navn="Peder" WHERE ID=1;

Dette vil så kun ændre navnet hvor id'en er lig ét. Det er selvfølgelig også muligt at ændre flere variabler samtidigt eller give endnu mere specifikke parametre for hvor der skal ændres ud fra WHERE sætningen:

UPDATE Person SET navn="Peder", addresse="En anden vej"
WHERE navn="Peter" AND addresse="En Vej";

For yderligere information se: MySQL UPDATE.

DELETE

DELETE-funktionen virker akkurat på samme måde som SELECT, dog selvfølgelig med den undtagelse at rækkerne bliver slettet i stedet for valgt. Et eksempel kunne være at vi gerne vil slette alle de steder "Peter" fremstår, dette gøres således:

DELETE FROM Person WHERE navn="Peter";

Som det kan ses i ovenstående eksempel er det akkurat den samme syntax som ved INSERT pånær det at SELECT er blevet udskiftet med DELETE. Det er derfor også muligt at lave JOIN-deletes osv. For yderligere information se: MySQL DELETE.

Python og specialkarakterer

Som nogen nok har bemærket kommer python nogen gange med en fejlmelding i forhold til det valgte karaktersæt. Det skyldes typisk at der er blevet indsat en eller flere karakterer som python ikke umiddelbart kan forstå ud fra det standard karaktersæt som python kører med (ASCII). For os danskere virker det måske lidt underligt at tegn som "æ", "ø" og "å" ikke er standardkarakterer men resten af verden benytter sig ikke af dem og de er derfor ikke med som standard. Grunden til dette kan også læses ud af "ASCII" som står for "American Standard Code for Information Interchange", altså er ASCII en definition for det amerikanske alfabet. Dette karaktersæt strækker sig kun fra [a-Z] samt en række tegn såsom ",", "." osv. og derudover en række ikke printbare kontroltegn. Problemet med at python ikke kender til vores lidt mere sofistikerede alfabet kan dog nemt løses ved at indsætte en enkelt linie kode øverst i sit python-script som definerer hvilket karaktersæt der skal anvendes. Et eksempel kan ses nedenfor.

# -*- coding: iso-8859-1 -*-
print "her er noget tekst hvor der indgår æ, ø og å."


 

Som det kan ses ovenstående er der i øverste linie indsat noget der ligner en kommentar. Da der indgår "coding:" i kommentaren og den står på den enten første eller anden linie, ved python at der i denne kommentar står noget som python-fortolkeren skal tage sig af. Mere præcist fortæller vi python af vi gerne vil benytte os af iso-8859-1-karaktersætttet.

Python kode 1