Informatik & Praxis Edwin Schicker Datenbanken und SQL Eine praxisorientierte Einführung mit Anwendungen in Oracle, SQL Server und MySQL 4. Auflage Informatik & Praxis Herausgegebenvon Prof.Dr.HelmutEirund Prof.Dr.HerbertKopp Prof.Dr.AxelViereck Edwin Schicker Datenbanken und SQL Eine praxisorientierte Einführung mit Anwendungen in Oracle, SQL Server und MySQL 4., überarbeitete Auflage EdwinSchicker FakultätInformatikundMathematik OTHRegensburg Regensburg,Deutschland ISSN1615-8245 ISBN978-3-8348-1732-7 ISBN978-3-8348-2185-0(eBook) DOI10.1007/978-3-8348-2185-0 DieDeutscheNationalbibliothekverzeichnetdiesePublikationinderDeutschenNationalbibliografie;de- tailliertebibliografischeDatensindimInternetüberhttp://dnb.d-nb.deabrufbar. SpringerVieweg ©SpringerFachmedienWiesbaden1996,1999,2000,2014 DasWerkeinschließlichallerseinerTeileisturheberrechtlichgeschützt.JedeVerwertung,dienichtaus- drücklichvomUrheberrechtsgesetzzugelassenist,bedarfdervorherigenZustimmungdesVerlags.Dasgilt insbesonderefürVervielfältigungen,Bearbeitungen,Übersetzungen,MikroverfilmungenunddieEinspei- cherungundVerarbeitunginelektronischenSystemen. DieWiedergabe vonGebrauchsnamen,Handelsnamen,Warenbezeichnungenusw.indiesemWerkbe- rechtigtauchohnebesondereKennzeichnungnichtzuderAnnahme,dasssolcheNamenimSinneder Warenzeichen-undMarkenschutz-Gesetzgebungalsfreizubetrachtenwärenunddahervonjedermann benutztwerdendürften. GedrucktaufsäurefreiemundchlorfreigebleichtemPapier. Springer ViewegisteineMarkevonSpringerDE.Springer DEistTeilderFachverlagsgruppeSpringer Science+BusinessMedia www.springer-vieweg.de Vorwort Datenbanken entstandenabetwa1960ausderNotwendigkeit,dielogischenZugriffeauf dieimmergrößerwerdendenDatenmengenderGroßrechnerzuvereinfachenundzunor- mieren. Inzwischen haben Datenbanken längstihren Siegeszug in nahezuallen Anwen- dungsbereichenangetreten.FürdieserasanteEntwicklungzeichnenvorallemdreiGründe verantwortlich: Erstens stieg die Rechnerleistung in den letzten Jahrzehnten extrem an. Zweitensermöglichendienach1970entwickeltenrelationalenDatenbankeneinintuitives Erstellen vonDatenbanken mit einfachenZugriffen.Unddrittens unterstützen grafische Oberflächen den AnwenderundDatenbankdesigner dankeiner intuitiven Benutzerfüh- rung. DamitwirddasErstelleneinerkleinenDatenbankfastzumKinderspiel.Dochnurein korrektes Design gepaartmit wohlüberlegten strukturierten Zugriffen garantieren Flexi- bilität,ZuverlässigkeitundeineproblemlosespätereErweiterungderDatenbank.Erstein optimiertesDesignbasierendauftheoretischenGrundlagenundpraktischenErfahrungen sorgenfürKonsistenzundIntegritäteinerDatenbank.Nursoerhaltenwirfehlerfreieund widerspruchsfreieDatenbestände,diestetszugreifbarsind. DiesesBuch entstandausVorlesungenzuDatenbanken, dieich fürInformatiker und Mathematiker an der Technischen Hochschule Regensburg seit vielen Jahren lese. Ich möchte mit diesem Buch aber auch alle interessierten Laien und Nicht-Informatiker bewusstansprechen.DertheoretischeStoffwirdmittelszahlreicherBeispielesofortprak- tisch angewendet. Regelmäßige Zusammenfassungen erleichtern die Wiederholung und Reflexion des behandelten Stoffes. Zur Lernzielkontrolle dienen dem Autodidakten die zahlreichenÜbungsaufgaben.DerPraxisbezugwirdunterstütztdurcheineimBuchfort- laufendverwendeteBeispieldatenbank,dieimAnhangausführlichvorgestelltwird. DiesesBuchwendetsichvorallemanProgrammierer,diemitHilfevonSQLaufDaten- bankenzugreifenwollen,undanalle,diekleinebismittlereDatenbankenselbstentwerfen, erweitern undändernmöchten.DavieleKapitelvoneinanderunabhängigsind,empfeh- leichdiesesBuchausdrücklichauchalsNachschlagewerk.EinumfangreichesKapitelzur DatenbankprogrammierungerschließtzusätzlichdieWeltdesInternetsunddergrafischen Oberflächen. GanzgroblässtsichdiesesBuchindreiTeilegliedern.DieKap.1bis3gebenzunächst einenÜberblicküberDatenbankenundbeschäftigensichdannintensivmitAufbauund V VI Vorwort DesignvonrelationalenDatenbanken.DiesermehrtheoretischeStoffwirdimzweitenTeil durch die in den Kap. 4 und 5 behandelte Datenbanksprache SQL intensiv angewendet unddabeizusätzlicherheblichvertieft.DieInternet-ProgrammeinKap.6schließendie- senzweitenTeilab.ImdrittenTeilabKap.7werdenweiterführendeThemenvorgestellt.Es findensichKapitelzurPerformance,zurKorrektheitdergespeichertenDaten,zuMöglich- keiten des parallelen Datenzugriffs,zumSchutz vorDatenverlusten oderunberechtigten ZugriffenundzuverteiltenundobjektrelationalenDatenbanken. Kapitel1besprichtdieVorzügevonDatenbankengegenüberselbstverwaltetenDaten- beständen, erklärt die wichtigsten Datenbankbegriffe und gibt einen kleinen Überblick überdieLeistungsfähigkeitundMöglichkeitenvonDatenbanken.DiesesKapiteldientzur ÜbersichtundMotivationundistvorallemfürdenAnfängerempfehlenswert. Kapitel 2 und 3 beschäftigen sich mit relationalen Datenbanken. Sie sind zusammen mitderSpracheSQLabKap.4diezentralenKapiteldiesesBuches.HierliegtderFokusauf denMethodenzumErstelleneinerrelationalenDatenbankimDetail.DerAufbauvonRe- lationenzusammenmitdenbeidenIntegritätsregelnwirdvorgestellt.DieNormalformen vonRelationenunddasEntity-Relationship-ModellalsBasiswerkzeugezumDesignvon Datenbankenwerdenausführlichbehandelt. DieKap.4und5führenpraxisorientiertundumfassendindieDatenbankzugriffsspra- cheSQLein,wobeianHandvonBeispielenderStoffderKap.2und3wesentlichvertieft wird.Kapitel4befasstsichintensivmitdenZugriffsmöglichkeitenaufDatenbankenmittels SQL. In Kap. 5 gehen wir einen Schritt weiter und erzeugen Datenbanken mit geeigne- tenSQL-BefehlenundbeschäftigenunszusätzlichmitderVergabevonZugriffsrechtenin SQL.HierwerdenauchwichtigeThemenwieSicherheitundIntegritätbehandelt.InKap.6 wirdderSQL-TeilmitumfangreichenProgrammenabgeschlossen.Hiergreifenwirmittels HTMLundPHPvomInternetausdirektaufDatenbankenzu. DerdritteTeildientderWeiterführungundVertiefung.ErbeginntinKap.7miteiner EinführungindiePerformance.InKap.8folgendieimproduktivenEinsatzsehrwichtigen ThemenRecovery undConcurrency.Eswerden ausführlichdieerforderlichenMaßnah- menbeschrieben,umeinemplötzlichenRechnerabsturzruhigentgegenzusehenundum Parallelzugriffezuermöglichen. InKap.9werdendieGrundideenverteilterundobjektrelationalerDatenbankenvorge- stellt.DiesbeinhaltetdieGrundregelnderverteiltenDatenbankenundersteGehversuche mitderobjektrelationalenErweiterungderSpracheSQL. Geübt wird im gesamten Buch durchgehend mit Oracle, aber auch mit MySQL und SQLServer.DankdernormiertenSpracheSQLsinddiemeistenBeispielediesesBuches auchaufandereDatenbankendirektanwendbar.AufdiewenigenAbweichungenzwischen Oracle,SQLServerundMySQLwirdimmerexplizithingewiesen.DieBeispieldatenbank Bikewirddurchgängigverwendet,besondersintensivindenSQL-Kapiteln.DieseDaten- bankBikewirdimAnhangausführlichvorgestelltundistBasisfürallepraktischenÜbun- gendiesesBuches.InstallationsprogrammezumautomatischenErstellendieserDatenbank für Oracle, SQL Server und MySQL stehen im Internet kostenlos zur Verfügung. Ent- Vorwort VII sprechendeHinweisewerdenebenfallsimAnhanggegeben.JedesKapitelendetmiteiner Zusammenfassung,ÜbungsaufgabenundLiteraturhinweisen. SeitderdrittenAuflagesindvieleJahrevergangen.IndervorliegendenviertenAuflage wurdenalleKapitelvollständigüberarbeitet.VölligneusinddasKapitelzurProgrammie- rungmitPHPunddasKapitelüberPerformance.AuchdieBeispieldatenbankBikewurde weiter verbessert.DiezahlreichenzusätzlichenÄnderungensindauchaufdievielenAn- regungenvonLesernzurückzuführen.Dafürbedankeichmichsehrherzlich. Mein besonderer Dank gilt meiner Familie, deren Rücksicht und Verständnis dieses Bucherstermöglichten. Regensburg,imApril2014 Inhaltsverzeichnis 1 ÜbersichtüberDatenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 DefinitioneinerDatenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 AnforderungenaneineDatenbank . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 DerDatenbank-Administrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.4 Datenbankmodelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.4.1 RelationaleDatenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4.2 ObjektorientierteDatenbanken . . . . . . . . . . . . . . . . . . . . . . . . 13 1.4.3 HierarchischeundnetzwerkartigeDatenbanken . . . . . . . . . . . . 13 1.4.4 ModerneEntwicklungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.5 Transaktionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.6 DasKonsistenzmodellACID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.7 Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2 DasRelationenmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.1 BeispielzurelationalenDatenbanken . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2 RelationaleDatenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3 Primärschlüssel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.4 RelationaleIntegritätsregeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.4.1 Entitäts-Integritätsregel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.4.2 Referenz-Integritätsregel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.5 RelationaleAlgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.5.1 RelationaleOperatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.5.2 Vereinigung,SchnittundDifferenz . . . . . . . . . . . . . . . . . . . . . 44 2.5.3 ProjektionundRestriktion . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.5.4 Kreuzprodukt,VerbundundDivision . . . . . . . . . . . . . . . . . . . 45 2.5.5 EigenschaftenderrelationalenOperatoren . . . . . . . . . . . . . . . . 49 2.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.7 Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 IX X Inhaltsverzeichnis 3 Datenbankdesign. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.1 Normalformen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.1.1 ErsteNormalform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.1.2 FunktionaleAbhängigkeit. . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.1.3 ZweiteNormalform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.1.4 DritteNormalformnachBoyceundCodd . . . . . . . . . . . . . . . . 63 3.1.5 DritteNormalformnachCodd . . . . . . . . . . . . . . . . . . . . . . . . 65 3.1.6 VierteNormalform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.1.7 FünfteNormalform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.1.8 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 3.2 Entity-Relationship-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 3.2.1 Entitäten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.2.2 Beziehungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.2.3 Beziehungsrelationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.2.4 Fremdschlüsseleigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.2.5 SchwacheEntitätenundSubtypen . . . . . . . . . . . . . . . . . . . . . . 91 3.2.6 Zusammenfassung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 3.3 Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4 DieZugriffsspracheSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 4.1 DerAbfragebefehlSelect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.1.1 DerAufbaudesSelect-Befehls. . . . . . . . . . . . . . . . . . . . . . . . . 100 4.1.2 DieFrom-Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.1.3 DieSelect-Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 4.1.4 DieWhere-Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.1.5 DieGroup-By-undHaving-Klausel . . . . . . . . . . . . . . . . . . . . . 117 4.1.6 Union,ExceptundIntersect . . . . . . . . . . . . . . . . . . . . . . . . . . 119 4.1.7 DerVerbund(Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 4.1.8 DeräußereVerbund(OuterJoin) . . . . . . . . . . . . . . . . . . . . . . 124 4.1.9 DieOrder-By-Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 4.1.10 NullwerteunddieCoalesce-Funktion . . . . . . . . . . . . . . . . . . . 128 4.1.11 ArbeitsweisedesSelect-Befehls . . . . . . . . . . . . . . . . . . . . . . . . 129 4.2 MutationsbefehleinSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 4.3 TransaktionsbetriebmitSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 4.4 RelationaleAlgebraundSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 4.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 4.6 Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 5 DieBeschreibungsspracheSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 5.1 Relationenerzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Inhaltsverzeichnis XI 5.1.1 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 5.1.2 Spalten-undTabellenbedingungen . . . . . . . . . . . . . . . . . . . . . 145 5.2 Relationenändernundlöschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 5.3 TemporäreRelationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 5.4 Sichten(Views). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 5.5 Zusicherungen(Assertions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 5.6 Gebiete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 5.7 Trigger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 5.8 Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 5.9 Zugriffsrechte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 5.10 Zugriffsschutz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 5.11 Integrität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 5.12 AufbaueinerDatenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 5.12.1 InformationSchema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 5.12.2 DatenbankenundOracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 5.12.3 DatenbankenundSQLServer . . . . . . . . . . . . . . . . . . . . . . . . . 173 5.12.4 DatenbankenundMySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 5.13 EinrichtenundVerwaltenvonDatenbanken . . . . . . . . . . . . . . . . . . . . 174 5.13.1 OracleDatenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 5.13.2 SQLServerDatenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 5.13.3 MySQLDatenbanken. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 5.14 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 5.15 Übungsaufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 6 DatenbankprogrammierungmitPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 6.1 ArbeitenmitPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 6.2 ÜberblickzuWebserver,HTMLundPHP . . . . . . . . . . . . . . . . . . . . . 185 6.2.1 InternetundWebserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 6.2.2 HypertextMarkupLanguage(HTML) . . . . . . . . . . . . . . . . . . . 186 6.2.3 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 6.2.4 FelderinPHP:einekurzeÜbersicht. . . . . . . . . . . . . . . . . . . . . 192 6.3 ErsteDatenbankzugriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 6.3.1 DatenbankzugriffmitPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 6.3.2 DieDatenbankschnittstellePDO . . . . . . . . . . . . . . . . . . . . . . . 195 6.3.3 ErsterPHP-ZugriffaufDatenbanken . . . . . . . . . . . . . . . . . . . . 195 6.3.4 EinführungindieFehlerbehandlung . . . . . . . . . . . . . . . . . . . . 199 6.3.5 AuslesenmehrererDatenzeilen . . . . . . . . . . . . . . . . . . . . . . . . 201 6.4 KomplexereDatenbankzugriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 6.4.1 Sessionvariable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 6.4.2 MehrfacheLesezugriffeaufDatenbanken . . . . . . . . . . . . . . . . . 208 6.4.3 EineGUIzurEingabevonSQL-Befehlen . . . . . . . . . . . . . . . . . 210
Description: