1 00:00:00,000 --> 00:00:03,493 >> [MUSIC SPILLE] 2 00:00:03,493 --> 00:00:04,934 3 00:00:04,934 --> 00:00:07,100 DOUG LLOYD: I våre videoer på web utvikling emner, 4 00:00:07,100 --> 00:00:10,560 vi har nevnt begrepet en database et par ganger, ikke sant? 5 00:00:10,560 --> 00:00:12,700 Så en database du er sannsynligvis kjent med fra 6 00:00:12,700 --> 00:00:15,780 si å bruke Microsoft Excel eller Google Spreadsheets. 7 00:00:15,780 --> 00:00:20,650 Det er egentlig bare en organisert satt av tabeller, rader og kolonner. 8 00:00:20,650 --> 00:00:23,140 >> Og en database er der våre nettsider butikker 9 00:00:23,140 --> 00:00:26,760 informasjon som er viktig for vår hjemmeside for å fungere ordentlig. 10 00:00:26,760 --> 00:00:30,150 Igjen, en veldig vanlig eksempel her lagrer brukernavn og passord 11 00:00:30,150 --> 00:00:32,824 i en database, slik at når en bruker logger inn vår hjemmeside, 12 00:00:32,824 --> 00:00:36,690 databasen kan spørres å se hvis denne brukeren finnes i databasen. 13 00:00:36,690 --> 00:00:39,260 Og hvis de er, å sjekke at passordet er riktig. 14 00:00:39,260 --> 00:00:43,420 Og hvis deres passord er riktig, så vi kan gi dem uansett side 15 00:00:43,420 --> 00:00:45,370 de ber om. 16 00:00:45,370 --> 00:00:48,590 >> Så du er nok, igjen, kjent med denne ideen fra Excel eller Google 17 00:00:48,590 --> 00:00:49,430 Regneark. 18 00:00:49,430 --> 00:00:52,980 Vi har databaser, tabeller, rader og kolonner. 19 00:00:52,980 --> 00:00:56,450 Og det er virkelig slags av den grunnleggende sett 20 00:00:56,450 --> 00:00:58,470 hierarkisk sammenbrudd her. 21 00:00:58,470 --> 00:00:59,800 Så her er et Excel-regneark. 22 00:00:59,800 --> 00:01:02,640 Og hvis du noen gang har åpnet denne eller et annet lignende program 23 00:01:02,640 --> 00:01:06,780 du vet at disse her er rows-- 1, 2, 3, 4, 5, 6, 7. 24 00:01:06,780 --> 00:01:08,760 Dette er kolonner. 25 00:01:08,760 --> 00:01:11,790 >> Kanskje her nede, selv om du kan Ikke bruk denne funksjonen fryktelig much-- 26 00:01:11,790 --> 00:01:15,370 Jeg skal zoome in-- vi har denne ideen av et ark. 27 00:01:15,370 --> 00:01:17,930 Så kanskje disse arkene, hvis Jeg veksler frem og tilbake, 28 00:01:17,930 --> 00:01:21,600 er forskjellige tabeller som eksistere i min database. 29 00:01:21,600 --> 00:01:25,210 Og hvis vi fortsetter eksempelet alle Forresten, navnet på denne databasen 30 00:01:25,210 --> 00:01:26,940 er Book 1. 31 00:01:26,940 --> 00:01:28,710 Kanskje jeg har bok 2 og bok 3. 32 00:01:28,710 --> 00:01:33,270 Så hver Excel-fil er en database, er hvert ark en tabell, 33 00:01:33,270 --> 00:01:39,530 og innsiden av hvert bord har jeg denne ideen av rader og kolonner. 34 00:01:39,530 --> 00:01:41,900 >> Så hvordan jobber jeg med denne databasen? 35 00:01:41,900 --> 00:01:43,630 Hvordan får jeg informasjon fra det? 36 00:01:43,630 --> 00:01:47,540 Vel det er et språk som heter SQL-- som jeg vanligvis bare kaller Sequel-- 37 00:01:47,540 --> 00:01:50,010 og det står for Structured Query Language. 38 00:01:50,010 --> 00:01:52,981 Og det er et programmeringsspråk, men det er en ganske begrenset programmering 39 00:01:52,981 --> 00:01:53,480 språk. 40 00:01:53,480 --> 00:01:56,407 Det er ikke helt som andre som vi har jobbet med. 41 00:01:56,407 --> 00:01:58,240 Men hensikten med denne programmeringsspråk 42 00:01:58,240 --> 00:02:01,570 er å søke en database, for å be om informasjon fra en database, 43 00:02:01,570 --> 00:02:04,480 finne informasjon i en database, og så videre. 44 00:02:04,480 --> 00:02:08,449 >> Vi også, og det er en veldig in CS50-- felles plattform, det heter MySQL. 45 00:02:08,449 --> 00:02:10,600 Det er det vi bruker i kurset. 46 00:02:10,600 --> 00:02:12,880 Det er en åpen kildekode plattform som etablerer 47 00:02:12,880 --> 00:02:16,732 en såkalt relasjonell database-- en database, effektivt. 48 00:02:16,732 --> 00:02:18,440 Vi trenger ikke å få inn i for mye detalj 49 00:02:18,440 --> 00:02:20,930 på hva en relasjonsdatabase er. 50 00:02:20,930 --> 00:02:24,650 Men SQL språket er veldig flink til å jobbe 51 00:02:24,650 --> 00:02:29,760 med MySQL og andre lignende stiler av relasjonsdatabaser. 52 00:02:29,760 --> 00:02:34,010 >> Og mange installasjoner av MySQL komme med noe 53 00:02:34,010 --> 00:02:37,760 kalt phpMyAdmin, som er et grafisk brukergrensesnitt 54 00:02:37,760 --> 00:02:40,970 interface-- en GUI-- som gjør det litt mer 55 00:02:40,970 --> 00:02:44,410 brukervennlig å utføre databasespørringer, 56 00:02:44,410 --> 00:02:48,980 fordi databasene ikke er bare brukt av avanserte programmerere, ikke sant? 57 00:02:48,980 --> 00:02:51,510 Noen ganger er det disse små bedrifter, 58 00:02:51,510 --> 00:02:53,900 og de har ikke råd til ansette et team av programmerere, 59 00:02:53,900 --> 00:02:56,700 men de trenger fortsatt å lagre informasjon i en database. 60 00:02:56,700 --> 00:02:59,300 >> Noe som phpMyAdmin gjør det svært enkelt for noen 61 00:02:59,300 --> 00:03:03,630 som aldri har programmert før til plukke opp og bli kjent med hvordan 62 00:03:03,630 --> 00:03:07,710 å arbeide med en database. 63 00:03:07,710 --> 00:03:11,800 Problemet er, phpMyAdmin, mens det er et fantastisk verktøy for læring 64 00:03:11,800 --> 00:03:14,850 om databaser, er det manuell. 65 00:03:14,850 --> 00:03:18,050 Du er nødt til å logge inn det og utføre kommandoer og skriv 66 00:03:18,050 --> 00:03:19,910 ting i manuelt. 67 00:03:19,910 --> 00:03:23,160 >> Og som vi vet fra vår eksempel på PHP web-programmering, 68 00:03:23,160 --> 00:03:26,550 å måtte manuelt gjøre ting på vår hjemmeside, 69 00:03:26,550 --> 00:03:30,970 hvis vi ønsker en dynamisk, aktiv responsive nettside, kanskje ikke den beste tilnærmingen. 70 00:03:30,970 --> 00:03:33,980 Vi ønsker å finne en måte å kanskje automatisere denne liksom. 71 00:03:33,980 --> 00:03:37,864 Og SQL vil gjøre oss i stand til å gjøre dette. 72 00:03:37,864 --> 00:03:39,780 Så når vi kommer til begynne å jobbe med SQL, 73 00:03:39,780 --> 00:03:41,220 vi først må ha en database for å jobbe med. 74 00:03:41,220 --> 00:03:42,510 Opprette en database noe du sannsynligvis 75 00:03:42,510 --> 00:03:45,350 vil gjøre i phpMyAdmin, fordi du trenger bare å gjøre det en gang, 76 00:03:45,350 --> 00:03:49,690 og syntaksen for å gjøre det er mye mer oversiktlig. 77 00:03:49,690 --> 00:03:51,940 Det er mye lettere å gjøre det i et grafisk brukergrensesnitt 78 00:03:51,940 --> 00:03:53,520 enn å skrive den ut som en kommando. 79 00:03:53,520 --> 00:03:55,186 Kommandoen kan bli litt tungvint. 80 00:03:55,186 --> 00:03:58,889 På samme måte skaper en tabell kan få seg en bit tungvint også. 81 00:03:58,889 --> 00:04:01,930 Og så ting som å lage en database og skape en tabell, som du er 82 00:04:01,930 --> 00:04:06,270 sannsynligvis bare kommer til å gjøre once-- en gang pr bord, en gang per database-- 83 00:04:06,270 --> 00:04:09,040 det er greit å gjøre det i et grafisk grensesnitt. 84 00:04:09,040 --> 00:04:11,570 I fremgangsmåten ifølge lage et bord, vil du 85 00:04:11,570 --> 00:04:14,840 har også å spesifisere alle kolonner som vil være i denne tabellen. 86 00:04:14,840 --> 00:04:18,149 Hva slags informasjon trenger du ønsker å lagre i tabellen? 87 00:04:18,149 --> 00:04:24,520 Kanskje en brukers navn og fødselsdato, passord, bruker-ID, og ​​kanskje 88 00:04:24,520 --> 00:04:26,170 by og stat, ikke sant? 89 00:04:26,170 --> 00:04:30,080 >> Og for hver gang vi ønsker å legge til en bruker til databasen, ønsker vi å få alle seks 90 00:04:30,080 --> 00:04:31,890 av disse biter av informasjon. 91 00:04:31,890 --> 00:04:34,840 Og vi gjør det ved å legge radene i tabellen. 92 00:04:34,840 --> 00:04:37,800 Så vi først opprette en database, Da skaper vi et bord. 93 00:04:37,800 --> 00:04:40,100 Som en del av å skape et bord, blir vi bedt om 94 00:04:40,100 --> 00:04:44,280 å spesifisere hver kolonne som vi ønsker i denne tabellen. 95 00:04:44,280 --> 00:04:47,247 Og da vi begynner å legge informasjonen til databasen 96 00:04:47,247 --> 00:04:49,580 og søke i databasen mer generally-- ikke bare legge til, 97 00:04:49,580 --> 00:04:51,610 men alt annet vi do-- vi vil være å håndtere 98 00:04:51,610 --> 00:04:58,870 med rader av bordet, som er ett brukerens informasjon fra hele settet. 99 00:04:58,870 --> 00:05:03,210 >> Så hver SQL kolonne er i stand holder data fra en bestemt datatype. 100 00:05:03,210 --> 00:05:06,560 Så vi liksom eliminert dette Ideen om datatyper i PHP, 101 00:05:06,560 --> 00:05:08,747 men de er tilbake her i SQL. 102 00:05:08,747 --> 00:05:10,080 Og det er mye av datatyper. 103 00:05:10,080 --> 00:05:13,420 Her er bare 20 av dem, men det er ikke engang alle av dem. 104 00:05:13,420 --> 00:05:16,240 Så vi har ideer som INTs-- Integers-- vi trolig vite 105 00:05:16,240 --> 00:05:17,760 at denne kolonnen kan holde heltall. 106 00:05:17,760 --> 00:05:21,077 Og det er variasjoner thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT. 107 00:05:21,077 --> 00:05:22,660 Kanskje vi ikke alltid trenger fire biter. 108 00:05:22,660 --> 00:05:26,800 Kanskje vi trenger åtte bytes, og så vi kan bruke disse variasjoner på heltall 109 00:05:26,800 --> 00:05:28,510 å være litt mer plasseffektiv. 110 00:05:28,510 --> 00:05:31,899 Vi kan gjøre desimaltall, vi kan gjøre flyttall. 111 00:05:31,899 --> 00:05:32,940 Dette er ganske lik. 112 00:05:32,940 --> 00:05:34,773 Det er noen forskjeller, og hvis du ville 113 00:05:34,773 --> 00:05:37,330 liker å se opp SQL slags guide, du 114 00:05:37,330 --> 00:05:40,670 kan se hva svak forskjellene mellom dem. 115 00:05:40,670 --> 00:05:43,250 >> Kanskje vi ønsker å lagre informasjon om dato og klokkeslett. 116 00:05:43,250 --> 00:05:47,047 Kanskje vi holder styr på når brukeren sluttet seg til vår hjemmeside, 117 00:05:47,047 --> 00:05:48,880 og så kanskje vi ønsker å ha en kolonne som er 118 00:05:48,880 --> 00:05:52,820 en dato tid eller et tidsstempel som indikerer når brukeren faktisk 119 00:05:52,820 --> 00:05:54,130 meldt seg. 120 00:05:54,130 --> 00:05:56,132 Vi kan gjøre geometrier og linestrings. 121 00:05:56,132 --> 00:05:57,340 Dette er faktisk ganske kult. 122 00:05:57,340 --> 00:06:01,410 Vi kunne kartlegge en geografisk område ved hjelp 123 00:06:01,410 --> 00:06:05,110 GIS-koordinater for å plotte ut et område. 124 00:06:05,110 --> 00:06:08,580 Så kan faktisk lagre den slags av informasjon i et SQL-kolonne. 125 00:06:08,580 --> 00:06:11,390 >> TEKST er bare gigantiske blobs av tekst, kanskje. 126 00:06:11,390 --> 00:06:12,840 Enums er like interessant. 127 00:06:12,840 --> 00:06:16,080 De faktisk eksisterer i C. Vi gjør ikke snakke om dem fordi de ikke er 128 00:06:16,080 --> 00:06:19,110 veldig ofte brukt, minst CS50. 129 00:06:19,110 --> 00:06:22,680 Men det er en nummerert datatype, som er i stand til å holde begrensede verdier. 130 00:06:22,680 --> 00:06:25,940 >> Et virkelig godt eksempel her vil være for å skape en enum hvor syv 131 00:06:25,940 --> 00:06:29,394 Mulige verdier er søndag, mandag, Tirsdag, onsdag, torsdag, fredag, 132 00:06:29,394 --> 00:06:30,060 Lørdag, ikke sant? 133 00:06:30,060 --> 00:06:33,311 Den datatypen dag Uke ikke eksisterer, 134 00:06:33,311 --> 00:06:35,310 men vi kan skape en nummerert datatype slik 135 00:06:35,310 --> 00:06:39,400 at den kolonnen kan bare noensinne holde en av de syv mulige verdier. 136 00:06:39,400 --> 00:06:44,300 Vi har listet opp alle av de mulige verdiene. 137 00:06:44,300 --> 00:06:47,630 >> Da har vi CHAR og VARCHAR, og jeg har farge disse grønn 138 00:06:47,630 --> 00:06:49,505 fordi vi er faktisk kommer til å ta en ekstra 139 00:06:49,505 --> 00:06:51,950 å snakke om forskjellen mellom disse to tingene. 140 00:06:51,950 --> 00:06:55,780 Så CHAR, i motsetning til C hvor CHAR var en enkelt karakter, 141 00:06:55,780 --> 00:07:00,730 i SQL et CHAR refererer til en fast lengde streng. 142 00:07:00,730 --> 00:07:02,620 Og når vi lage dette kolonne, vi faktisk 143 00:07:02,620 --> 00:07:05,070 kan angi lengden av strengen. 144 00:07:05,070 --> 00:07:08,080 >> Så i dette eksempelet, vi kan si CHAR (10). 145 00:07:08,080 --> 00:07:11,190 Det betyr at hvert element i denne kolonnen 146 00:07:11,190 --> 00:07:13,910 vil bestå av 10 byte med informasjon. 147 00:07:13,910 --> 00:07:15,770 Ikke mer, ikke mindre. 148 00:07:15,770 --> 00:07:21,780 Så hvis vi prøver og satt i en 15 bit eller 15 tegn element 149 00:07:21,780 --> 00:07:25,340 eller verdi i denne kolonnen, vi får bare de første 10. 150 00:07:25,340 --> 00:07:27,290 Hvis vi setter i de to tegn lang verdi, 151 00:07:27,290 --> 00:07:30,700 vi kommer til å ha to tegn, og deretter åtte null biter. 152 00:07:30,700 --> 00:07:34,990 Vi vil aldri være mer effektivt enn det. 153 00:07:34,990 --> 00:07:37,727 >> En VARCHAR er typen som våre forestillinger om en streng 154 00:07:37,727 --> 00:07:39,560 at vi er kjent med fra C eller fra PHP. 155 00:07:39,560 --> 00:07:40,830 Det er en variabel lengde streng. 156 00:07:40,830 --> 00:07:42,560 Og når du oppretter denne kolonnen, du bare 157 00:07:42,560 --> 00:07:44,860 spesifisere alle mulige lengder. 158 00:07:44,860 --> 00:07:49,065 Så kanskje 99, eller allment 255. 159 00:07:49,065 --> 00:07:50,440 Det ville være den maksimale lengden. 160 00:07:50,440 --> 00:07:52,890 Og så hvis vi lagret 15 tegnstreng, 161 00:07:52,890 --> 00:07:56,157 vi ville bruke 15 bytes, kanskje 16 byte for null terminator. 162 00:07:56,157 --> 00:07:57,990 Hvis vi lagret en tre-tegnstreng, 163 00:07:57,990 --> 00:08:01,120 vi ville bruke tre eller fire byte. 164 00:08:01,120 --> 00:08:03,050 Men vi ville ikke bruke hele 99. 165 00:08:03,050 --> 00:08:05,190 >> Så hvorfor skulle vi ha begge deler? 166 00:08:05,190 --> 00:08:08,210 Vel, hvis vi trenger å finne ut hvordan lenge noe er med en VARCHAR, 167 00:08:08,210 --> 00:08:10,680 vi må slags iterere over det akkurat som vi gjorde i C 168 00:08:10,680 --> 00:08:12,230 og finne ut hvor det stopper. 169 00:08:12,230 --> 00:08:15,920 Mens hvis vi vet at alt i denne kolonnen er 10 bytes, kanskje 170 00:08:15,920 --> 00:08:19,220 vi vet at informasjonen kan vi hoppe 10 byte, 10 bytes, 10 bytes, 10 bytes, 171 00:08:19,220 --> 00:08:21,790 og alltid finne begynnelsen av strengen. 172 00:08:21,790 --> 00:08:25,210 >> Så vi kan ha noen kastet plass med en røye, 173 00:08:25,210 --> 00:08:28,510 men kanskje det er en trade off av å ha bedre hastighet 174 00:08:28,510 --> 00:08:30,160 navigere databasen. 175 00:08:30,160 --> 00:08:32,330 Men kanskje vi vil ha den fleksibiliteten til en VARCHAR 176 00:08:32,330 --> 00:08:36,710 i stedet for having-- Hvis vår CHAR var 255, men de fleste av våre brukere 177 00:08:36,710 --> 00:08:40,537 var bare å legge inn tre eller fire byte verdt av informasjon eller tre eller fire 178 00:08:40,537 --> 00:08:41,870 tegn igjen av informasjon. 179 00:08:41,870 --> 00:08:44,324 >> Men noen brukere brukte hele 255, kanskje 180 00:08:44,324 --> 00:08:45,990 VARCHAR ville være mer hensiktsmessig der. 181 00:08:45,990 --> 00:08:49,840 Det er liksom en trade off, og vanligvis for det formål å CS50, 182 00:08:49,840 --> 00:08:54,107 du trenger ikke å bekymre deg for mye om om du bruker en CHAR eller VARCHAR. 183 00:08:54,107 --> 00:08:57,190 Men i den virkelige verden, disse tingene gjør saken fordi alle disse kolonnene 184 00:08:57,190 --> 00:08:59,300 ta opp fysisk plass. 185 00:08:59,300 --> 00:09:04,150 Og fysisk plass, i virkelige verden, kommer på en premie. 186 00:09:04,150 --> 00:09:06,800 >> Så en annen vurdering når du bygger et bord 187 00:09:06,800 --> 00:09:09,840 er å velge en kolonne for å være det som kalles en primærnøkkel. 188 00:09:09,840 --> 00:09:14,350 Og en primærnøkkel er en kolonne hvor hver verdi er unik. 189 00:09:14,350 --> 00:09:19,980 Og det betyr at du enkelt kan plukke ut en enkelt rad bare ved å se 190 00:09:19,980 --> 00:09:22,450 på primærnøkkelen for den raden. 191 00:09:22,450 --> 00:09:24,580 Så for eksempel, du generelt, med brukere, 192 00:09:24,580 --> 00:09:27,210 ønsker ikke to brukere som har samme bruker-ID-nummer. 193 00:09:27,210 --> 00:09:28,960 Og så kanskje du har massevis av informasjon, 194 00:09:28,960 --> 00:09:30,793 og kanskje to brukere kan har samme name-- 195 00:09:30,793 --> 00:09:32,650 du har John Smith og John Smith. 196 00:09:32,650 --> 00:09:34,520 Det er ikke nødvendigvis et problem, fordi det er flere folk 197 00:09:34,520 --> 00:09:35,830 i verden som heter John Smith. 198 00:09:35,830 --> 00:09:40,766 Men vi har bare én bruker-ID-nummer 10, en bruker-ID nummer 11, 12, 13. 199 00:09:40,766 --> 00:09:42,640 Vi har to brukere med det samme nummer, 200 00:09:42,640 --> 00:09:46,010 og så kanskje bruker ID-numre ville være en god primærnøkkel. 201 00:09:46,010 --> 00:09:48,610 >> Vi har ikke noe dobbeltarbeid, og vi kan nå entydig 202 00:09:48,610 --> 00:09:52,619 identifisere hver enkelt rad bare ved å se på den kolonnen. 203 00:09:52,619 --> 00:09:55,410 Velge primærnøkler kan faktisk foreta ytterligere tabelloperasjoner 204 00:09:55,410 --> 00:09:59,710 mye enklere fordi du kan utnytte det faktum at enkelte rader vil 205 00:09:59,710 --> 00:10:02,720 være unik, eller en viss kolonne av databasen eller tabell 206 00:10:02,720 --> 00:10:06,030 vil være unik for å plukke ut bestemte rader. 207 00:10:06,030 --> 00:10:08,790 >> Du kan også ha en felles primær nøkkel, som du kan finne anledning 208 00:10:08,790 --> 00:10:11,720 å bruke, som er bare en kombinasjon av to kolonnene 209 00:10:11,720 --> 00:10:13,280 er garantert å være unik. 210 00:10:13,280 --> 00:10:16,410 Så kanskje du har en kolonne som er As og Bs, 211 00:10:16,410 --> 00:10:19,290 en kolonne som er en, to, og tre, men du vil bare noensinne 212 00:10:19,290 --> 00:10:23,660 ha en enkelt A1, en enkelt A2, og så videre og så videre. 213 00:10:23,660 --> 00:10:28,980 Men du kan ha en B2, en C2, eller en A1, A2, A3, A4. 214 00:10:28,980 --> 00:10:32,840 Så du kan ha flere As, multippel B, flere seg, flere toere, 215 00:10:32,840 --> 00:10:38,567 men du kan bare trenger en enkelt A1, B2, C3, og så videre. 216 00:10:38,567 --> 00:10:40,400 Så som jeg sa, er SQL en programmeringsspråk, 217 00:10:40,400 --> 00:10:42,024 men det har en ganske begrenset ordforråd. 218 00:10:42,024 --> 00:10:44,880 Det er ikke helt like ekspansiv som C og PHP og andre språk 219 00:10:44,880 --> 00:10:46,350 at vi snakker i kurset. 220 00:10:46,350 --> 00:10:49,960 Det er mer ordrik en språk enn hva vi er 221 00:10:49,960 --> 00:10:52,789 kommer til å snakke om i denne video, fordi i denne videoen 222 00:10:52,789 --> 00:10:54,830 vi kommer til å snakke om fire operasjoner som vi 223 00:10:54,830 --> 00:10:55,720 kan utføre på et bord. 224 00:10:55,720 --> 00:10:56,761 >> Det er mer enn dette. 225 00:10:56,761 --> 00:10:58,730 Vi kan gjøre mer enn dette, men for vårt formål 226 00:10:58,730 --> 00:11:02,250 vi generelt skal bruke Bare fire operations-- innsats, 227 00:11:02,250 --> 00:11:05,360 velge, oppdatere og slette. 228 00:11:05,360 --> 00:11:08,750 Og du kan sikkert intuitivt gjette hva alle disse fire tingene gjør. 229 00:11:08,750 --> 00:11:12,520 Men vi vil gå inn i en litt detalj på hver enkelt. 230 00:11:12,520 --> 00:11:15,780 >> Så for anvendelsen av denne video, la oss anta 231 00:11:15,780 --> 00:11:18,870 vi har de følgende to tabeller i en enkelt database. 232 00:11:18,870 --> 00:11:23,460 Vi har en tabell som heter Brukere som har fire columns-- ID-nummer, brukernavn, 233 00:11:23,460 --> 00:11:25,350 passord, og fullt navn. 234 00:11:25,350 --> 00:11:27,430 Og vi har en annen bord i samme database 235 00:11:27,430 --> 00:11:32,129 kalt Moms som bare lagrer informasjon om et brukernavn og en mor. 236 00:11:32,129 --> 00:11:33,920 Så for alle eksempler i denne videoen, vil vi 237 00:11:33,920 --> 00:11:37,945 skal bruke denne databasen og påfølgende oppdateringer til den. 238 00:11:37,945 --> 00:11:40,070 Så la oss si at vi ønsker å legge til informasjon i en tabell. 239 00:11:40,070 --> 00:11:44,460 Det er det innsatsen operasjonen gjør. 240 00:11:44,460 --> 00:11:46,550 I å forklare alle disse kommandoene, jeg kommer 241 00:11:46,550 --> 00:11:48,860 for å gi deg en generell skjelett å bruke. 242 00:11:48,860 --> 00:11:51,661 Fordi utgangspunktet, spørringene skal se ganske lik, 243 00:11:51,661 --> 00:11:54,660 vi bare kommer til å være i endring litt forskjellige biter av informasjon 244 00:11:54,660 --> 00:11:56,750 å gjøre forskjellige ting med tabellen. 245 00:11:56,750 --> 00:11:59,200 >> Så for INSERT, skjelettet ser slags som dette. 246 00:11:59,200 --> 00:12:02,230 Vi ønsker å sette inn en bestemt tabell. 247 00:12:02,230 --> 00:12:05,290 Så har vi en åpen parentes og en liste over kolonner 248 00:12:05,290 --> 00:12:08,070 at vi ønsker å sette verdier inn. 249 00:12:08,070 --> 00:12:10,974 Nære parentes, den følgende verdier, og deretter 250 00:12:10,974 --> 00:12:13,390 igjen, lister vi ut verdiene vi ønsker å sette i tabellen. 251 00:12:13,390 --> 00:12:15,950 >> Slik at et eksempel på denne være følgende. 252 00:12:15,950 --> 00:12:19,170 Jeg ønsker å sette inn i tabellen Brukerne følgende columns-- 253 00:12:19,170 --> 00:12:21,010 brukernavn, passord, og fullt navn. 254 00:12:21,010 --> 00:12:25,282 Så en ny rad hvor jeg setter i de tre kolonner og vi er 255 00:12:25,282 --> 00:12:30,030 kommer til å sette i verdiene Newman, USMAIL, og Newman. 256 00:12:30,030 --> 00:12:32,730 Så i dette tilfellet, er jeg sette små bokstaver Newman 257 00:12:32,730 --> 00:12:38,710 inn brukernavn kolonne, passordet USMAIL, og fullt navn hovedstaden N 258 00:12:38,710 --> 00:12:41,940 Newman inn fullt navn kolonnen. 259 00:12:41,940 --> 00:12:44,240 >> Så her er hva databasen så ut før. 260 00:12:44,240 --> 00:12:48,250 Her er hva brukerne tabellen på top så ut før vi gjorde dette. 261 00:12:48,250 --> 00:12:50,760 Etter at vi utfører denne spørring, får vi dette. 262 00:12:50,760 --> 00:12:54,790 Vi har lagt til en ny rad i tabellen. 263 00:12:54,790 --> 00:12:56,810 Men legg merke til en ting at jeg ikke spesifisere, 264 00:12:56,810 --> 00:12:59,880 men noe jeg har en verdi for, som er denne 12 her. 265 00:12:59,880 --> 00:13:02,820 Jeg sa ikke at jeg ønsket å sette ID-nummer i det. 266 00:13:02,820 --> 00:13:04,900 Jeg ønsket å sette brukernavn, passord, fullt navn. 267 00:13:04,900 --> 00:13:06,440 Og jeg gjorde det, er det helt greit. 268 00:13:06,440 --> 00:13:07,760 >> Men jeg fikk også denne 12. 269 00:13:07,760 --> 00:13:09,490 Hvorfor fikk jeg denne 12? 270 00:13:09,490 --> 00:13:12,904 Vel, det viser seg at når du definerer 271 00:13:12,904 --> 00:13:15,570 en kolonne som kommer til å være din primærnøkkel, som vanligvis er, 272 00:13:15,570 --> 00:13:16,510 som jeg sa, et ID-nummer. 273 00:13:16,510 --> 00:13:18,718 Det er ikke alltid nødvendigvis kommer til å være et ID-nummer, 274 00:13:18,718 --> 00:13:22,380 men det er vanligvis en god idé å være en slags heltall. 275 00:13:22,380 --> 00:13:25,950 Du har et alternativ i phpMyAdmin når du oppretter databasen 276 00:13:25,950 --> 00:13:31,130 eller tabellen for å sette det kolonne som auto inkrementeringen. 277 00:13:31,130 --> 00:13:34,520 >> Som er en veldig god idé når du arbeider med en primærnøkkel, 278 00:13:34,520 --> 00:13:39,330 fordi du vil at hver verdi i den kolonnen å være unik. 279 00:13:39,330 --> 00:13:43,310 Og hvis du har glemt å spesifisere det for mer enn én person, 280 00:13:43,310 --> 00:13:46,240 du har nå en situasjon hvor at kolonnen er ikke lenger unik. 281 00:13:46,240 --> 00:13:50,200 Du har to blanks, så du kan ikke lenger identifiserer en column-- 282 00:13:50,200 --> 00:13:54,150 eller du kan ikke lenger entydig identifisere en rad basert på den kolonnen. 283 00:13:54,150 --> 00:13:57,010 Den har mistet all sin verdi som primærnøkkel. 284 00:13:57,010 --> 00:14:02,010 >> Og så tilsynelatende hva jeg har gjort her er konfigurert bruker-ID 285 00:14:02,010 --> 00:14:07,790 Kolonnen til auto tilvekst slik at hver gang jeg legge til informasjon i tabellen, 286 00:14:07,790 --> 00:14:12,220 det vil automatisk gi meg en verdi for primærnøkkelen. 287 00:14:12,220 --> 00:14:15,570 Så jeg kan aldri glemme å gjøre det fordi databasen vil gjøre det for meg. 288 00:14:15,570 --> 00:14:16,587 Så det er litt fint. 289 00:14:16,587 --> 00:14:18,670 Og så det er derfor vi får 12 i det, fordi jeg har 290 00:14:18,670 --> 00:14:21,772 at kolonnen opp til auto tilvekst innstilt. 291 00:14:21,772 --> 00:14:23,730 Hvis jeg har lagt noen andre det ville være 13, hvis jeg har lagt 292 00:14:23,730 --> 00:14:27,890 noen andre det ville være 14, og så videre. 293 00:14:27,890 --> 00:14:30,190 >> Så la oss bare gjøre én mer innsetting. 294 00:14:30,190 --> 00:14:34,530 Vi skal sette inn i moms bordet, i Spesielt brukernavn og mor 295 00:14:34,530 --> 00:14:37,390 kolonne, verdiene Kramer og Babs Kramer. 296 00:14:37,390 --> 00:14:39,140 Og så hadde vi dette før. 297 00:14:39,140 --> 00:14:41,800 Etter at vi utfører det SQL-spørring, har vi dette. 298 00:14:41,800 --> 00:14:47,290 Vi har lagt til Kramer og Babs Kramer til moms bordet. 299 00:14:47,290 --> 00:14:48,350 >> Så det er å sette inn. 300 00:14:48,350 --> 00:14:51,850 SELECT er det vi bruker til å trekke ut informasjon fra bordet. 301 00:14:51,850 --> 00:14:54,390 Så dette er hvordan vi får informasjon ut av databasen. 302 00:14:54,390 --> 00:14:59,589 Og så velge kommandoer kommer til å være svært ofte brukt i programmering. 303 00:14:59,589 --> 00:15:02,130 Den generelle framework-- den Generelt skjelett ser slik ut. 304 00:15:02,130 --> 00:15:06,550 Velg et sett av kolonner fra et bord, og deretter eventuelt 305 00:15:06,550 --> 00:15:11,090 du kan angi en condition-- eller det vi vanligvis kaller et predikat, 306 00:15:11,090 --> 00:15:13,010 er vanligvis betegnelsen vi bruker i SQL. 307 00:15:13,010 --> 00:15:16,490 >> Men det er i utgangspunktet hva bestemte rader du ønsker å få. 308 00:15:16,490 --> 00:15:19,100 Hvis du vil, i stedet for å få alt, begrense det ned, 309 00:15:19,100 --> 00:15:20,060 dette er hvor du vil gjøre det. 310 00:15:20,060 --> 00:15:22,777 Og så eventuelt kan du også bestilling av en bestemt kolonne. 311 00:15:22,777 --> 00:15:25,860 Så kanskje du ønsker å ha ting sortert alfabetisk basert på en kolonne 312 00:15:25,860 --> 00:15:27,540 eller alfabetisk basert på en annen. 313 00:15:27,540 --> 00:15:30,610 >> Igjen, WHERE og ORDER BY er valgfrie. 314 00:15:30,610 --> 00:15:32,681 Men de vil trolig være useful-- spesielt 315 00:15:32,681 --> 00:15:34,680 HVOR vil være nyttig å innskrenke slik at du ikke 316 00:15:34,680 --> 00:15:37,460 får hele databasen tilbake og må behandle den, får du bare 317 00:15:37,460 --> 00:15:39,300 bitene av det som du bryr deg om. 318 00:15:39,300 --> 00:15:44,932 Så for eksempel, kanskje jeg vil velge ID-nummer og fullt navn fra brukerne. 319 00:15:44,932 --> 00:15:46,140 Så hva kan dette se ut? 320 00:15:46,140 --> 00:15:48,270 Så her er min brukere bord. 321 00:15:48,270 --> 00:15:51,080 Jeg vil velge idnum og fullt navn fra brukerne. 322 00:15:51,080 --> 00:15:52,300 Hva jeg kommer til å få? 323 00:15:52,300 --> 00:15:53,580 Jeg kommer til å få dette. 324 00:15:53,580 --> 00:15:56,930 Jeg gjorde ikke begrense det ned, så jeg er å få ID-nummer for hver rad 325 00:15:56,930 --> 00:16:00,850 og jeg får den fulle navn fra hver rad. 326 00:16:00,850 --> 00:16:02,210 >> OK. 327 00:16:02,210 --> 00:16:05,640 Hva om jeg ønsker å velge passord fra brukerne WHERE-- så nå 328 00:16:05,640 --> 00:16:10,370 Jeg legger til en tilstand, en predicate-- hvor idnum er mindre enn 12. 329 00:16:10,370 --> 00:16:13,660 Så her er min database på nytt, mitt brukere tabell toppen. 330 00:16:13,660 --> 00:16:17,030 Hva jeg kommer til å få hvis jeg ønsker å Velg denne informasjonen, passord, 331 00:16:17,030 --> 00:16:21,550 hvor bruker-ID eller idnum er mindre enn 12? 332 00:16:21,550 --> 00:16:24,910 Jeg kommer til å få dette informasjon tilbake, ikke sant? 333 00:16:24,910 --> 00:16:29,170 Det hender at idnum er 10, mindre enn 12, ID nummer 11 mindre enn 12. 334 00:16:29,170 --> 00:16:32,160 Jeg får passordet for de radene. 335 00:16:32,160 --> 00:16:33,914 Det er det jeg ba om. 336 00:16:33,914 --> 00:16:34,580 Hva med dette? 337 00:16:34,580 --> 00:16:39,170 Hva om jeg ønsker å velge stjerne fra moms bordet der brukernavn er lik Jerry? 338 00:16:39,170 --> 00:16:43,780 OK, er den spesielle velger stjerne slags wild card såkalte 339 00:16:43,780 --> 00:16:45,670 som vi bruker for å få alt. 340 00:16:45,670 --> 00:16:48,620 Så de sier velg brukernavn komma mor, som 341 00:16:48,620 --> 00:16:51,060 skjedde til å være den eneste to kolonner av denne tabellen, 342 00:16:51,060 --> 00:16:53,260 Jeg kan bare velge stjerne og få alt 343 00:16:53,260 --> 00:16:55,030 hvor brukernavnet er lik Jerry. 344 00:16:55,030 --> 00:16:59,380 Og så det er hva jeg ville få hvis jeg gjorde det aktuelle søket. 345 00:16:59,380 --> 00:17:01,810 >> Nå, databaser er stor fordi de tillater 346 00:17:01,810 --> 00:17:06,074 oss å organisere informasjonen kanskje litt mer effektivt enn vi 347 00:17:06,074 --> 00:17:06,740 ellers ville. 348 00:17:06,740 --> 00:17:10,240 Vi trenger ikke nødvendigvis å lagre hver relevant opplysning 349 00:17:10,240 --> 00:17:12,230 om en bruker i den samme tabellen. 350 00:17:12,230 --> 00:17:13,730 Vi hadde to bord der. 351 00:17:13,730 --> 00:17:15,734 >> Vi trenger å lagre alles mors navn, 352 00:17:15,734 --> 00:17:18,900 og kanskje har vi ikke personnummer nummer, har vi deres fødselsdato. 353 00:17:18,900 --> 00:17:21,819 Som ikke alltid trenger til å være i den samme tabell. 354 00:17:21,819 --> 00:17:25,339 Så lenge vi kan definere relasjoner mellom tables-- 355 00:17:25,339 --> 00:17:28,440 og det er der det relasjonelle database sikt slags kommer 356 00:17:28,440 --> 00:17:32,130 inn play-- så lenge vi kan definere relasjoner mellom bordene, 357 00:17:32,130 --> 00:17:35,545 vi kan liksom compartmentalize eller abstrakte ting en vei, 358 00:17:35,545 --> 00:17:37,670 hvor vi bare har veldig viktig informasjon 359 00:17:37,670 --> 00:17:39,270 vi bryr oss om i brukerens tabellen. 360 00:17:39,270 --> 00:17:43,220 Og så har vi hjelpeinformasjon eller ekstra informasjon i andre tabeller 361 00:17:43,220 --> 00:17:48,260 at vi kan koble tilbake til hoved brukere bord på en bestemt måte. 362 00:17:48,260 --> 00:17:52,200 >> Så her har vi disse to tabellene, men det er en sammenheng mellom dem, 363 00:17:52,200 --> 00:17:53,010 høyre? 364 00:17:53,010 --> 00:17:55,070 Det virker som brukernavn kan være noe 365 00:17:55,070 --> 00:17:59,909 som finnes i vanlig mellom disse to forskjellige tabeller. 366 00:17:59,909 --> 00:18:01,700 Så hva om vi nå har en situasjon hvor vi 367 00:18:01,700 --> 00:18:06,046 ønsker å få til en bruker fullt navn fra brukerens bordet, og morens 368 00:18:06,046 --> 00:18:07,170 navn fra mor bordet? 369 00:18:07,170 --> 00:18:10,960 Vi har ikke en måte å komme det som det står, ikke sant? 370 00:18:10,960 --> 00:18:17,790 Det finnes ingen enkel tabell som inneholder både fullt navn og mors navn. 371 00:18:17,790 --> 00:18:20,400 Vi har ikke den muligheten fra det vi har sett så langt. 372 00:18:20,400 --> 00:18:22,950 >> Og så må vi innføre ideen om en BLI. 373 00:18:22,950 --> 00:18:24,857 Og tiltrer er trolig den mest complex-- 374 00:18:24,857 --> 00:18:27,940 det er egentlig mest kompleks operasjon vi kommer til å snakke om i videoen. 375 00:18:27,940 --> 00:18:30,040 De er litt komplisert, men når du først får taket på det, 376 00:18:30,040 --> 00:18:31,248 de er faktisk ikke så ille. 377 00:18:31,248 --> 00:18:32,820 Det er bare et spesialtilfelle av en SELECT. 378 00:18:32,820 --> 00:18:37,120 Vi kommer til å velge et sett med kolonner fra en tabell å bli med 379 00:18:37,120 --> 00:18:40,650 i en andre tabell på noen predikat. 380 00:18:40,650 --> 00:18:45,340 >> I dette tilfellet tenker på det liker dette-- tabell en er en sirkel over her, 381 00:18:45,340 --> 00:18:47,530 Tabellen to er en annen sirkel over her. 382 00:18:47,530 --> 00:18:49,410 Og at predikatet del i midten, er det 383 00:18:49,410 --> 00:18:51,701 liksom som om du tror omtrent som et Venn-diagram, hva 384 00:18:51,701 --> 00:18:52,670 har de til felles? 385 00:18:52,670 --> 00:18:55,960 Vi ønsker å knytte disse to tabellene basert på hva de har til felles 386 00:18:55,960 --> 00:19:01,230 og skape denne hypotetiske tabellen som er en sammenslåing av de to sammen. 387 00:19:01,230 --> 00:19:03,480 Så vi får se dette i et eksempel og kanskje det vil hjelpe 388 00:19:03,480 --> 00:19:04,521 klare det opp litt. 389 00:19:04,521 --> 00:19:09,260 Så kanskje du ønsker å velge user.fullname og moms.mother 390 00:19:09,260 --> 00:19:13,220 fra brukere som kobler i moms bord i enhver situasjon 391 00:19:13,220 --> 00:19:16,790 hvor brukernavnet kolonne er den samme mellom dem. 392 00:19:16,790 --> 00:19:19,240 Og dette er en ny syntaks her, denne brukeren. 393 00:19:19,240 --> 00:19:20,460 og moms .. 394 00:19:20,460 --> 00:19:26,697 Hvis jeg gjør flere tabeller sammen, kan jeg angi en tabell. 395 00:19:26,697 --> 00:19:29,530 Jeg kan skille spesielt på som på helt nederst der. 396 00:19:29,530 --> 00:19:33,220 Jeg kan skille brukernavn kolonne i tabellen brukere 397 00:19:33,220 --> 00:19:36,010 fra brukernavnet kolonnen i moms bord, som er otherwise-- 398 00:19:36,010 --> 00:19:38,070 hvis vi bare sa brukernavn lik brukernavn, som ikke virkelig 399 00:19:38,070 --> 00:19:38,970 bety noe. 400 00:19:38,970 --> 00:19:41,440 Vi ønsker å gjøre det der de passer. 401 00:19:41,440 --> 00:19:46,080 >> Så jeg kan spesifisere bordet og Kolonnen navn i tilfelle av en situasjon 402 00:19:46,080 --> 00:19:48,370 der det ville være uklart hva jeg snakker om. 403 00:19:48,370 --> 00:19:51,880 Så det er alt jeg gjør det er jeg sa denne kolonnen fra denne tabellen, 404 00:19:51,880 --> 00:19:54,020 og å være veldig eksplisitt. 405 00:19:54,020 --> 00:19:56,810 Så igjen, jeg har valgt fullt navn og morens navn 406 00:19:56,810 --> 00:20:00,950 fra brukere tabellen koblet sammen med moms bord i enhver situasjon 407 00:20:00,950 --> 00:20:05,960 der de deler som column-- de deler som brukernavn forestillingen. 408 00:20:05,960 --> 00:20:08,580 >> Så her er tabellene vi hadde før. 409 00:20:08,580 --> 00:20:12,210 Dette er staten vår database som det finnes akkurat nå. 410 00:20:12,210 --> 00:20:16,390 Informasjonen vi trekke ut er dette til å begynne med. 411 00:20:16,390 --> 00:20:19,820 Dette er den nye tabellen vi kommer for å lage kombinere disse sammen. 412 00:20:19,820 --> 00:20:23,585 Og legg merke til vi er ikke fremheve Newmans rad i brukerens bord, 413 00:20:23,585 --> 00:20:25,960 og vi er ikke fremheve Kramers rad i moms tabellen 414 00:20:25,960 --> 00:20:31,250 fordi ingen av dem eksisterer i både sets-- i begge tabellene. 415 00:20:31,250 --> 00:20:36,260 >> Den eneste informasjonen som er i vanlig mellom dem er Jerry er i begge tabellene 416 00:20:36,260 --> 00:20:39,100 og gcostanza er i begge tabellene. 417 00:20:39,100 --> 00:20:42,620 Og så når vi gjør SQL BLI, hva vi get-- og vi gjør faktisk få dette. 418 00:20:42,620 --> 00:20:44,830 Det er liksom en midlertidig variabel. 419 00:20:44,830 --> 00:20:47,330 Det er som en hypotetisk Sammenslåingen av de to tabellene. 420 00:20:47,330 --> 00:20:49,930 Vi har faktisk få noe som dette, hvor 421 00:20:49,930 --> 00:20:54,730 Vi har slått sammen bordene på informasjon som de har til felles. 422 00:20:54,730 --> 00:20:58,334 >> Så merker at users.username og moms.username kolonne, 423 00:20:58,334 --> 00:20:59,250 det er akkurat det samme. 424 00:20:59,250 --> 00:21:01,820 Det var den informasjonen som var konsistent fra brukerne 425 00:21:01,820 --> 00:21:02,890 bord og moms tabellen. 426 00:21:02,890 --> 00:21:04,270 Og så har vi slått sammen dem sammen. 427 00:21:04,270 --> 00:21:06,919 Vi forkastet Kramer fordi han ikke eksisterer i tabellen brukere, 428 00:21:06,919 --> 00:21:09,710 og vi forkastet Newman, fordi han ikke eksisterte i moms tabellen. 429 00:21:09,710 --> 00:21:16,450 Så dette er hypotetisk fusjon bruker BLI drift av SELECT. 430 00:21:16,450 --> 00:21:21,250 >> Og da vi var på jakt etter den brukerens fulle navn og brukerens mor, 431 00:21:21,250 --> 00:21:24,999 og så dette er informasjon som vi ville få fra den generelle søket 432 00:21:24,999 --> 00:21:26,040 at vi har gjort med SELECT. 433 00:21:26,040 --> 00:21:28,873 Så vi sluttet bordene sammen og vi ekstrahert disse to kolonner 434 00:21:28,873 --> 00:21:31,610 og så det er hva vi ville få. 435 00:21:31,610 --> 00:21:33,370 Men SQL blir en slags komplisert. 436 00:21:33,370 --> 00:21:36,770 Du vil sannsynligvis ikke gjøre dem for mye, men bare har noen ide om skjelettet 437 00:21:36,770 --> 00:21:41,992 som du kan bruke til å slå sammen to tabeller sammen hvis du måtte. 438 00:21:41,992 --> 00:21:43,700 De to siste er en litt enklere jeg lover. 439 00:21:43,700 --> 00:21:48,040 Så oppdatering, kan vi bruke UPDATE for å endre informasjon i et bord. 440 00:21:48,040 --> 00:21:53,880 Det generelle formatet er UPDATE noen tabellen, angi noen kolonne til en viss verdi 441 00:21:53,880 --> 00:21:55,540 HVOR noen predikat er fornøyd. 442 00:21:55,540 --> 00:21:57,850 Så for eksempel, kan vi ønsker å oppdatere brukerne tabellen 443 00:21:57,850 --> 00:22:04,400 og angi passordet til yada yada, hvor ID-nummeret er 10. 444 00:22:04,400 --> 00:22:06,400 >> Så i dette tilfellet, er vi oppdatering av brukere tabellen. 445 00:22:06,400 --> 00:22:08,275 ID-nummeret er ti for at første rad der, 446 00:22:08,275 --> 00:22:10,690 og vi ønsker å oppdatere passord for å yada yada. 447 00:22:10,690 --> 00:22:12,170 Og så det er hva som ville skje. 448 00:22:12,170 --> 00:22:13,628 Det er ganske enkelt, ikke sant? 449 00:22:13,628 --> 00:22:17,990 Det er bare en veldig enkel modifikasjon av tabellen. 450 00:22:17,990 --> 00:22:22,250 >> SLETT blir operasjonen vi pleide å fjerne informasjon fra en tabell. 451 00:22:22,250 --> 00:22:24,817 DELETE FROM tabell WHERE noen predikat er fornøyd. 452 00:22:24,817 --> 00:22:26,900 Vi ønsker å slette fra Brukerne bord for eksempel 453 00:22:26,900 --> 00:22:28,254 hvor brukernavnet er Newman. 454 00:22:28,254 --> 00:22:31,420 Du kan sikkert gjette hva som kommer til skje her etter at vi henrette at SQL 455 00:22:31,420 --> 00:22:35,790 spørring, er Newman gått fra bordet. 456 00:22:35,790 --> 00:22:40,460 >> Så alle disse operasjonene, som jeg har sagt, er veldig lett å gjøre i phpMyAdmin. 457 00:22:40,460 --> 00:22:43,020 Det er et meget brukervennlig grensesnitt. 458 00:22:43,020 --> 00:22:45,930 Men det krever manuell innsats. 459 00:22:45,930 --> 00:22:47,840 Vi ønsker ikke å ansette manuell innsats. 460 00:22:47,840 --> 00:22:51,280 Vi ønsker at våre programmer til gjøre dette for oss, ikke sant? 461 00:22:51,280 --> 00:22:53,190 Så vi vil kanskje gjøre dette programmatisk. 462 00:22:53,190 --> 00:22:56,410 Vi ønsker å innlemme SQL og har noe annet å gjøre dette for oss. 463 00:22:56,410 --> 00:23:02,710 >> Men hva har vi sett som gjør at oss å programma gjøre noe? 464 00:23:02,710 --> 00:23:03,690 Vi har sett PHP, ikke sant? 465 00:23:03,690 --> 00:23:05,760 Det introduserer noen dynamikk inn i våre programmer. 466 00:23:05,760 --> 00:23:10,430 Og så heldigvis, SQL og PHP spiller veldig fint sammen. 467 00:23:10,430 --> 00:23:13,230 Det er en funksjon i PHP kalt spørring, som kan brukes. 468 00:23:13,230 --> 00:23:15,870 Og du kan passere som parameter eller argumentet 469 00:23:15,870 --> 00:23:19,210 til å spørre en SQL-spørring som du ønsker å utføre. 470 00:23:19,210 --> 00:23:23,250 Og PHP vil gjøre det på dine vegne. 471 00:23:23,250 --> 00:23:25,564 >> Så etter at du har koblet til databasen med PHP, 472 00:23:25,564 --> 00:23:26,980 det er to primærvalg du gjør dette. 473 00:23:26,980 --> 00:23:29,230 Det er noe som heter MySQLi og noe som kalles PUD. 474 00:23:29,230 --> 00:23:31,063 Vi vil ikke gå inn i en stor Mengden detalj der. 475 00:23:31,063 --> 00:23:32,957 I CS50 bruker vi PUD. 476 00:23:32,957 --> 00:23:34,790 Etter at du har koblet til databasen, du 477 00:23:34,790 --> 00:23:40,980 Deretter kan du gjøre spørringer i databasen ved å sende spørringene som argumenter 478 00:23:40,980 --> 00:23:42,730 til PHP funksjoner. 479 00:23:42,730 --> 00:23:46,460 Og når du gjør det, lagrer du den resultatsett i en assosiativ array. 480 00:23:46,460 --> 00:23:50,290 >> Og vi vet hvordan de skal jobbe med assosiative arrays i PHP. 481 00:23:50,290 --> 00:23:52,630 Så jeg kan si noe som dette-- $ results-- 482 00:23:52,630 --> 00:23:55,470 dette er i PHP-- lik spørring. 483 00:23:55,470 --> 00:23:57,660 Og deretter innsiden av spørring funksjon som argument 484 00:23:57,660 --> 00:24:00,130 at jeg har bestått å spørre som ser ut som SQL. 485 00:24:00,130 --> 00:24:01,160 Og faktisk det er SQL. 486 00:24:01,160 --> 00:24:05,700 Det er søkestrengen som jeg ville liker å kjøre på min database. 487 00:24:05,700 --> 00:24:09,250 >> Og så i rødt, er dette PHP. 488 00:24:09,250 --> 00:24:11,890 Dette er SQL at jeg er integrere i PHP ved å gjøre 489 00:24:11,890 --> 00:24:15,020 det argumentet til søket funksjonen. 490 00:24:15,020 --> 00:24:19,640 Jeg vil velge fullname fra brukere der ID-nummer tilsvarer 10. 491 00:24:19,640 --> 00:24:22,560 Og så kanskje etter at jeg har gjort det, Jeg kan si noe sånt som dette. 492 00:24:22,560 --> 00:24:25,550 Jeg ønsker å skrive ut meldings Takk for å logge deg inn. 493 00:24:25,550 --> 00:24:32,530 >> Og jeg vil ha det interpolate-- jeg vil ha å interpolere $ resultater fullt navn. 494 00:24:32,530 --> 00:24:36,280 Og så det er hvordan jeg jobber med det assosiativ array at jeg kom tilbake. 495 00:24:36,280 --> 00:24:39,730 $ resultater fullt navn ville utgangspunktet ende opp med å skrive ut, 496 00:24:39,730 --> 00:24:42,870 takk for å logge inn, Jerry Seinfeld. 497 00:24:42,870 --> 00:24:46,570 Det var fullt navn hvor idnum lik 10. 498 00:24:46,570 --> 00:24:48,850 >> Og så alt jeg gjør er jeg now-- jeg lagret 499 00:24:48,850 --> 00:24:52,780 min spørring, resultatene av spørringen og resulterer i en assosiativ array, 500 00:24:52,780 --> 00:24:56,330 og fullt navn er navnet på kolonnen jeg fikk for. 501 00:24:56,330 --> 00:25:01,010 Så det er min nøkkel til resultatene assosiativ array som jeg vil. 502 00:25:01,010 --> 00:25:05,930 Så takk for å logge inn, $ resultater, fullt navn vil skrive ut, vil holde 503 00:25:05,930 --> 00:25:08,654 midt i mellom de krøllete bukseseler, Jerry Seinfeld. 504 00:25:08,654 --> 00:25:11,820 Og jeg liker å skrive ut meldingen Takk for å logge på Jerry Seinfeld. 505 00:25:11,820 --> 00:25:16,652 >> Nå, vi sannsynligvis ikke vil vanskelig kode sånt i, ikke sant? 506 00:25:16,652 --> 00:25:19,860 Vi vil kanskje gjøre noe sånt print f, hvor vi kan erstatte og kanskje 507 00:25:19,860 --> 00:25:22,443 samle annen informasjon, eller kanskje har spørringen prosessen 508 00:25:22,443 --> 00:25:23,370 forskjellig informasjon. 509 00:25:23,370 --> 00:25:27,920 Og så spørring, har spørringen funksjon denne oppfatningen av typen erstatninger 510 00:25:27,920 --> 00:25:32,310 svært lik for å skrive ut f prosent s og prosent c, er spørsmålstegn. 511 00:25:32,310 --> 00:25:34,290 >> Og vi kan bruke spørsmål merker veldig analogt 512 00:25:34,290 --> 00:25:38,400 å skrive ut f for å erstatte variabler. 513 00:25:38,400 --> 00:25:44,120 Så kanskje din bruker logget inn tidligere, og du lagret deres bruker-ID-nummer 514 00:25:44,120 --> 00:25:51,710 i $ _SESSION av PHP super globalt i nøkkelen ID. 515 00:25:51,710 --> 00:25:55,947 Så kanskje etter at de logget inn, du setter $ _SESSION ID er lik 10, 516 00:25:55,947 --> 00:25:58,280 ekstrapolering fra eksempelet vi bare så en andre siden. 517 00:25:58,280 --> 00:26:01,960 >> Og så når vi faktisk utfører Dette søket resultatene nå, 518 00:26:01,960 --> 00:26:08,440 det ville koble til 10, eller hva den $ _SESSION ID verdi. 519 00:26:08,440 --> 00:26:10,790 Og slik som tillater oss å være litt mer dynamisk. 520 00:26:10,790 --> 00:26:12,699 Vi er ikke vanskelig koding ting i lenger. 521 00:26:12,699 --> 00:26:14,490 Vi lagrer informasjon et sted og deretter 522 00:26:14,490 --> 00:26:18,924 Vi kan bruke denne informasjonen på nytt for å slags generalisere hva vi ønsker å gjøre, 523 00:26:18,924 --> 00:26:21,090 og bare plug-in og endring oppførselen til vår side 524 00:26:21,090 --> 00:26:26,489 basert på hva brukeren ID-nummer faktisk er etter at de har logget inn. 525 00:26:26,489 --> 00:26:28,530 Det er også mulig, men at resultatene satt 526 00:26:28,530 --> 00:26:30,840 kan bestå av flere rader. 527 00:26:30,840 --> 00:26:33,990 I så fall, har du en rekke arrays-- 528 00:26:33,990 --> 00:26:35,334 en rekke assosiative arrays. 529 00:26:35,334 --> 00:26:37,000 Og du trenger bare å iterere gjennom den. 530 00:26:37,000 --> 00:26:41,950 Og vi vet hvordan de skal reagere gjennom en array i PHP, ikke sant? 531 00:26:41,950 --> 00:26:45,600 Så her er trolig den mest komplekse ting vi har sett så langt. 532 00:26:45,600 --> 00:26:49,640 Det faktisk integrerer tre språk sammen. 533 00:26:49,640 --> 00:26:52,920 >> Her i rødt, er dette litt HTML. 534 00:26:52,920 --> 00:26:56,872 Jeg tydeligvis starting-- dette er en bit med noen HTML som jeg har. 535 00:26:56,872 --> 00:26:59,580 Jeg begynner et nytt avsnitt som sier de moms av TV Seinfeld. 536 00:26:59,580 --> 00:27:02,350 Og deretter umiddelbart etterpå Jeg begynner et bord. 537 00:27:02,350 --> 00:27:06,060 Og så etter det, jeg har litt PHP, ikke sant? 538 00:27:06,060 --> 00:27:08,229 Jeg har alt dette PHP-kode i det. 539 00:27:08,229 --> 00:27:09,645 Jeg tilsynelatende kommer lage en spørring. 540 00:27:09,645 --> 00:27:14,180 Og for å gjøre spørringen, kommer jeg til å skal bruke SELECT mødre Fra moms. 541 00:27:14,180 --> 00:27:15,970 >> Så dette er getting-- dette er SQL. 542 00:27:15,970 --> 00:27:17,300 Så den blå er SQL. 543 00:27:17,300 --> 00:27:19,680 Den røde vi så et sekund siden var HTML. 544 00:27:19,680 --> 00:27:21,360 Og den grønne her er PHP. 545 00:27:21,360 --> 00:27:23,400 Så jeg gjør en spørring til min database, er jeg 546 00:27:23,400 --> 00:27:26,040 velge alle mødre i moms tabellen. 547 00:27:26,040 --> 00:27:30,710 Ikke bare begrense det ned til bestemte rad, jeg ber for dem alle. 548 00:27:30,710 --> 00:27:33,290 >> Så sjekker jeg om resultatet er ikke lik lik falsk. 549 00:27:33,290 --> 00:27:37,410 Dette er bare min måte å sjekke sort av hvis resultatene ikke er lik null, 550 00:27:37,410 --> 00:27:40,260 at vi vil se c for eksempel. 551 00:27:40,260 --> 00:27:44,000 I utgangspunktet er dette bare kontrollerer sikker på at det faktisk fikk data tilbake. 552 00:27:44,000 --> 00:27:47,041 Fordi jeg ikke ønsker å starte utskriften ut data hvis jeg ikke får noen data. 553 00:27:47,041 --> 00:27:50,690 Da for hver resultater som et resultat foreach syntaks fra PHP, alt jeg gjør 554 00:27:50,690 --> 00:27:53,399 skriver ut $ resultat mødre. 555 00:27:53,399 --> 00:27:55,940 Og så jeg kommer til å få et sett av alle mødrene til each-- 556 00:27:55,940 --> 00:27:59,980 det er en rekke assosiativ arrays-- og jeg skriver ut 557 00:27:59,980 --> 00:28:03,649 hver og en som en egen rad i en tabell. 558 00:28:03,649 --> 00:28:05,690 Og det er egentlig ganske mye alt som skal til. 559 00:28:05,690 --> 00:28:07,750 Jeg vet det er en liten bit skjer her 560 00:28:07,750 --> 00:28:13,210 i dette siste eksempelet med matriser av arrays-- matriser av assosiative arrays. 561 00:28:13,210 --> 00:28:17,340 Men det virkelig bare koke ned i SQL til å lage en spørring, 562 00:28:17,340 --> 00:28:21,102 vanligvis velge etter at vi allerede har legge informasjon inn i tabellen, 563 00:28:21,102 --> 00:28:22,310 og så bare trekke den ut. 564 00:28:22,310 --> 00:28:25,710 >> Og dette er vi ville trekke den ut i denne saken. 565 00:28:25,710 --> 00:28:31,120 Vi vil trekke ut alle de individuelle mødre fra moms tabellen. 566 00:28:31,120 --> 00:28:35,970 Vi fikk et helt sett av dem, og vi ønsker å iterere gjennom og skrive ut 567 00:28:35,970 --> 00:28:37,630 hver. 568 00:28:37,630 --> 00:28:40,510 Så igjen, er dette trolig den mest kompliserte eksempel 569 00:28:40,510 --> 00:28:44,510 vi har sett, fordi vi blande tre forskjellige språk sammen, ikke sant? 570 00:28:44,510 --> 00:28:50,100 >> Igjen har vi HTML her i rødt, blandet med litt SQL her i blått, 571 00:28:50,100 --> 00:28:52,049 blandet med litt PHP i grønt. 572 00:28:52,049 --> 00:28:53,840 Men alle disse spiller pent sammen, er det 573 00:28:53,840 --> 00:28:57,060 bare et spørsmål om å utvikle gode vaner, slik at du kan få 574 00:28:57,060 --> 00:28:58,780 dem til å arbeide sammen slik du ønsker. 575 00:28:58,780 --> 00:29:03,790 Og den eneste måten å virkelig gjøre det er å øve, øve, øve. 576 00:29:03,790 --> 00:29:06,740 Jeg er Doug Lloyd, dette er CS50. 577 00:29:06,740 --> 00:29:08,647