Guide: PHP- & MySQL-innføring: Kapittel 8

Tid for databaser

Vi har til nå dekket svært mye av språket PHP; i dag tar vi tak i MySQL og introduserer begreper som relasjonsdatabase.

Hva med NULL

Som vi nevnte tidligere, kan alle feltene i tabellen vår ha en NULL-verdi, som tilsvarer noe av det samme som det gjør i PHP. Vi bruker hovedsaklig verdien NULL i MySQL når det er en kolonne som ikke gjelder for denne raden.

For eksempel, om vi skal legge inn musikkartisten Madonna i tabellen vår, ville vi gjort det med en NULL-verdi på etternavn og e-postadresse. Dette kan vi gjøre på en av to måter, enten ved å eksplisitt sette inn NULL i de relevante feltene når vi setter inn, eller lage en INSERT spørring der de relevante kolonnene ikke er nevnt. Her er begge metodene;


mysql> INSERT INTO person (fornavn, fodselsdato)
    -> VALUES ('Madonna', '1958-08-16');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO person (fornavn, etternavn, fodselsdato, epost)
    -> VALUES ('Madonna', NULL, '1958-08-16', NULL);
Query OK, 1 row affected (0.00 sec)

Om du nå henter ut alle med fornavn Madonna fra databasen, vil du se følgende;


mysql> SELECT * FROM person WHERE fornavn = 'Madonna';
+---------+-----------+-------------+-------+
| fornavn | etternavn | fodselsdato | epost |
+---------+-----------+-------------+-------+
| Madonna | NULL      | 1958-08-16  | NULL  |
+---------+-----------+-------------+-------+
1 row in set (0.00 sec)

Om du skal lete etter personer som ikke har etternavn i databasen din, vil du måtte bruke en spesiell sjekk for å finne dem, fordi du kan ikke benytte WHERE etternavn = NULL i spørringen siden NULL er en spesialverdi.


mysql> SELECT * FROM person WHERE etternavn = NULL;
Empty set (0.00 sec)

mysql> SELECT * FROM person WHERE etternavn IS NULL;
+---------+-----------+-------------+-------+
| fornavn | etternavn | fodselsdato | epost |
+---------+-----------+-------------+-------+
| Madonna | NULL      | 1958-08-16  | NULL  |
+---------+-----------+-------------+-------+
1 row in set (0.00 sec)

Som du ser krever NULL litt spesiell behandling om du skal hente ut data basert på slike verdier.