<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE artikkel PUBLIC "-//infoweb.ntnu.no//DTD Infoweb 1.0//NO" "http://infoweb.ntnu.no/infoweb.dtd">
<artikkel spraak="no">
  <tittel>Databasen MySQL</tittel>
  <forfatter>glaserud</forfatter>
  <sammendrag>MySQL er en SQL-database som kjøres på stud. Alle studenter har tilgang til denne databasen.</sammendrag>
  <lenker>
    <ekstern tittel="MySQL.com" uri="http://www.mysql.com/">Hjemmesiden til MySQL</ekstern>
    <ekstern tittel="php.net" uri="http://www.php.net/">Hjemmesiden til PHP</ekstern>
    <ekstern tittel="phpbuilder.com" uri="http://www.phpbuilder.com">PHP-ressurser</ekstern>
  </lenker>

  <hoveddel>

   <os2>Innledning</os2>

    <avsnitt>
     På stud kjøres det en MySQL-database. MySQL er en av de mest brukte og populære databasetjenerene, spesielt i web-sammenheng. På NTNU kan du nå MySQL på  <uthev>mysql.stud.ntnu.no</uthev>. For nybegynnere kan det være greit å lære seg følgende begreper før man begynner å bruke databasetjeneren:
     </avsnitt>

     <avsnitt>
      <uthev>brukere: </uthev> For å få tilgang til databasen må man ha en bruker. Man kan lage flere brukere. Brukere må ha samme brukernavn som en selv, eller være på formen brukernavn_etellerannet. (F.eks. johndoe, johndoe_web, johndoe_timeplan osv.) Vær oppmerksom på at et mysql-brukernavn maksimalt kan være på 16 tegn, dvs at dersom ditt brukernavn på stud er johndoe (7 tegn), har du kun 8 tegn tilgjengelig til den delen av navnet som du velger selv.
     </avsnitt>

     <avsnitt>
      <uthev>databaser: </uthev> Hver bruker kan ha flere databaser. Man kan lage databaser med samme navn som brukernavnet, og/eller som begynner med brukernavn og en underscore. (F.eks. johndoe, johndoe_oppskrifter, johndoe_venner, osv.) Også her gjelder regelen om maksimalt 16 tegn i navnet.
     </avsnitt>

     <avsnitt>
       <uthev>tabeller: </uthev> Hver database kan ha flere tabeller. Tabellene kan hete hva som helst, så lenge ikke to tabeller i samme database har samme navn.
     </avsnitt>

     <avsnitt>
       I utgangspunktet må en ha spesielle rettigheter for å opprette en bruker og databaser.
       Derfor er det på stud to små programmer som en må bruke for å lage bruker, sette
       passord og rettigheter, samt for opprette selve databasen. Dette er unix-programvare
       og finnes bl.a. på <uthev>login.stud.ntnu.no</uthev> og <uthev>solarislogin.stud.ntnu.no</uthev>.
     </avsnitt>

     <os2>Et eksempel</os2>
      
      <avsnitt>
       La oss si at jeg skal lage en database over vennene mine og deres telefonnummer. Det
       første jeg må gjøre er å lage en databasebruker. Jeg kaller denne
       'knutpett_demo'. Pass på at du bruker navnereglene som er beskrevet under
       "brukere" i det forrige avsnittet.
      </avsnitt>
       	
      <avsnitt>
       <konsoll>[knutpett@jeeves (13) ~ ]$ mysql-useradm create knutpett_demo
[knutpett@jeeves (14) ~ ]$ mysql-useradm show
User 'knutpett_demo': no password set.</konsoll>
      </avsnitt>

      <avsnitt>
        Så må jeg huske å sette passord på brukeren. Merk at passord ikke kan være lengre
        enn 8 tegn. Passordet bør <uthev>kun</uthev> gjelde for mysql, spesielt dersom du ønsker å bruke den relaterte brukeren i web-sammengeng på NTNU. Filer som lagres i din public_html mappe vil være lesbare for alle brukere ved NTNU.
      </avsnitt>

      <avsnitt>
        <konsoll>[knutpett@jeeves (16) ~ ]$ mysql-useradm passwd knutpett_demo
New MySQL password for user 'knutpett_demo':
Retype new MySQL password for user 'knutpett_demo':
Password updated for user 'knutpett_demo'.</konsoll>
      </avsnitt>

      <avsnitt>
        Nå kan jeg lage selve databasen:
      </avsnitt>

      <avsnitt>
        <konsoll>[knutpett@jeeves (22) ~ ]$ mysql-dbadm create knutpett_venner
Database 'knutpett_venner' created.</konsoll>
      </avsnitt>

      <avsnitt>
        Før jeg kan begynne å bruke databsen, må jeg huske å sette rettigheter:
      </avsnitt>

      <avsnitt>
        <konsoll>[knutpett@jeeves (25) ~ ]$ mysql-dbadm show knutpett_venner
Database 'knutpett_venner':
# User                Select  Insert  Update  Delete  Create   Drop   Alter  Index  Temp Lock
# ----------------    ------  ------  ------  ------  ------  ------  -----  -----  ---- -----
# (no permissions currently granted to any users)</konsoll>
      </avsnitt>

      <avsnitt>
        Her ser vi at det ikke er satt noen rettigheter enda.
      </avsnitt>

      <avsnitt>
        <konsoll>[knutpett@jeeves (30) ~ ]$ mysql-dbadm editperm knutpett_venner</konsoll>
      </avsnitt>

      <avsnitt>
        Så startes yndlingseditoren opp ($EDITOR) og man fyller inn ønskede rettigheter.
        Etter å ha lagt inn det, velg lagre. Merk at du ikke skal velge filnavn og lagre som.
        Resultatet mitt ble slik:
      </avsnitt>

      <avsnitt>
        <konsoll>Database 'knutpett_venner':
# User                Select  Insert  Update  Delete  Create   Drop   Alter  Index  Temp  Lock
# ----------------    ------  ------  ------  ------  ------  ------  -----  -----  ----  ----
knutpett_demo         Y       Y       Y       Y       Y       Y       Y      Y      Y     Y </konsoll>
      </avsnitt>

      <avsnitt>
        Nå er vi klar til å lage selve databasen:
      </avsnitt>

      <avsnitt>
        <konsoll>[knutpett@jeeves (33) ~ ]$ mysql -A -h mysql.stud.ntnu.no -u knutpett_demo -p knutpett_venner
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 217293 to server version: 3.22.22 Type 'help' for help. 
mysql> CREATE TABLE venner (
-> id int unsigned AUTO_INCREMENT NOT NULL,
-> fornavn varchar(255),
-> etternavn varchar(255),
-> tlf int(20),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (1.27 sec) 
mysql> insert into venner (fornavn,etternavn,tlf) values ('John','Doe',73591500);
Query OK, 1 row affected (1.72 sec) 
mysql> select * from venner;
+----+---------+-----------+----------+
| id | fornavn | etternavn | tlf      |
+----+---------+-----------+----------+
|  1 | John    | Doe       | 73591500 |
+----+---------+-----------+----------+
1 row in set (0.06 sec)</konsoll>
      </avsnitt>

    <os2>Hvordan bruke databasen via PHP</os2>

      <avsnitt>
        <uthev>PHP</uthev> har <uthev>egne funksjoner</uthev> for å aksessere
        <uthev>MySQL</uthev>-databaser. Her er et eksempel:
      </avsnitt>

      <avsnitt>
        <kode><tegn symbol="lt" />?php
  $db = mysql_connect("mysql.stud.ntnu.no", "knutpett_demo","troll");

  mysql_select_db("knutpett_venner",$db);
  $result = mysql_query("SELECT * FROM venner",$db);

  printf("Fornavn: %s<tegn symbol="lt" />br<tegn symbol="gt" />\n", mysql_result($result,0,"fornavn"));
  printf("Etternavn: %s<tegn symbol="lt" />br<tegn symbol="gt" />\n", mysql_result($result,0,"etternavn"));
  printf("Tlf: %s<tegn symbol="lt" />br<tegn symbol="gt" />\n", mysql_result($result,0,"tlf"));
?<tegn symbol="gt" /></kode>
      </avsnitt>

    <os2>Hvordan bruke databasen via Perl</os2>

      <avsnitt>
        Her er et lite eksempel på hvordan man kan bruke databsen v.h.a. Perl.
      </avsnitt>

      <avsnitt>
        <konsoll>#!/store/bin/perl -w

use Mysql;
use strict;
use POSIX qw(locale_h);

my $dbh = Mysql->connect("mysql", "knutpett_venner","knutpett_demo","troll");
my $sth = $dbh->query("select * from venner");

my $i=0;
while (my @arr = $sth->fetchrow) {
  my ($id,$fornavn,$etternavn,$tlf) = @arr;
  print "$id - $fornavn - $etternavn - $tlf\n";
}</konsoll>
      </avsnitt>

<os2>Ansatte</os2>
<avsnitt>Ansatte skal kunne bruke mysql på samme måte som studenter. Eneste avvik er at <uthev>mysql.ansatt.ntnu.no</uthev> brukes alle plasser der en student ville brukt <uthev>mysql.stud.ntnu.no</uthev>.</avsnitt>

    <os2>studorg-er</os2>

      <avsnitt>
        Man kan kun lage databaser og brukere for vanlige brukere, samt databaser som starter med 
        navnet på studorgen. Hvis man ønsker å bruke MySQL i studorgsammenheng kan man altså 
        lage en database som heter for eksempel <kommando>dans_test</kommando> hvis man er medlem av 
        denne gruppen. 
        Deretter gir man en eksisterende (personlig) databasebruker tilgang ved hjelp av 
        <kommando>mysql-dbadm editperm dans_test</kommando>. Alle medlemmene av en studorg kan gi 
        seg selv tilgang til en database knyttet til studorgen på denne måten.
      </avsnitt>
<os2>Grafisk grensesnitt</os2>
<avsnitt>Om du ønsker å bruke et grafisk grensesnitt for og editere databasen etter den er laget kan du bruke <ekstern tittel="ITEA phpMyAdmin" uri="https://www.itea.ntnu.no/mysql/">phpMyAdmin på ITEA</ekstern>. Her logger du inn med brukernavnet og passordet du laget med <kommando>mysql-useradm</kommando>, og databasenavnet du laget med <kommando>mysql-dbadm</kommando>.
</avsnitt>
  </hoveddel>
</artikkel>