########## Databasen MySQL ########## -=Innledning=- 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å *mysql.stud.ntnu.no*. For nybegynnere kan det være greit å lære seg følgende begreper før man begynner å bruke databasetjeneren: *brukere: * 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. *databaser: * 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. *tabeller: * Hver database kan ha flere tabeller. Tabellene kan hete hva som helst, så lenge ikke to tabeller i samme database har samme navn. 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å *login.stud.ntnu.no* og *solarislogin.stud.ntnu.no*. -=Et eksempel=- 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. [knutpett@jeeves (13) ~ ]$ mysql-useradm create knutpett_demo [knutpett@jeeves (14) ~ ]$ mysql-useradm show User 'knutpett_demo': no password set. Så må jeg huske å sette passord på brukeren. Merk at passord ikke kan være lengre enn 8 tegn. Passordet bør *kun* 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. [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'. Nå kan jeg lage selve databasen: [knutpett@jeeves (22) ~ ]$ mysql-dbadm create knutpett_venner Database 'knutpett_venner' created. Før jeg kan begynne å bruke databsen, må jeg huske å sette rettigheter: [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) Her ser vi at det ikke er satt noen rettigheter enda. [knutpett@jeeves (30) ~ ]$ mysql-dbadm editperm knutpett_venner 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: 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 Nå er vi klar til å lage selve databasen: [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) -=Hvordan bruke databasen via PHP=- *PHP* har *egne funksjoner* for å aksessere *MySQL*-databaser. Her er et eksempel: 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: %sltbrgt\n", mysql_result($result,0,"fornavn")); printf("Etternavn: %sltbrgt\n", mysql_result($result,0,"etternavn")); printf("Tlf: %sltbrgt\n", mysql_result($result,0,"tlf")); ?gt -=Hvordan bruke databasen via Perl=- Her er et lite eksempel på hvordan man kan bruke databsen v.h.a. Perl. #!/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"; } -=Ansatte=- Ansatte skal kunne bruke mysql på samme måte som studenter. Eneste avvik er at *mysql.ansatt.ntnu.no* brukes alle plasser der en student ville brukt *mysql.stud.ntnu.no*. -=studorg-er=- 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 "dans_test" hvis man er medlem av denne gruppen. Deretter gir man en eksisterende (personlig) databasebruker tilgang ved hjelp av "mysql-dbadm editperm dans_test". Alle medlemmene av en studorg kan gi seg selv tilgang til en database knyttet til studorgen på denne måten. -=Grafisk grensesnitt=- Om du ønsker å bruke et grafisk grensesnitt for og editere databasen etter den er laget kan du bruke phpMyAdmin på ITEA. Her logger du inn med brukernavnet og passordet du laget med "mysql-useradm", og databasenavnet du laget med "mysql-dbadm". Further reading: MySQL.comphp.netphpbuilder.comLinks in the article: ITEA phpMyAdmin