Tartalomjegyzék Köszönetnyilvánítás
xix
Bevezetés
xxi
Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések Forráskód Hibaigazító p2p.wrox.com
1.
RDBMS alapok: miből áll az SQL Server adatbázis? Az adatbázis-objektumok áttekintése Az adatbázis-objektum A tranzakciós napló A legalapvetőbb adatbázis-objektumok: tábla Fájlcsoportok Diagrammok Nézetek Tárolt eljárások Felhasználói függvények Felhasználók és szerepek Szabályok Alapbeállítások Felhasználói adattípusok Teljes szövegű katalógusok SQL Server adattípusok NULL adat Az objektumok SQL Server azonosítói Mi kap nevet? Névadási szabályok Összegzés
xxii xxii xxiii xxiii xxiv xxv xxv xxvi
1 2 2 8 8 10 11 12 13 14 14 14 15 15 15 16 22 22 23 23 24
Tartalomjegyzék
2.
3.
4.
viii
A szakma eszközei
25
Books Online SQL Server Computer Manager Szolgáltatáskezelés Hálózati konfiguráció A protokollok Az ügyfél SQL Server Management Studio A kezdetek Query ablak SQL Server Integration Services (SSIS) A tömegesmásoló-program (Bulk Copy Program, bcp) SQL Server Profiler sqlcmd Összegzés
26 27 27 28 30 32 34 35 40 46 48 48 49 49
A T-SQL alapvető utasításai
51
Ismerkedés a SELECT utasítás egyszerű eseteivel A SELECT utasítás és a FROM klauzula A WHERE klauzula Az ORDER BY klauzula Az adatok csoportosítása a GROUP BY klauzulával A csoportosítás feltételhez kötése a HAVING klauzulával XML előállítása a FOR XML klauzulával A lekérdezések módosítása az OPTION klauzulával A DISTINCT és az ALL predikátumok Adatok beszúrása az INSERT utasítással Az INSERT INTO…SELECT utasítás Az adatok módosítása az UPDATE utasítással A DELETE utasítás Összegzés Gyakorlatok
52 53 56 61 65 74 77 78 78 81 86 88 91 93 93
Összekapcsolások: a JOIN operátor
95
A JOIN operátorok Belső összekapcsolás: az INNER JOIN operátor Az INNER JOIN és a WHERE klauzula hasonlósága Külső összekapcsolás: az OUTER JOIN Az egyszerű OUTER JOIN operátor Összetettebb OUTER JOIN összekapcsolások A két oldal teljes összekapcsolása: a FULL JOIN operátor A CROSS JOIN összekapcsolás Az összekapcsolások alternatív szintaxisa
96 97 103 107 108 114 119 121 122
Tartalomjegyzék
Az alternatív INNER JOIN összekapcsolás Az alternatív OUTER JOIN összekapcsolás Az alternatív CROSS JOIN összekapcsolás A UNION operátor Összegzés Gyakorlatok
5.
Táblák létrehozása és módosítása Objektumnevek az SQL Serverben Sémanév (vagy Tulajdonjog) Az adatbázisnév Elnevezés a kiszolgáló szerint Az alapértelmezések átvizsgálása A CREATE utasítás CREATE DATABASE NAME FILENAME CREATE TABLE Az ALTER utasítás ALTER DATABASE ALTER TABLE A DROP utasítás A grafikus eszköz használata Adatbázis létrehozása a Management Studio használatával Vissza a kódhoz: a szkriptkészítés alapjai a Management Studio használatával Összegzés Gyakorlatok
6.
Megszorítások A megszorítások típusai Tartományi megszorítások Entitásmegszorítások Hivatkozásiintegritás-megszorítások A megszorítások elnevezése Kulcsmegszorítások PRIMARY KEY-megszorítások FOREIGN KEY-megszorítások UNIQUE-megszorítások CHECK-megszorítások DEFAULT-megszorítások Egy DEFAULT-megszorítás használata CREATE TABLE utasításunkban Egy DEFAULT-megszorítás hozzáadása egy létező táblához
123 123 125 126 131 132
133 133 134 137 138 138 139 139 141 141 146 163 163 167 171 173 173 179 181 181
183 184 185 185 186 187 188 188 191 205 206 208 209 210 ix
Tartalomjegyzék
A megszorítások kikapcsolása A rossz adatok figyelmen kívül hagyása, amikor létrehozzuk a megszorítást Egy létező megszorítás ideiglenes kikapcsolása Szabályok és alapértelmezések – a megszorítások unokatestvérei Szabályok Alapértelmezések Annak meghatározása, mely táblák és adattípusok használnak egy adott szabályt vagy alapértelmezést Triggerek az adatintegritásért Annak megválasztása, mit használjunk Összegzés
7.
8.
Hozzunk ki többet a lekérdezésekből!
211 214 216 216 218 220 220 221 222
223
Mi az allekérdezés? Beágyazott allekérdezések készítése Kölcsönösen összefüggő allekérdezések Hogyan működnek a kölcsönösen összefüggő lekérdezések? Kölcsönösen összefüggő lekérdezések a WHERE feltételben A NULL értékű adatok kezelése – az ISNULL függvény Leszármaztatott táblák Az EXISTS operátor Az EXISTS használata más módon Adattípusok keverése: CAST és CONVERT Teljesítményszempontok Táblakapcsolás vagy allekérdezés vagy…? Összegzés Gyakorlatok
224 225 229 229 230 234 235 238 240 242 245 246 247 248
Normalizálás és a tervezés más, alapszintű kérdései
249
A táblák Az adatok tárolása normalizált formában Mielőtt belevágnánk Az első normálforma A második normálforma A harmadik normálforma További normálformák Kapcsolatok Az egy-egyes kapcsolat Az egy-egyes vagy -többes kapcsolat A több-többes kapcsolat
x
211
249 250 252 253 258 259 262 263 264 265 268
Tartalomjegyzék
Diagramrajzolás A táblák Táblák megadása és törlése Kapcsolatok A denormalizálás A normalizáláson túl Az egyszerűség szerepe Az adattípusok kiválasztása Inkább több adatot tároljunk, mint kevesebbet! Egy gyors példa Az adatbázis létrehozása A diagram és a kezdőtáblák megadása A kapcsolatok megadása Megszorítások megadása Összegzés Gyakorlatok
9.
SQL Server tároló- és indexstruktúra SQL Server tároló Az adatbázis Az extent A lap Az indexek alapjai B-fák Adatok hozzáférése az SQL Serverben Indexek létrehozása, módosítása és törlése A CREATE INDEX utasítás XML-indexek létrehozása Megszorítások létrehozása során generált indexek A bölcs döntés: hová milyen index kerüljön, és legfőképpen mikor? Változatosság A költségek mérlegelése: amikor a kevesebb több A lehető legjobb csoportosított index kiválasztása Az oszlopsorrend igenis számít Indexek eldobása A Database Engine Tuning varázsló használata Az indexek karbantartása Tördelődés A tördelődés azonosítása és a lapszétválasztások valószínűsége Összegzés Gyakorlatok
271 274 275 281 285 287 287 287 288 289 289 289 294 296 298 298
299 299 299 300 301 302 303 307 317 317 324 325 326 326 327 328 331 331 332 332 333 333 338 339
xi
Tartalomjegyzék
10. Nézetek Egyszerű nézetek Összetettebb nézetek Nézet használata adatok megváltoztatásához az INSTEAD OF triggerek előtt Nézetek szerkesztése T-SQL-lel Nézetek eldobása Nézetek létrehozása és szerkesztése a Management Studióban Nézetek szerkesztése a Management Studióban Auditálás: a meglévő kód megjelenítése A kód védelme: nézetek titkosítása A sémakötésről Nézetünk táblaszerűvé tétele a VIEW_METADATA opcióval Indexelt (materializált) nézetek Összegzés Gyakorlatok
11. Szkriptek és kötegek A szkriptírás alapjai A USE utasítás A változók deklarálása A @@IDENTITY használata A @@ROWCOUNT használata Kötegek Hibák a kötegekben Mikor használjuk a kötegeket? SQLCMD Dinamikus SQL: kódgenerálás menet közben az EXEC parancs segítségével Az EXEC parancs buktatói Összegzés Gyakorlatok
12. Tárolt eljárások A tárolt eljárás létrehozása: alapszintaxis Példa alapszintű tárolt eljárásra Tárolt eljárás módosítása az ALTER utasítással Tárolt eljárás eldobása Paraméterezés Paraméterek deklarálása Programvezérlő utasítások Az IF…ELSE utasítás Az ELSE rész A CASE utasítás xii
341 341 347 351 355 356 356 360 360 362 364 364 365 369 370
371 371 372 373 378 382 383 386 386 390 394 396 400 401
403 404 404 406 406 407 407 413 413 417 425
Tartalomjegyzék
Ciklus használata a WHILE utasítás segítségével A WAITFOR utasítás TRY/CATCH blokkok A sikeres teljesítés vagy hiba jelzése visszatérési értékkel Hogyan használjuk a RETURN utasítást Hibakezelés Ahogy volt… Hibák kezelése keletkezésük előtt Hibák manuális kiváltása Egyedi hibaüzenetek felvétele Amit a tárolt eljárás kínál Meghívható folyamatok létrehozása Tárolt eljárás használata biztonság érdekében Tárolt eljárások és a teljesítmény Kiterjesztett tárolt eljárások (Extended Stored Procedures, XP-k) Egy rövid áttekintés a rekurzióról Hibakeresés Az SQL Server beállítása hibakereséshez A Hibakereső indítása A hibakereső részei A hibakereső használata .NET-szerelvények Összefoglalás Gyakorlatok
433 434 435 436 436 439 440 447 450 455 460 460 462 462 465 465 469 469 470 472 475 479 480 481
13. A felhasználó által definiált függvények Mi is az az UDF Skalár értéket eredményező UDF-ek Táblával visszatérő UDF-ek A determinizmus megértése Hibakeresés felhasználó által definiált függvényekben .NET az adatbázis világban Összegzés Gyakorlatok
483 483 484 489 498 500 501 501 502
14. Tranzakciók és zárak Tranzakciók BEGIN TRAN COMMIT TRAN ROLLBACK TRAN SAVE TRAN Az SQL Server napló működése Hiba és helyreállítás Zárak és konkurencia
503 503 505 505 505 506 506 508 510 xiii
Tartalomjegyzék
Milyen problémákat oldhatunk meg zárakkal? Zárolható erőforrások A zár továbbterjedése és a zár hatásai a teljesítményre Zárolási módok Zárkompatibilitás Egy adott zártípus megadása: optimalizálási tippek Az izolációs szint beállítása A holtpontok kezelése (aka „A 1205”) Hogyan érzékeli az SQL Server a holtpont helyzeteket? A holtpont áldozatának kiválasztása A holtpontok elkerülése Összegzés
15. Triggerek Mi a trigger? ON WITH ENCRYPTION A FOR|AFTER és az INSTEAD OF klauzula WITH APPEND NOT FOR REPLICATION AS Triggerek használata adatintegritás-biztosítási szabályok esetében A más táblából származó követelmények kezelése A triggerek használata a módosítás különbségének ellenőrzésére Egyedi hibaüzenetek a triggerek segítségével A triggerek egyéb gyakori felhasználási lehetőségei Egyéb kérdések a triggerekkel kapcsolatban A triggerek egymásba ágyazhatók A triggerek rekurzívak lehetnek A triggerek nem akadályozzák meg az architektúraváltozást A triggerek kikapcsolhatók anélkül, hogy eltávolítanánk őket A triggerek kiváltási sorrendje INSTEAD OF triggerek Teljesítménymegfontolások A triggerek reaktívak, nem proaktívak A triggereknek nincs konkurenciaproblémája a kiváltó folyamatokkal Az IF UPDATE() és COLUMNS_UPDATED használata Röviden és velősen Ne feledkezzünk el a triggerekről, mikor indexet választunk Próbáljuk meg elkerülni a visszagörgetést triggeren belül A triggerek eldobása A triggerek hibakeresése Összegzés xiv
511 515 516 517 519 520 522 525 525 526 526 529
531 532 534 534 534 537 537 538 538 538 540 542 543 543 543 544 544 545 546 548 548 548 549 549 552 552 552 553 553 555
Tartalomjegyzék
16. Egy rövid bevezetés az XML-be XML-alapok Egy XML-dokumentum részei Névterek Elemtartalom Érvényesség és jól formáltság – sémák és DTD-k Mit hoz az SQL Server a konyhára? Relációs adatok előhívása XML-formátumban A RAW opció Az AUTO opció Az EXPLICIT opció PATH OPENXML Néhány szó az XSLT-ről Összegzés
557 558 560 569 571 572 573 574 577 579 581 600 606 614 616
17. Jelentkezem szolgálatra, Uram! Betekintés a Reporting Services-be
617
Reporting Services 101 Egyszerű jelentésmodellek építése Adatforrásnézetek Jelentés létrehozása Jelentéskiszolgáló-projektek A jelentés telepítése Összegzés
618 619 624 630 634 639 640
18. Integrálódás az Integration Services segítségével A probléma magja Az alapcsomagok generálása az Import/Export varázsló segítségével A csomagok végrehajtása Az Execute Package segédprogram használata Végrehajtás a Business Intelligence Development Studión belül Végrehajtás a Management Studión belül A csomag szerkesztése Összegzés
19. Játsszunk rendszergazdát! Munkák ütemezése Operátor létrehozása Munkák és feladatok létrehozása Biztonsági mentés és helyreállítás Biztonsági mentés, más néven „dump” készítése
641 641 642 649 649 652 653 653 656
657 658 659 661 669 670 xv
Tartalomjegyzék
Helyreállítási modellek Helyreállítás Indexkarbantartás ALTER INDEX Adatarchiválás Összegzés Gyakorlatok
673 674 676 677 679 680 681
„A” függelék: A gyakorlatok megoldásai
683
„B” függelék: Rendszerfüggvények
695
Örökül maradt rendszerfüggvények (más néven globális változók) Oszlopfüggvények Kurzorfüggvények Dátum- és időfüggvények Matematikai függvények Metaadatfüggvények Rowset függvények Biztonsági függvények Sztringfüggvények Rendszerfüggvények Szöveg- és képmanipuláló függvények
„C” függelék: A megfelelő eszköz megkeresése ERD-eszközök Logikai és fizikai tervezés Általános parancsprogramozás Visszafejtés Szinkronizálás Makrók Integráció más eszközökkel (kódgenerálás) Egyebek Néhány példa Kódolási eszközök Néhány példa Mentést készítő segédprogramok Néhány példa Összegzés
„D” függelék: Egyszerű példák kapcsolódási lehetőségre Néhány általános elv Kapcsolódás a C#-nyelvben Kapcsolódás a VB.NET esetén xvi
696 708 711 712 716 722 735 738 741 748 759
761 761 762 763 763 763 765 765 766 767 767 768 768 769 769
771 771 772 774
Tartalomjegyzék
„E” függelék: A mintaadatbázisok telepítése és használata A könyvben használt mintaadatbázisok A Microsoft által szolgáltatott adatbázisok Szkript használatával létrehozott példák Létrehozott példák
Tárgymutató
775 775 776 778 778
779
xvii