Ilustrirani SQL vodič za početnike. Arhiva kategorija: SQL knjige Programski jezik SQL za lutke

Od autora: zvali su te čajnik? Pa ovo je popravljivo! Svaki je samovar nekada bio čajnik! Ili je svaki profesionalac nekada bio samovar? Ne, opet nešto nije u redu! Općenito, MySQL za početnike.

Zašto lutkama treba MySQL

Ako svoj život ozbiljno namjeravate povezati s internetom, tada ćete se odmah na prvim koracima u "webu" susresti s ovim DBMS-om. MySQL se može sa sigurnošću nazvati sustavom za upravljanje bazom podataka "cijeli internet". Niti jedan više ili manje ozbiljan resurs ne može bez njega, prisutan je u admin panelu svakog hostinga. A najviše od svih popularnih CMS-a, pa čak i "self-made" motora izgrađeni su uz njezino sudjelovanje.

Općenito, ne možete bez ove platforme. Ali da biste ga proučili, također će vam trebati pravi pristup, pravi alati, i što je najvažnije, želja i strpljenje. Nadam se da vam je dosta zadnjih komponenti. I budite spremni na činjenicu da će vam mozak prokuhati, a para će izviriti iz vaše glave, kao iz pravog čajnika

Ali MySQL je tako težak za lutke samo ako ga počnete krivo učiti. Nećemo pogriješiti i počet ćemo naše upoznavanje s ovom tehnologijom od samog početka.

Osnovni koncepti

Prvo, prođimo kroz osnovne koncepte koje ćemo spomenuti u ovoj publikaciji:

Baza podataka (DB) glavna je sastavna jedinica DBMS-a. Baza podataka uključuje tablice koje se sastoje od stupaca i zapisa (redova). Stanice nastale na raskrižju sadrže strukturirane podatke određene vrste.

DBMS (sustav za upravljanje bazom podataka) - skup svih softverskih modula za administraciju baze podataka.

SQL je strukturirani jezik upita s kojim programer "komunicira" s jezgrom (poslužiteljem) DBMS-a. Kao i svaki programski jezik, SQL ima vlastitu sintaksu, skup naredbi i operatora te podržane tipove podataka.

Mislim da nam je za početak dovoljno teorijsko znanje. Praksom ćemo "obojiti" nedostajuće praznine u teoriji. Sada ostaje odabrati pravi softverski alat.

Odabir pravog alata

Prilično "kopajući" po cijelom rasponu MySQL školjki za početnike, shvatio sam da one jednostavno ne postoje. Svi DBMS administrativni softverski proizvodi zahtijevaju već instaliran poslužitelj baze podataka. Općenito, odlučio sam još jednom ne izmišljati "skuter" i odlučio sam se za domaći Denwer paket. Možete ga preuzeti na službenoj web stranici.

Već uključuje sve komponente DBMS-a, omogućujući početniku da započne praktično upoznavanje s MySQL-om odmah nakon jednostavne i razumljive instalacije. Osim toga, Denwer uključuje još nekoliko alata potrebnih za početnika: lokalni poslužitelj, PHP.

Prvi koraci

Proces instalacije "džentlmenskog" kompleta neću opisivati, jer se tamo sve događa automatski. Nakon pokretanja instalacije, imajte vremena samo pritisnuti potrebne tipke. Upravo ono što vam treba u MySQL varijanti za lutke.

Kada je proces instalacije gotov, pokrenite lokalni poslužitelj, pričekajte nekoliko sekundi. Nakon toga u adresnu traku vašeg preglednika upišite localhost.

Na stranici "Ura, uspjelo je!" slijedite jedan od linkova na slici. Nakon toga, bit ćete odvedeni na phpMyAdmin - ljusku za administriranje baza podataka.

Klikom na poveznicu http://downloads.mysql.com/docs/world.sql.zip, preuzet ćete primjer testne baze podataka sa službene web stranice MySQL. Opet idite na phpMyAdmin, u glavnom izborniku na vrhu idite na karticu "Uvoz". U prozoru "Import to Current", u prvom odjeljku ("Datoteka za uvoz"), postavite vrijednost na "Pregled vašeg računala".

U prozoru istraživača odaberite arhivu s preuzetom uzorkom baze podataka. Ne zaboravite kliknuti OK na dnu glavnog prozora.

Savjetujem vam da još ne mijenjate navedene vrijednosti parametara. To može dovesti do netočnog prikaza uvezenih izvornih podataka. Ako je phpMyAdmin sustav dao pogrešku da ne može prepoznati algoritam kompresije baze podataka, onda ga raspakirajte i ponovite cijeli proces uvoza od početka.

Ako je sve prošlo kako treba, na vrhu će se pojaviti programska poruka da je uvoz uspješan, a lijevo u popisu baza nalazi se još jedna (riječ).

Pogledajmo njegovu strukturu iznutra kako biste jasnije zamislili s čime ćete se morati nositi.

Kliknite na naziv MySQL baze podataka za početnike. Ispod njega će se prikazati popis tablica od kojih se sastoji. Kliknite na jedan od njih. Zatim idite na gornju stavku izbornika "Struktura". Glavno radno područje prikazuje strukturu tablice: sve nazive stupaca, tipove podataka i sve atribute.

Ovaj tutorial je nešto poput "pečata moje memorije" u SQL jeziku (DDL, DML), t.j. to su informacije koje su se nakupile tijekom mojih profesionalnih aktivnosti i koje se stalno pohranjuju u mojoj glavi. To mi je dovoljan minimum koji se najčešće koristi pri radu s bazama podataka. Ako se pojavi potreba za korištenjem potpunijih SQL konstrukcija, obično se za pomoć obraćam biblioteci MSDN koja se nalazi na Internetu. Po meni je jako teško držati sve u glavi i nema posebne potrebe za tim. Ali poznavanje osnovnih konstrukcija je vrlo korisno, jer. primjenjivi su gotovo u istom obliku u mnogim relacijskim bazama podataka kao što su Oracle, MySQL, Firebird. Razlike su uglavnom u tipovima podataka, koji se mogu razlikovati u pojedinostima. Osnovnih SQL jezičnih konstrukcija nema toliko, a uz stalno vježbanje brzo se pamte. Na primjer, za kreiranje objekata (tablica, ograničenja, indeksa itd.) dovoljno je imati pri ruci tekstualni uređivač okruženja (IDE) za rad s bazom podataka, a nema potrebe učiti vizualni alat izoštren za rad s određenom vrstom baze podataka (MS SQL, Oracle, MySQL, Firebird,…). To je također zgodno jer vam je cijeli tekst pred očima, a ne morate trčati kroz brojne kartice da biste napravili, primjerice, indeks ili ograničenje. Kada se stalno radi s bazom podataka, stvaranje, modificiranje, a posebno ponovno kreiranje objekta pomoću skripti je mnogo puta brže nego ako se radi u vizualnom načinu. Također u načinu rada skripte (odnosno, s dužnom pažnjom), lakše je postaviti i kontrolirati pravila za imenovanje objekata (moje subjektivno mišljenje). Osim toga, skripte su prikladne za korištenje kada promjene napravljene u jednoj bazi podataka (na primjer, testnoj) treba prenijeti u istom obliku u drugu bazu podataka (produktivnu).

SQL jezik je podijeljen na nekoliko dijelova, ovdje ću razmotriti 2 njegova najvažnija dijela:
  • DML - Jezik za upravljanje podacima (jezik za manipulaciju podacima), koji sadrži sljedeće konstrukcije:
    • SELECT - odabir podataka
    • INSERT - umetanje novih podataka
    • UPDATE - ažuriranje podataka
    • DELETE - brisanje podataka
    • MERGE - spajanje podataka
Jer Ja sam praktičar, kao takav će u ovom udžbeniku biti malo teorije, a sve konstrukcije će biti objašnjene na praktičnim primjerima. Osim toga, vjerujem da se programski jezik, a posebno SQL, može svladati samo u praksi, ako ga sami dodirnete i shvatite što se događa kada izvršite ovu ili onu konstrukciju.

Ovaj tutorial nastao je po principu Korak po korak, tj. potrebno ga je čitati uzastopno i po mogućnosti odmah nakon primjera. Ali ako usput trebate detaljnije naučiti o naredbi, upotrijebite određenu pretragu na Internetu, na primjer, u MSDN biblioteci.

Prilikom pisanja ovog vodiča koristio sam bazu podataka MS SQL Server verzije 2014, a za pokretanje skripti koristio sam MS SQL Server Management Studio (SSMS).

Ukratko o MS SQL Server Management Studiju (SSMS)

SQL Server Management Studio (SSMS) je uslužni program za Microsoft SQL Server za konfiguriranje, upravljanje i administriranje komponenti baze podataka. Ovaj uslužni program sadrži uređivač skripti (koji ćemo uglavnom koristiti) i grafički program koji radi s objektima i postavkama poslužitelja. Glavni alat SQL Server Management Studio-a je Object Explorer, koji korisniku omogućuje pregled, dohvaćanje i upravljanje objektima poslužitelja. Ovaj tekst je dijelom posuđen s Wikipedije.

Za izradu novog uređivača skripte upotrijebite gumb Novi upit:

Za promjenu trenutne baze podataka, možete koristiti padajući popis:

Za izvršenje određene naredbe (ili grupe naredbi), odaberite je i pritisnite gumb "Izvrši" ili pritisnite tipku "F5". Ako u uređivaču trenutno postoji samo jedna naredba ili ako trebate izvršiti sve naredbe, onda ne morate ništa odabrati.

Nakon izvršavanja skripti, posebno onih koje stvaraju objekte (tablice, stupce, indekse), da biste vidjeli promjene, koristite Osvježi iz kontekstnog izbornika, naglašavajući odgovarajuću grupu (na primjer, Tablice), samu tablicu ili grupu Stupci u njoj .

Zapravo, ovo je sve što trebamo znati da bismo dovršili ovdje navedene primjere. Ostatak SSMS uslužnog programa lako je naučiti sami.

Malo teorije

Relacijska baza podataka (RDB, ili dalje u kontekstu samo baze podataka) je zbirka međusobno povezanih tablica. Grubo govoreći, baza podataka je datoteka u kojoj su podaci pohranjeni u strukturiranom obliku.

DBMS - Sustav za upravljanje tim bazama podataka, tj. ovo je skup alata za rad s određenom vrstom baze podataka (MS SQL, Oracle, MySQL, Firebird, ...).

Bilješka
Jer u životu, u kolokvijalnom govoru, uglavnom govorimo: “Oracle DB”, ili čak samo “Oracle”, što zapravo znači “Oracle DBMS”, tada će se u kontekstu ovog tutoriala ponekad koristiti termin DB. Iz konteksta, mislim da će biti jasno o čemu se točno radi.

Tablica je zbirka stupaca. Stupci se također mogu zvati polja ili stupci, sve ove riječi će se koristiti kao sinonimi, izražavajući istu stvar.

Tablica je glavni objekt RDB-a, svi RDB podaci se pohranjuju red po red u stupcima tablice. Linije, zapisi su također sinonimi.

Za svaku tablicu, kao i njezine stupce, dati su nazivi prema kojima se naknadno pozivaju.
Naziv objekta (ime tablice, naziv stupca, naziv indeksa itd.) u MS SQL-u može imati maksimalnu duljinu od 128 znakova.

Za referencu– u bazi podataka ORACLE nazivi objekata mogu imati maksimalnu duljinu od 30 znakova. Stoga, za određenu bazu podataka, morate razviti vlastita pravila za imenovanje objekata kako biste zadovoljili ograničenje broja znakova.

SQL je jezik koji vam omogućuje ispitivanje baze podataka kroz DBMS. U određenom DBMS-u, SQL jezik može imati specifičnu implementaciju (vlastiti dijalekt).

DDL i DML su podskup jezika SQL:

  • DDL jezik se koristi za kreiranje i modificiranje strukture baze podataka, t.j. za stvaranje/izmjenu/brisanje tablica i odnosa.
  • DML jezik vam omogućuje manipuliranje tabličnim podacima, t.j. sa svojim linijama. Omogućuje vam odabir podataka iz tablica, dodavanje novih podataka u tablice te ažuriranje i brisanje postojećih podataka.

U SQL jeziku možete koristiti 2 vrste komentara (jednoredni i višeredni):

Komentar u jednom retku
i

/* višeredni komentar */

Zapravo, sve za teoriju ovoga bit će dovoljno.

DDL - Jezik definicije podataka (jezik opisa podataka)

Na primjer, razmotrite tablicu s podacima o zaposlenicima, u obliku poznatom osobi koja nije programer:

U ovom slučaju, stupci tablice imaju sljedeće nazive: Broj osoblja, Puno ime, Datum rođenja, E-mail, Funkcija, Odjel.

Svaki od ovih stupaca može se okarakterizirati vrstom podataka koje sadrži:

  • Broj osoblja - cijeli broj
  • puni naziv - niz
  • Datum rođenja - datum
  • Email - niz
  • Položaj - niz
  • odjel – niz
Vrsta stupca je karakteristika koja pokazuje kakve podatke ovaj stupac može pohraniti.

Za početak će biti dovoljno zapamtiti samo sljedeće osnovne tipove podataka koji se koriste u MS SQL-u:

Značenje Zapis u MS SQL-u Opis
Žica promjenjive dužine varchar(N)
i
nvarchar(N)
S brojem N možemo odrediti maksimalnu moguću duljinu niza za odgovarajući stupac. Na primjer, ako želimo reći da vrijednost stupca "Name" može sadržavati najviše 30 znakova, tada trebamo postaviti njegov tip na nvarchar (30).
Razlika između varchar i nvarchar je u tome što varchar omogućuje pohranjivanje nizova u ASCII formatu, gdje jedan znak zauzima 1 bajt, dok nvarchar pohranjuje nizove u Unicode formatu, gdje svaki znak zauzima 2 bajta.
Vrsta varchar treba se koristiti samo ako ste 100% sigurni da polje neće trebati pohranjivati ​​Unicode znakove. Na primjer, varchar se može koristiti za pohranu adresa e-pošte jer obično sadrže samo ASCII znakove.
Žica fiksne dužine znak (N)
i
nchar(N)
Ovaj se tip razlikuje od niza promjenjive duljine po tome što ako je duljina niza manja od N znakova, tada se uvijek dodaje udesno na duljinu od N razmaka i pohranjuje u bazi podataka u ovom obliku, t.j. u bazi podataka zauzima točno N znakova (gdje jedan znak zauzima 1 bajt za char i 2 bajta za nchar). U mojoj praksi se ova vrsta vrlo rijetko koristi, a ako se koristi, onda se koristi uglavnom u formatu char (1), t.j. kada je polje definirano jednim znakom.
Cijeli broj int Ovaj tip nam omogućuje korištenje samo cijelih brojeva, pozitivnih i negativnih, u stupcu. Za referencu (ovo za nas sada nije toliko relevantno) - raspon brojeva koji tip int dopušta od -2 147 483 648 do 2 147 483 647. Ovo je obično glavni tip koji se koristi za postavljanje identifikatora.
Realni ili realni broj plutati Jednostavno rečeno, to su brojevi u kojima može biti decimalna točka (zarez).
datum datum Ako stupac treba pohraniti samo datum, koji se sastoji od tri komponente: Broj, Mjesec i Godina. Na primjer, 15.02.2014. (15. veljače 2014.). Ova vrsta se može koristiti za stupac "Datum prijema", "Datum rođenja" itd., t.j. u slučajevima kada nam je važno popraviti samo datum, ili kada nam vremenska komponenta nije važna i može se odbaciti ili ako nije poznata.
Vrijeme vrijeme Ovaj tip se može koristiti ako stupac treba pohraniti samo podatke o vremenu, t.j. Sati, minute, sekunde i milisekunde. Na primjer, 17:38:31.3231603
Na primjer, dnevni "Flight Departure Time".
Datum i vrijeme Datum vrijeme Ova vrsta omogućuje pohranjivanje i datuma i vremena u isto vrijeme. Na primjer, 15.02.2014. 17:38:31.323
Na primjer, to može biti datum i vrijeme događaja.
Zastava malo Ovaj tip je koristan za pohranjivanje vrijednosti Da/Ne, gdje će Da biti pohranjeno kao 1, a Ne kao 0.

Također, vrijednost polja, u slučaju da nije zabranjeno, ne smije biti navedena, u tu svrhu se koristi ključna riječ NULL.

Da bismo pokrenuli primjere, napravimo testnu bazu podataka pod nazivom Test.

Jednostavna baza podataka (bez navođenja dodatnih parametara) može se stvoriti pokretanjem sljedeće naredbe:

STVORI BAZU PODATAKA Test
Možete izbrisati bazu podataka naredbom (trebate biti vrlo oprezni s ovom naredbom):

Test DROP DATABASE
Da biste se prebacili na našu bazu podataka, možete pokrenuti naredbu:

američki test
Alternativno, odaberite Test bazu podataka s padajućeg popisa u području izbornika SSMS. Na poslu često koristim ovu metodu prebacivanja između baza podataka.

Sada u našoj bazi podataka možemo kreirati tablicu koristeći opise onakvima kakvi jesu, koristeći razmake i ćirilične znakove:

CREATE TABLE [Zaposlenici]([Broj osoblja] int, [Ime] nvarchar(30), [Datum rođenja] datum, nvarchar(30), [Pozicija] nvarchar(30), [Odjel] nvarchar(30))
U ovom slučaju, nazive ćemo morati staviti u uglaste zagrade […].

Ali u bazi podataka, radi veće praktičnosti, bolje je navesti sve nazive objekata na latinskom i ne koristiti razmake u imenima. U MS SQL-u, obično u ovom slučaju, svaka riječ počinje velikim slovom, na primjer, za polje "Personnel number" mogli bismo postaviti naziv PersonnelNumber. U nazivu možete koristiti i brojeve, na primjer Broj telefona1.

Na napomenu
U nekim DBMS-ima, sljedeći format imena "PHONE_NUMBER" može biti poželjniji, na primjer, ovaj format se često koristi u bazi podataka ORACLE. Naravno, pri postavljanju naziva polja poželjno je da ono ne odgovara ključnim riječima koje se koriste u DBMS-u.

Iz tog razloga možete zaboraviti na sintaksu uglatih zagrada i izbrisati tablicu [Zaposlenici]:

STOL ISPUŠTANJA [Zaposlenici]
Na primjer, tablica sa zaposlenicima može se zvati "Zaposlenici", a njezina polja mogu dobiti sljedeća imena:

  • ID - broj osoblja (ID zaposlenika)
  • Ime - puno ime
  • Rođendan - Datum rođenja
  • E-mail
  • Položaj
  • Odjel – Odjel
Vrlo često se riječ ID koristi za imenovanje polja identifikatora.

Sada napravimo našu tablicu:

CREATE TABLE Zaposlenici(ID int, Ime nvarchar(30), Datum rođenja, E-pošta nvarchar(30), Pozicija nvarchar(30), Odjel nvarchar(30))
Možete koristiti opciju NOT NULL za određivanje potrebnih stupaca.

Za već postojeću tablicu, polja se mogu redefinirati pomoću sljedećih naredbi:

Ažuriraj ID polje ALTER TABLE Zaposlenici ALTER COLUMN ID int NOT NULL -- ažuriraj polje imena ALTER TABLE Zaposlenici ALTER COLUMN Naziv nvarchar(30) NOT NULL

Na napomenu
Opći koncept SQL jezika za većinu DBMS-a ostaje isti (barem to mogu suditi iz DBMS-a s kojim sam imao priliku raditi). Razlika između DDL-a u različitim DBMS-ovima uglavnom je u tipovima podataka (tu se ne mogu razlikovati samo njihovi nazivi, već i detalji njihove implementacije), same specifičnosti implementacije SQL jezika također se mogu neznatno razlikovati (tj. naredbe su iste, ali mogu postojati male razlike u dijalektu, nažalost, ali ne postoji jedan standard). Poznavajući osnove SQL-a, lako se možete prebaciti s jednog DBMS-a na drugi. u ovom slučaju trebat ćete razumjeti samo detalje implementacije naredbi u novom DBMS-u, t.j. u većini slučajeva bit će dovoljno samo povući analogiju.

Kreiranje tablice CREATE TABLE Employees(ID int, -- u ORACLE tipu int je ekvivalent (omot) za broj(38) Naziv nvarchar2(30), -- nvarchar2 u ORACLE je ekvivalentan nvarchar u MS SQL Datum rođenja, E-pošta nvarchar2( 30) , Položaj nvarchar2(30), Odjel nvarchar2(30)); -- ažuriranje polja ID i naziv (ovdje se koristi MODIFY(…) umjesto ALTER COLUMN ALTER TABLE Zaposlenici MODIFY(ID int NOT NULL,Naziv nvarchar2(30) NOT NULL); -- dodavanje PK-a (u ovom slučaju konstrukcija izgleda kao u MS SQL-u, bit će prikazano u nastavku) ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
Za ORACLE postoje razlike u smislu implementacije tipa varchar2, njegovo kodiranje ovisi o postavkama baze podataka i tekst se može spremiti, na primjer, u UTF-8 kodiranju. Osim toga, duljina polja u ORACLE-u može se postaviti i u bajtovima i u znakovima, za to se koriste dodatne opcije BYTE i CHAR, koje su navedene nakon duljine polja, na primjer:

NAZIV varchar2(30 BYTE) -- kapacitet polja bit će 30 bajtova NAZIV varchar2 (30 CHAR) -- kapacitet polja bit će 30 znakova
Koja opcija će se koristiti prema zadanim postavkama BYTE ili CHAR, u slučaju jednostavne specifikacije tipa varchar2(30) u ORACLE-u, ovisi o postavkama baze podataka, također se ponekad može postaviti u IDE postavkama. Općenito, ponekad se lako možete zbuniti, pa u slučaju ORACLE-a, ako se koristi tip varchar2 (a to je ovdje ponekad opravdano, npr. kod korištenja UTF-8 kodiranja), radije izričito napišem CHAR (jer obično je prikladnije čitati duljinu niza u znakovima).

Ali u ovom slučaju, ako već postoje neki podaci u tablici, tada je za uspješno izvršenje naredbi potrebno popuniti polja ID i Naziv u svim recima tablice. Pokažimo to na primjeru, umetnite podatke u tablicu u polja ID, Položaj i Odjel, to se može učiniti sljedećom skriptom:

UMETNI VRIJEDNOSTI zaposlenika (ID, pozicija, odjel) (1000,N"Direktor",N"Administracija"), (1001,N"Programer",N"IT"), (1002,N"Računovođa",N"Računovodstvo" ), (1003,N"Viši programer",N"IT")
U ovom slučaju, naredba INSERT također će izbaciti pogrešku, jer prilikom umetanja nismo naveli vrijednost traženog polja Ime.
Da smo ove podatke već imali u izvornoj tablici, tada bi naredba "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" bila uspješno izvršena, a naredba "ALTER TABLE Employees ALTER COLUMN Name int NOT NULL" bi izdala pogrešku poruku, da postoje NULL (nije specificirane) vrijednosti u polju Ime.

Dodajmo vrijednosti za polje Ime i ponovo popunimo podatke:


Također, opcija NOT NULL može se koristiti izravno prilikom kreiranja nove tablice, t.j. u kontekstu naredbe CREATE TABLE.

Prvo izbrišite tablicu naredbom:

DROP STOL Zaposlenici
Sada napravimo tablicu s obveznim stupcima ID i Name:

CREATE TABLE Zaposlenici(ID int NOT NULL, Ime nvarchar(30) NOT NULL, Datum rođenja, Email nvarchar(30), Pozicija nvarchar(30), Odjel nvarchar(30))
Također možete napisati NULL iza naziva stupca, što će značiti da će NULL vrijednosti (nije navedene) biti dopuštene u njemu, ali to nije potrebno, jer se ova karakteristika podrazumijeva prema zadanim postavkama.

Ako, naprotiv, želite postojeći stupac učiniti neobaveznim, upotrijebite sljedeću sintaksu naredbe:

ALTER TABLE Zaposlenici ALTER COLUMN Naziv nvarchar(30) NULL
Ili jednostavno:

ALTER TABLE Zaposlenici ALTER COLUMN Naziv nvarchar(30)
Ovom naredbom također možemo promijeniti vrstu polja u drugu kompatibilnu vrstu ili promijeniti njegovu duljinu. Na primjer, proširimo polje Ime na 50 znakova:

ALTER TABLE Zaposlenici ALTER COLUMN Naziv nvarchar(50)

glavni ključ

Prilikom izrade tablice poželjno je da ima jedinstveni stupac ili skup stupaca koji je jedinstven za svaki njezin red – zapis se može jedinstveno identificirati po toj jedinstvenoj vrijednosti. Ova vrijednost se naziva primarni ključ tablice. Za našu tablicu Employees, ova jedinstvena vrijednost može biti stupac ID (koji sadrži "Broj osoblja zaposlenika" - čak i ako je u našem slučaju ova vrijednost jedinstvena za svakog zaposlenika i ne može se ponoviti).

Možete stvoriti primarni ključ postojeće tablice pomoću naredbe:

ALTER TABLE Zaposlenici DODAJ OGRANIČENJE PK_Zaposlenici PRIMARNI KLJUČ (ID)
Gdje je "PK_Employees" naziv ograničenja odgovornog za primarni ključ. Obično se primarni ključ imenuje s prefiksom "PK_" nakon čega slijedi naziv tablice.

Ako se primarni ključ sastoji od nekoliko polja, ta polja moraju biti navedena u zagradama odvojena zarezima:

ALTER TABLE naziv_tablice DODAJ OGRANIČENJE naziv_ograničenja PRIMARNI KLJUČ(polje1,polje2,…)
Vrijedi napomenuti da u MS SQL-u sva polja koja su uključena u primarni ključ moraju imati karakteristiku NOT NULL.

Također, primarni ključ se može definirati izravno prilikom izrade tablice, t.j. u kontekstu naredbe CREATE TABLE. Izbrišemo tablicu:

DROP STOL Zaposlenici
A zatim ga kreirajte koristeći sljedeću sintaksu:

CREATE TABLE Zaposlenici(ID int NOT NULL, Ime nvarchar(30) NOT NULL, Datum rođenja, Email nvarchar(30), Položaj nvarchar(30), Odjel nvarchar(30), OGRANIČENJA PK_Employees PRIMARNI KLJUČ(ID) -- opišite PK nakon sva polja kao ograničenje)
Nakon izrade popunite podatke tablice:

UMETNI zaposlenike (ID, pozicija, odjel, ime) VRIJEDNOSTI (1000,N"Direktor",N"Uprava",N"Ivanov II.), (1001,N"Programer",N"IT",N" Petrov PP" ), (1002,N"Računovođa",N"Računovodstvo",N"Sidorov SS"), (1003,N"Viši programer",N"IT",N"Andrejev A. A.")
Ako se primarni ključ u tablici sastoji od samo vrijednosti jednog stupca, tada se može koristiti sljedeća sintaksa:

CREATE TABLE Employees(ID int NOT NULL OGRANIČENJE PK_Employees PRIMARY KEY, -- specificirajte Ime nvarchar(30) NOT NULL, Datum rođenja, Email nvarchar(30), Pozicija nvarchar(30), Odjel nvarchar(30))
Zapravo, naziv ograničenja može se izostaviti, u kojem slučaju će mu se dati naziv sustava (kao što je "PK__Employee__3214EC278DA42077"):

CREATE TABLE Zaposlenici(ID int NOT NULL, Ime nvarchar(30) NOT NULL, Datum rođenja, E-pošta nvarchar(30), Pozicija nvarchar(30), Odjel nvarchar(30), PRIMARNI KLJUČ(ID))
Ili:

CREATE TABLE Zaposlenici(ID int NOT NULL PRIMARNI KLJUČ, Ime nvarchar(30) NOT NULL, Datum rođenja, Email nvarchar(30), Pozicija nvarchar(30), Odjel nvarchar(30))
Ali preporučujem da uvijek eksplicitno postavite naziv ograničenja za trajne tablice, jer eksplicitno datim i razumljivim imenom, kasnije će biti lakše njime manipulirati, na primjer, možete ga izbrisati:

ALTER TABLE Employees DROP CONSTRAINT PK_Employees
Ali takva kratka sintaksa, bez navođenja imena ograničenja, prikladna je za korištenje pri kreiranju privremenih tablica baze podataka (ime privremene tablice počinje s # ili ##), koje će se nakon upotrebe izbrisati.

Hajde da rezimiramo

Do sada smo pokrili sljedeće naredbe:
  • STVORI TABLU table_name (nabrajanje polja i njihovih vrsta, ograničenja) - koristi se za stvaranje nove tablice u trenutnoj bazi podataka;
  • ISPUSTI STOL table_name - koristi se za brisanje tablice iz trenutne baze podataka;
  • ALTER TABLE naziv_tablice ALTER KOLONA column_name … – koristi se za ažuriranje vrste stupca ili za promjenu njegovih postavki (na primjer, za postavljanje karakteristike NULL ili NOT NULL);
  • ALTER TABLE naziv_tablice DODAJ OGRANIČENJE naziv_ograničenja GLAVNI KLJUČ(polje1, polje2,…) – dodavanje primarnog ključa postojećoj tablici;
  • ALTER TABLE naziv_tablice ISPUSTI OGRANIČENJE constraint_name - ukloniti ograničenje iz tablice.

Malo o privremenim stolovima

Isječak iz MSDN-a. Postoje dvije vrste privremenih tablica u MS SQL Serveru: lokalne (#) i globalne (##). Lokalne privremene tablice vidljive su samo njihovim kreatorima dok se sesija povezivanja s instancom SQL Servera ne prekine nakon što se prvi put kreiraju. Lokalne privremene tablice automatski se brišu nakon što se korisnik isključi s instance SQL Servera. Globalne privremene tablice vidljive su svim korisnicima tijekom bilo koje sesije povezivanja nakon što se te tablice kreiraju i brišu se kada se svi korisnici koji se pozivaju na te tablice odvoje od instance SQL Servera.

Privremene tablice se kreiraju u bazi podataka sustava tempdb, t.j. stvarajući ih, ne začepljujemo glavnu bazu podataka, inače su privremene tablice potpuno identične uobičajenim tablicama, također se mogu izbrisati pomoću naredbe DROP TABLE. Lokalne (#) privremene tablice se češće koriste.

Za izradu privremene tablice možete koristiti naredbu CREATE TABLE:

CREATE TABLE #Temp(ID int, Naziv nvarchar(30))
Budući da je privremena tablica u MS SQL-u slična običnoj tablici, možete je također izbrisati naredbom DROP TABLE:

DOP TABLE #Temp

Također možete stvoriti privremenu tablicu (kao i običnu tablicu) i odmah je ispuniti podacima koje je vratio upit pomoću sintakse SELECT ... INTO:

SELECT ID,Name INTO #Temp FROM Employees

Na napomenu
U različitim DBMS-ima implementacija privremenih tablica može se razlikovati. Na primjer, u ORACLE i Firebird DBMS-u struktura privremenih tablica mora biti unaprijed definirana naredbom CREATE GLOBAL TEMPORARY TABLE, ukazujući na specifičnosti pohranjivanja podataka u nju, zatim ih korisnik vidi među glavnim tablicama i radi s njima kao kod običnog stola.

Normalizacija baze podataka - dijeljenje u podtablice (direktorije) i određivanje odnosa

Naša trenutna tablica Zaposlenici ima nedostatak što korisnik može unijeti bilo koji tekst u polja Položaj i Odjel, što je prvenstveno prepuno grešaka, jer za jednog zaposlenika jednostavno može naznačiti “IT” kao odjel, a za drugog zaposlenika, za na primjer , unesite "IT odjel", postavite treći "IT". Kao rezultat toga, neće biti jasno na što je korisnik mislio, t.j. Jesu li ti djelatnici zaposlenici istog odjela ili je korisnik sam sebe opisao i to su 3 različita odjela? Štoviše, u ovom slučaju nećemo moći ispravno grupirati podatke za neko izvješće, gdje će možda biti potrebno prikazati broj zaposlenika u kontekstu svakog odjela.

Drugi nedostatak je količina pohrane ovih informacija i njihovo dupliciranje, t.j. za svakog zaposlenika je naznačeno puno ime odjela, što zahtijeva mjesto u bazi podataka za pohranjivanje svakog znaka iz naziva odjela.

Treći nedostatak je teškoća ažuriranja ovih polja ako se promijeni naziv pozicije, na primjer, ako trebate preimenovati poziciju “Programer” u “Junior programer”. U ovom slučaju, morat ćemo napraviti promjene u svakom retku tablice, u kojoj je pozicija jednaka "Programer".

Kako bi se izbjegli ovi nedostaci, koristi se tzv. normalizacija baze podataka – cijepanje u podtablice, referentne tablice. Nije potrebno penjati se u džunglu teorije i proučavati što su normalni oblici, dovoljno je razumjeti bit normalizacije.

Napravimo 2 referentne tablice "Pozicije" i "Odjeli", prva će se zvati Pozicije, a druga, Odsjeci:

CREATE TABLE Positions(ID int IDENTITY(1,1) NOT NULL OGRANIČENJE PK_Positions PRIMARY KEY, Name nvarchar(30) NOT NULL) CREATE TABLE Departments(ID int IDENTITY(1,1) NOT NULL OGRANIČENJE PK_Departments Name PRIMARY KcharEY(Naziv PRIMARY KcharEY3) ) NIJE NULL)
Imajte na umu da smo ovdje koristili novu opciju IDENTITY, što znači da će podaci u stupcu ID biti automatski numerirani, počevši od 1, s korakom od 1, t.j. kada se dodaju novi zapisi, bit će im uzastopno dodijeljene vrijednosti 1, 2, 3 i tako dalje. Takva se polja obično nazivaju automatskim povećanjem. Samo jedno polje sa svojstvom IDENTITY može se definirati u tablici, a obično, ali ne nužno, takvo polje je primarni ključ za tu tablicu.

Na napomenu
U različitim DBMS-ima implementacija polja s brojačem može se izvesti različito. U MySQL-u, na primjer, takvo se polje definira pomoću opcije AUTO_INCREMENT. U ORACLE-u i Firebirdu, ova se funkcionalnost prethodno mogla emulirati pomoću SEQUENCE-ova. Ali koliko ja znam, ORACLE je sada dodao opciju GENERIRANO KAO IDENTITET.

Popunimo ove tablice automatski, na temelju trenutnih podataka zabilježenih u poljima Položaj i Odjel u tablici Zaposlenici:

Ispunite polje Naziv tablice Positions jedinstvenim vrijednostima iz polja Position u tablici Employees INSERT Positions(Name) SELECT DISTINCT Position FROM Employees GDJE Pozicija NIJE NULL -- odbacite zapise bez specificirane pozicije
Isto ćemo učiniti i za tablicu odjela:

INSERT Departments(Name) SELECT DISTINCT Department from Employees GDJE Odjel NIJE NULL
Ako sada otvorimo tablice Positions i Departments, vidjet ćemo numerirani skup vrijednosti ​​po ID polju:

ODABIR * IZ pozicija

ODABERITE * IZ Odjela

Ove će tablice sada igrati ulogu imenika za postavljanje pozicija i odjela. Sada ćemo se osvrnuti na ID-ove poslova i odjela. Prije svega, napravimo nova polja u tablici Zaposlenici za pohranu ID podataka:

Dodaj polje za ID pozicije ALTER TABLE Zaposlenici DODAJ PositionID int -- dodaj polje za ID odjela ALTER TABLE Zaposlenici DODAJ DepartmentID int
Vrsta referentnih polja mora biti ista kao u imenicima, u ovom slučaju je int.

Također možete dodati nekoliko polja u tablicu odjednom jednom naredbom, navodeći polja odvojena zarezima:

ALTER TABLE Zaposlenici DODAJ PositionID int, DepartmentID int
Sada napišimo veze (referentna ograničenja - STRANI KLJUČ) za ova polja, tako da korisnik nema priliku upisivati ​​u ova polja vrijednosti koje nisu među vrijednostima ID-a u imenicima.

ALTER TABLE Zaposlenici DODAJ OGRANIČENJE FK_Employees_PositionID STRANI KLJUČ (ID pozicije) REFERENCE Pozicije (ID)
I mi ćemo učiniti isto za drugo polje:

ALTER TABLE Zaposlenici DODAJ OGRANIČENJE FK_Employees_DepartmentID STRANI KLJUČ(ID odjela) REFERENCE Odjeli(ID)
Sada će korisnik u ova polja moći unijeti samo vrijednosti ID-a iz odgovarajuće referentne knjige. Sukladno tome, kako bi mogao koristiti novi odjel ili radno mjesto, prvo će morati dodati novi unos u odgovarajući imenik. Jer pozicije i odjeli se sada pohranjuju u imenike u jednom primjerku, tada je za promjenu naziva dovoljno promijeniti samo u imeniku.

Naziv referentnog ograničenja obično je složen, sastoji se od prefiksa "FK_", nakon čega slijedi naziv tablice, a nakon donje crte dolazi naziv polja koje se odnosi na identifikator tablice pretraživanja.

Identifikator (ID) je obično interna vrijednost koja se koristi samo za veze i koja je vrijednost tamo pohranjena, u većini slučajeva je apsolutno svejedno, pa nema potrebe pokušavati se riješiti rupa u nizu brojeva koji nastaju tijekom rada s tablicom, na primjer, nakon brisanja zapisa iz priručnika.

ALTER TABLE tablica DODAJ OGRANIČENJE ime_ograničenja STRANI KLJUČ(polje1,polje2,…) REFERENCE tablica pretraživanja(polje1,polje2,…)
U ovom slučaju, u tablici "table_reference" primarni ključ je predstavljen kombinacijom nekoliko polja (field1, field2, ...).

Zapravo, sada ažurirajmo polja PositionID i DepartmentID s ID vrijednostima iz direktorija. U tu svrhu upotrijebimo naredbu UPDATE DML:

UPDATE e SET PositionID=(SELECT ID FROM Positions WHERE Name=e.Position), DepartmentID=(SELECT ID FROM Departments WHERE Name=e.Department) FROM Employees e
Pogledajmo što se događa pokretanjem upita:

ODABERITE * IZ Zaposlenika

To je to, polja PositionID i DepartmentID popunjavaju se odgovarajućim pozicijama i odjelima s ID-ovima potreba u poljima Position i Department u tablici Zaposlenici sada, možete izbrisati ova polja:

ALTER TABLE Zaposlenici DROP COLUMN Pozicija, odjel
Tablica sada izgleda ovako:

ODABERITE * IZ Zaposlenika

iskaznica Ime Rođendan E-mail PositionID ID odjela
1000 Ivanov I.I. NULL NULL 2 1
1001 Petrov P.P. NULL NULL 3 3
1002 Sidorov S.S. NULL NULL 1 2
1003 Andreev A.A. NULL NULL 4 3

Oni. na kraju smo se riješili pohranjivanja suvišnih informacija. Sada, prema brojevima pozicija i odjela, možemo jedinstveno odrediti njihova imena koristeći vrijednosti u tablicama pretraživanja:

SELECT e.ID,e.Name,p.Name PositionName,d.Name DepartmentName FROM Employees e LEFT JOIN Departments d ON d.ID=e.DepartmentID LEFT JOIN Positions p ON p.ID=e.PositionID

U Inspektoru objekata možemo vidjeti sve objekte kreirane za danu tablicu. Odavde također možete izvoditi razne manipulacije s tim objektima - na primjer, preimenovati ili izbrisati objekte.

Također je vrijedno napomenuti da se tablica može odnositi na sebe, t.j. možete stvoriti rekurzivnu vezu. Na primjer, dodajmo još jedno polje ManagerID u našu tablicu sa zaposlenicima, koje će označavati zaposlenika kojem je taj zaposlenik podređen. Kreirajmo polje:

ALTER TABLE Zaposlenici DODAJ ID upravitelja int
U ovom polju je dopuštena vrijednost NULL, polje će biti prazno ako, na primjer, nema nadređenih nad zaposlenikom.

Sada napravimo STRANI KLJUČ na tablici Zaposlenici:

ALTER TABLE Zaposlenici DODAJ OGRANIČENJE FK_Employees_ManagerID STRANI KLJUČ (ID upravitelja) REFERENCE Zaposlenici (ID)
Kreirajmo sada dijagram i vidimo kako na njemu izgledaju odnosi između naših tablica:

Kao rezultat, trebali bismo vidjeti sljedeću sliku (tablica Zaposlenici povezana je s tablicama Positions i Depertments, a odnosi se i na sebe):

Na kraju, vrijedno je spomenuti da referentni ključevi mogu uključivati ​​dodatne opcije ON DELETE CASCADE i ON UPDATE CASCADE, koje govore kako se ponašati kada brišete ili ažurirate zapis naveden u tablici pretraživanja. Ako ove opcije nisu navedene, tada ne možemo promijeniti ID u tablici imenika unosa koji ima veze iz druge tablice, niti možemo izbrisati takav unos iz imenika dok ne izbrišemo sve retke koji se odnose na ovaj unos ili, recimo ažurirati ove linije referenci na drugu vrijednost.

Na primjer, napravimo tablicu s opcijom ON DELETE CASCADE za FK_Employees_DepartmentID:

DROP TABLE Zaposlenici CREATE TABLE Zaposlenici(ID int NOT NULL, Ime nvarchar(30), Datum rođendana, E-pošta nvarchar(30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (30), CONSTRAID KEYFORD_Depart_departement ) REFERENCE Odjeli(ID) ON DELETE CASCADE, CONSTRAINT FK_Employees_PositionID STRANI KLJUČ(PositionID) REFERENCE Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES_POSITIONID,EmployeesId,EmployeIDes,EmployeIDes,EmployeIDes,EmployeDepartment )VRIJEDNOSTI (1000,N"Ivanov II","19550219",2,1,NULL), (1001,N"Petrov PP","19831203",3,3,1003), (1002 ,N"Sidorov SS" ,"19760607",1,2,1000), (1003,N"Andrejev AA","19820417",4,3,1000)
Uklonimo odjel s ID 3 iz tablice odjela:

IZBRIŠI Odjele GDJE ID=3
Pogledajmo podatke u tablici Zaposlenici:

ODABERITE * IZ Zaposlenika

iskaznica Ime Rođendan E-mail PositionID ID odjela ID upravitelja
1000 Ivanov I.I. 1955-02-19 NULL 2 1 NULL
1002 Sidorov S.S. 1976-06-07 NULL 1 2 1000

Kao što vidite, podaci za odjel 3 također su izbrisani iz tablice Zaposlenici.

Opcija ON UPDATE CASCADE ponaša se slično, ali stupa na snagu prilikom ažuriranja vrijednosti ID-a u direktoriju. Na primjer, ako promijenimo ID pozicije u imeniku pozicija, tada će u ovom slučaju ID odjela u tablici Zaposlenici biti ažuriran na novu vrijednost ID-a koju smo postavili u imeniku. Ali u ovom slučaju to jednostavno neće biti moguće demonstrirati, jer. stupac ID u tablici odjela ima opciju IDENTITY, što će nas spriječiti da izvršimo sljedeći upit (promijeni ID odjela 3 u 30):

UPDATE odjeli SET ID=30 WHERE ID=3
Glavna stvar je razumjeti bit ove 2 opcije ON DELETE CASCADE i ON UPDATE CASCADE. Koristim ove opcije u vrlo rijetkim prilikama i preporučujem da dobro razmislite prije nego što ih navedete u referentnom ograničenju. ako slučajno izbrišete zapis iz referentne tablice, to može dovesti do velikih problema i izazvati lančanu reakciju.

Vratimo odjel 3:

Dajte dopuštenje za dodavanje/promjenu vrijednosti IDENTITY POSTAVI IDENTITY_INSERT odjele ON INSERT Departments(ID,Name) VALUES(3,N"IT") -- zabrani dodavanje/promjenu vrijednosti IDENTITY SET IDENTITY_INSERT Departments OFF
Potpuno obrišite tablicu Employees pomoću naredbe TRUNCATE TABLE:

TRUNCATE TABLICA Zaposlenici
I opet, ponovno učitajte podatke u njega pomoću prethodne naredbe INSERT:

INSERT Employees (ID, Name, Birthday, PositionID, DepartmentID, ManagerID)VRIJEDNOSTI (1000,N"Ivanov II","19550219",2,1,NULL), (1001,N"Petrov P.P." ,"19831203",3 ,3,1003), (1002,N"Sidorov SS","19760607",1,2,1000), (1003,N"Andrejev AA","19820417" ,4,3,1000)

Hajde da rezimiramo

Trenutno nam je dodano još nekoliko DDL naredbi:
  • Dodavanje svojstva IDENTITY u polje - omogućuje vam da se ovo polje automatski popuni (polje brojača) za tablicu;
  • ALTER TABLE naziv_tablice DODATI list_of_fields_with_characteristics – omogućuje vam dodavanje novih polja u tablicu;
  • ALTER TABLE naziv_tablice STUPAC ISPUŠTANJA list_of_fields - omogućuje vam uklanjanje polja iz tablice;
  • ALTER TABLE naziv_tablice DODAJ OGRANIČENJE naziv_ograničenja STRANI KLJUC(polja) REFERENCE lookup_table(polja) – omogućuje vam definiranje odnosa između tablice i tablice pretraživanja.

Ostala ograničenja - UNIQUE, DEFAULT, CHECK

Uz ograničenje UNIQUE, možete reći da vrijednost za svaki redak u danom polju ili skupu polja mora biti jedinstvena. U slučaju tablice Zaposlenici, takvo ograničenje možemo nametnuti polju Email. Samo unaprijed popunite e-poštu vrijednostima ako već nisu definirane:

UPDATE Employees SET Email=" [e-mail zaštićen]"GDJE ID=1000 UPDATE Employees SET Email=" [e-mail zaštićen]" WHERE ID=1001 UPDATE Employees SET Email=" [e-mail zaštićen]"GDJE ID=1002 UPDATE Employees SET Email=" [e-mail zaštićen]" GDJE ID=1003
A sada možete nametnuti jedinstveno ograničenje ovom polju:

ALTER TABLE Zaposlenici DODAJ OGRANIČENJE UQ_Employees_Email UNIQUE(E-pošta)
Sada korisnik neće moći unijeti isti e-mail za nekoliko zaposlenika.

Ograničenje jedinstvenosti obično se naziva na sljedeći način - prvo dolazi prefiks "UQ_", zatim naziv tablice i nakon podvlake je naziv polja na koje je ovo ograničenje nametnuto.

Sukladno tome, ako kombinacija polja treba biti jedinstvena u kontekstu redaka tablice, navodimo ih odvojene zarezima:

ALTER TABLE naziv_tablice DODAJ OGRANIČENJE naziv_ograničenja UNIQUE(polje1,polje2,…)
Dodavanjem DEFAULT ograničenja u polje, možemo postaviti zadanu vrijednost koja će biti zamijenjena ako polje nije navedeno u popisu polja naredbe INSERT kada se umetne novi zapis. Ovo ograničenje može se postaviti izravno prilikom izrade tablice.

Dodajmo novo polje "Datum zapošljavanja" u tablicu Zaposlenici i nazovimo ga Datum zapošljavanja i kažemo da će zadana vrijednost za ovo polje biti trenutni datum:

ALTER TABLE Zaposlenici DODAJ Datum zapošljavanja NOT NULL DEFAULT SYSDATETIME()
Ili ako stupac HireDate već postoji, tada se može koristiti sljedeća sintaksa:

ALTER TABLE Zaposlenici DODAJTE ZADANO SYSDATETIME() ZA Datum najma
Ovdje nisam naveo naziv ograničenja, jer u slučaju DEFAULT-a bio sam mišljenja da to i nije toliko kritično. Ali ako to radite na dobar način, onda, mislim, ne trebate biti lijeni i trebali biste postaviti normalno ime. To se radi na sljedeći način:

ALTER TABLE Zaposlenici DODAJ OGRANIČENJE DF_Employees_HireDate ZADANO SYSDATETIME() ZA Datum zapošljavanja
Budući da ovaj stupac prije nije postojao, kada se doda svakom zapisu, trenutna vrijednost datuma bit će umetnuta u polje HireDate.

Prilikom dodavanja novog unosa automatski će se umetnuti i trenutni datum, naravno, ako ga izričito ne zadamo, t.j. nije navedeno u popisu stupaca. Pokažimo to na primjeru bez navođenja polja HireDate na popisu dodanih vrijednosti:

INSERT Employees(ID,Name,Email)VALUES(1004,N"Sergeev S.S."," [e-mail zaštićen]")
Pogledajmo što se dogodilo:

ODABERITE * IZ Zaposlenika

iskaznica Ime Rođendan E-mail PositionID ID odjela ID upravitelja Datum zaposlenja
1000 Ivanov I.I. 1955-02-19 [e-mail zaštićen] 2 1 NULL 2015-04-08
1001 Petrov P.P. 1983-12-03 [e-mail zaštićen] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [e-mail zaštićen] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [e-mail zaštićen] 4 3 1000 2015-04-08
1004 Sergejev S.S. NULL [e-mail zaštićen] NULL NULL NULL 2015-04-08

Ograničenje provjere CHECK koristi se kada je potrebno provjeriti vrijednosti umetnute u polje. Na primjer, nametnimo ovo ograničenje polju broja osoblja, koje je naš identifikator (ID) zaposlenika. Koristeći ovo ograničenje, recimo da broj osoblja mora imati vrijednost od 1000 do 1999:

ALTER TABLE Zaposlenici DODAJ OGRANIČENJE CK_Employees_ID PROVJERA (ID IZMEĐU 1000 I 1999)
Ograničenje se obično naziva isto, prvo s prefiksom "CK_", zatim imenom tablice i imenom polja na koje se ograničenje primjenjuje.

Pokušajmo umetnuti nevažeći unos kako bismo provjerili funkcionira li ograničenje (trebali bismo dobiti odgovarajuću pogrešku):

INSERT Employees(ID,E-mail) VALUES(2000," [e-mail zaštićen]")
Sada promijenimo vrijednost koju treba umetnuti na 1500 i provjeriti je li zapis umetnut:

INSERT Employees(ID,E-mail) VALUES(1500," [e-mail zaštićen]")
Također možete stvoriti UNIQUE i CHECK ograničenja bez navođenja imena:

ALTER TABLE Zaposlenici DODAJTE UNIQUE(E-pošta) ALTER TABLE Zaposlenici DODAJTE PROVJERU (ID IZMEĐU 1000 I 1999)
Ali to nije dobra praksa i bolje je eksplicitno navesti naziv ograničenja, jer da kasnije shvatite što će biti teže, morat ćete otvoriti objekt i vidjeti za što je odgovoran.

Uz dobro ime, puno informacija o ograničenju može se naučiti izravno iz njegovog naziva.

I, sukladno tome, sva se ta ograničenja mogu kreirati odmah prilikom izrade tablice, ako već ne postoji. Izbrišemo tablicu:

DROP STOL Zaposlenici
I ponovno ga kreirajte sa svim stvorenim ograničenjima jednom naredbom CREATE TABLE:

CREATE TABLE Employees(ID int NOT NULL, Ime nvarchar(30), Datum rođendana, Email nvarchar(30), PositionID int, DepartmentID int, Datum HireDate NOT NULL DEFAULT SYSDATETIME(), -- za DEFAULT ću baciti OGRANIČENJA PK_EMARYplo KEY iznimka (ID), CONSTRAINT FK_Employees_DepartmentID STRANI KLJUČ(ID odjela) REFERENCE Odjeli(ID), CONSTRAINT FK_Employees_PositionID STRANI KLJUČ(PositionID) REFERENCES Positions(ID), CONSTRAINT UQEployees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT UQEployees_DepartmentID (ID Odjela) REFERENCES Odjeli(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT UQEployees_DepartmentID (ID) CONSTRAINT UQEploINTES UNIQUEES_0 m.

INSERT Employees (ID, Name, Birthday, Email, PositionID, DepartmentID)VRIJEDNOSTI (1000,N"Ivanov I.I.","19550219"," [e-mail zaštićen]",2,1), (1001,N"Petrov P.P.","19831203"," [e-mail zaštićen]",3,3), (1002,N"Sidorov S.S.","19760607"," [e-mail zaštićen]",1,2), (1003,N"Andrejev A.A.","19820417"," [e-mail zaštićen]",4,3)

Malo o indeksima stvorenim pri izradi PRIMARY KEY i UNIQUE ograničenja

Kao što možete vidjeti na gornjoj snimci zaslona, ​​prilikom izrade ograničenja PRIMARY KEY i UNIQUE automatski su stvoreni indeksi s istim nazivima (PK_Employees i UQ_Employees_Email). Prema zadanim postavkama, indeks za primarni ključ je kreiran kao CLUSTERED, a za sve ostale indekse kao NENCLUSTERED. Vrijedi reći da koncept klasteriranog indeksa nije dostupan u svim DBMS-ima. Tablica može imati samo jedan CLUSTERED indeks. CLUSTERED - znači da će zapisi tablice biti razvrstani po ovom indeksu, također se može reći da ovaj indeks ima izravan pristup svim podacima tablice. To je tako reći glavni indeks tablice. Da se još grublje izrazimo, to je indeks privijen na stol. Grupirani indeks je vrlo moćan alat koji može pomoći u optimizaciji upita, samo imajte to na umu. Ako želimo reći da se klasterirani indeks ne koristi u primarnom ključu, već za drugi indeks, tada pri izradi primarnog ključa moramo navesti opciju NONCLUSTERED:

ALTER TABLE naziv_tablice DODAJ OGRANIČENJE naziv_ograničenja PRIMARNI KLJUČ NONCLUSTERED(polje1,polje2,…)
Na primjer, učinimo da indeks ograničenja PK_Employees nije grupiran, a indeks ograničenja UQ_Employees_Email klasteriran. Prije svega, uklonimo ova ograničenja:

ALTER TABLE Zaposlenici DROP OGRANIČENJE PK_Employees ALTER TABLE Zaposlenici DROP OGRANIČENJE UQ_Employees_Email
A sada ih stvorimo s opcijama CLUSTERED i NONCLUSTERED:

ALTER TABLE Zaposlenici DODAJ OGRANIČENJE PK_Employees PRIMARNI KLJUČ NONCLUSTERED (ID) ALTER TABLE Zaposlenici DODAJ OGRANIČENJE UQ_Employees_Email UNIQUE CLUSTERED (E-pošta)
Sada, kada odaberemo iz tablice Employees, možemo vidjeti da su zapisi razvrstani prema grupiranom indeksu UQ_Employees_Email:

ODABERITE * IZ Zaposlenika

iskaznica Ime Rođendan E-mail PositionID ID odjela Datum zaposlenja
1003 Andreev A.A. 1982-04-17 [e-mail zaštićen] 4 3 2015-04-08
1000 Ivanov I.I. 1955-02-19 [e-mail zaštićen] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [e-mail zaštićen] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [e-mail zaštićen] 1 2 2015-04-08

Prije toga, kada je klasterirani indeks bio indeks PK_Employees, zapisi su prema zadanim postavkama bili razvrstani prema ID polju.

Ali u ovom slučaju ovo je samo primjer koji pokazuje bit grupiranog indeksa, jer. najvjerojatnije će se upiti tablici Zaposlenici postavljati po ID polju, au nekim slučajevima ono može i samo djelovati kao referenca.

Za imenike je obično preporučljivo da se klasterirani indeks gradi na primarnom ključu, jer u zahtjevima se često pozivamo na identifikator imenika kako bismo dobili, na primjer, naziv (Pozicija, Odjel). Ovdje se prisjećamo onoga o čemu sam gore napisao, da klasterirani indeks ima izravan pristup recima tablice, a iz toga slijedi da možemo dobiti vrijednost bilo kojeg stupca bez dodatnih troškova.

Grupirani indeks je koristan za primjenu na polja koja se najčešće odabiru.

Ponekad tablice kreiraju ključ pomoću zamjenskog polja, u kojem slučaju je korisno zadržati opciju CLUSTERED indeksa za prikladniji indeks i navesti opciju NONCLUSTERED kada kreirate zamjenski primarni ključ.

Hajde da rezimiramo

U ovoj fazi smo se upoznali sa svim vrstama ograničenja, u njihovom najjednostavnijem obliku, koja se kreiraju naredbom poput "ALTER TABLE table_name ADD CONSTRAINT constraint_name ...":
  • GLAVNI KLJUČ- glavni ključ;
  • STRANI KLJUC- postavljanje poveznica i praćenje referentnog integriteta podataka;
  • JEDINSTVENO- omogućuje vam stvaranje jedinstvenosti;
  • ČEK- omogućuje provođenje ispravnosti unesenih podataka;
  • ZADANO– omogućuje postavljanje zadane vrijednosti;
  • Također je vrijedno napomenuti da se sva ograničenja mogu ukloniti pomoću naredbe " ALTER TABLE naziv_tablice ISPUSTI OGRANIČENJE naziv_ograničenja".
Djelomično smo se dotakli i teme indeksa te analizirali pojam klastera ( SKUPLJENI) i negrupa ( NEKLASTERIRANE) indeks.

Izrada samostalnih indeksa

Samodostatnost se ovdje odnosi na indekse koji nisu kreirani za PRIMARY KEY ili UNIQUE ograničenje.

Indeksi na polju ili poljima mogu se kreirati sljedećom naredbom:

CREATE INDEX IDX_Employees_Name ON Zaposlenici (ime)
Ovdje također možete odrediti CLUSTERED, NONCLUSTERED, UNIQUE opcije, a možete odrediti i smjer sortiranja za svako pojedinačno polje ASC (zadano) ili DESC:

STVORI JEDINSTVENI NEKLASTERIRAN INDEX UQ_Employees_EmailDesc NA Zaposlenicima (Email DESC)
Prilikom izrade indeksa koji nije grupiran, opcija NONCLUSTERED može se izostaviti, kao podrazumijeva se prema zadanim postavkama, ovdje je prikazan samo kako bi se označio položaj opcije CLUSTERED ili NONCLUSTERED u naredbi.

Indeks možete ukloniti sljedećom naredbom:

DROP INDEX IDX_Employees_Name ON Zaposlenici
Jednostavni indeksi, baš kao i ograničenja, mogu se kreirati u kontekstu naredbe CREATE TABLE.

Na primjer, izbrišite tablicu ponovo:

DROP STOL Zaposlenici
I ponovno ga kreirajte sa svim stvorenim ograničenjima i indeksima jednom naredbom CREATE TABLE:

CREATE TABLE Employees(ID int NOT NULL, Ime nvarchar(30), Datum rođenja, E-pošta nvarchar(30), PositionID int, DepartmentID int, Datum zapošljavanja NOT NULL OGRANIČENJE DF_Employees_HireDate DEFAULT SYSDATEtTIME(),Employees_HireDate DEFAULT SYSDATEtTIME(),m PRIM.Upravitelj ), Ograničenje FK_Pusees_departmentid Strani ključ (Odjel) Reference Reference Odjeli (ID), ograničenje FK_ Zaposlenici_postituistid Strani ključ (pozicije), ograničenja 1999.), INDEX IDX_ime_zaposlenika(ime))
Na kraju u tablicu naših zaposlenika unesite:

INSERT Employees (ID, Name, Birthday, Email, PositionID, DepartmentID, ManagerID)VRIJEDNOSTI (1000,N"Ivanov II","19550219"," [e-mail zaštićen]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [e-mail zaštićen]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [e-mail zaštićen]",1,2,1000), (1003,N"Andrejev A.A.","19820417"," [e-mail zaštićen]",4,3,1000)
Osim toga, vrijedno je napomenuti da se vrijednosti mogu uključiti u negrupisani indeks tako da ih navedete u INCLUDE. Oni. u ovom slučaju, indeks INCLUDE će donekle nalikovati klasteriranom indeksu, samo što sada indeks nije vezan uz tablicu, ali su potrebne vrijednosti priložene indeksu. Sukladno tome, takvi indeksi mogu uvelike poboljšati izvedbu upita za odabir (SELECT), ako su sva navedena polja u indeksu, onda je moguće da uopće neće biti potrebe za pristupom tablici. Ali to prirodno povećava veličinu indeksa, jer vrijednosti navedenih polja su duplicirane u indeksu.

Isječak iz MSDN-a. Opća sintaksa naredbi za stvaranje indeksa

STVORI [JEDINSTVENI] [SKUPLJENI | NONCLUSTERED ] INDEX index_name UKLJUČENO (stupac [ ASC | DESC ] [ ,...n ]) [ INCLUDE (naziv_stupca [ ,...n ]) ]

Hajde da rezimiramo

Indeksi mogu povećati brzinu dohvaćanja podataka (SELECT), ali indeksi smanjuju brzinu ažuriranja podataka tablice, jer nakon svake izmjene, sustav će morati ponovno izgraditi sve indekse za određenu tablicu.

Poželjno je u svakom slučaju pronaći optimalno rješenje, zlatnu sredinu, kako bi i izvedba uzorkovanja i modifikacija podataka bili na odgovarajućoj razini. Strategija za stvaranje indeksa i njihov broj mogu ovisiti o mnogim čimbenicima, kao što je koliko se često mijenjaju podaci u tablici.

Zaključak o DDL-u

Kao što vidite, DDL jezik nije tako kompliciran kao što se može činiti na prvi pogled. Ovdje sam uspio prikazati gotovo sve njegove glavne nacrte, koristeći samo tri tablice.

Glavna stvar je razumjeti suštinu, a ostalo je stvar prakse.

Sretno u svladavanju ovog prekrasnog jezika zvanog SQL.

Dobrodošli na moju stranicu bloga. Danas ćemo govoriti o sql upitima za početnike. Neki webmasteri mogu imati pitanje. Zašto naučiti sql? Ne možete proći?

Ispada da to neće biti dovoljno za stvaranje profesionalnog internetskog projekta. Sql se koristi za rad s bazom podataka i izradu aplikacija za WordPress. Pogledajmo detaljnije kako koristiti upite.

Što je

Sql je jezik strukturiranih upita. Stvoren za određivanje vrste podataka, omogućavanje pristupa njima i obradu informacija u kratkim vremenskim razdobljima. Opisuje komponente ili neke rezultate koje želite vidjeti na internetskom projektu.

Jednostavnim riječima, ovaj programski jezik vam omogućuje dodavanje, izmjenu, pretraživanje i prikaz informacija u bazi podataka. Mysql je popularan zbog činjenice da se koristi za stvaranje dinamičkih internetskih projekata koji se temelje na bazi podataka. Stoga, da biste razvili funkcionalan blog, morate naučiti ovaj jezik.

Što mogu učiniti

Jezik sql dopušta:

  • kreirati tablice;
  • promijeniti primanje i pohranjivanje različitih podataka;
  • kombinirati informacije u blokove;
  • zaštititi podatke;
  • kreirati zahtjeve u pristupu.

Važno! Nakon što ste se pozabavili sql-om, možete pisati aplikacije za WordPress bilo koje složenosti.

Kakva struktura

Baza podataka se sastoji od tablica koje se mogu predstaviti kao Excel datoteka.

Ona ima ime, stupce i red s nekim podacima. Takve tablice možete kreirati pomoću sql upita.

Što trebaš znati


Ključne točke prilikom učenja sql

Kao što je gore navedeno, upiti se koriste za obradu i unos novih informacija u bazu podataka koja se sastoji od tablica. Svaki redak je zaseban unos. Pa napravimo bazu podataka. Da biste to učinili, napišite naredbu:

Napravite bazu podataka 'bazaname'

U navodnicima pišemo naziv baze na latinskom. Pokušajte smisliti neko smisleno ime za nju. Nemojte stvarati bazu podataka poput "111", "www" i slično.

Nakon kreiranja baze podataka, instalirajte:

NAZIV SKUPOVA 'utf-8'

To je neophodno kako bi se sadržaj na stranici ispravno prikazao.

Sada kreiramo tablicu:

IZRADI TABLICU 'bazaname' . 'stol' (

id INT(8) NOT NULL AUTO_INCREMENT PRIMARNI KLJUČ,

zapisnik VARCHAR(10),

proći VARCHAR(10),

datum DATUM

U drugom retku napisali smo tri atributa. Pogledajmo što znače:

  • Atribut NOT NULL znači da ćelija neće biti prazna (polje je obavezno);
  • Vrijednost AUTO_INCREMENT je autocomplete;
  • PRIMARY KEY je primarni ključ.

Kako dodati informacije

Za popunjavanje polja kreirane tablice vrijednostima koristi se izraz INSERT. Pišemo sljedeće retke koda:

UMETNI U 'tablicu'

(prijava, propusnica, datum) VRIJEDNOSTI

('Vasa', '87654321', '2017-06-21 18:38:44');

U zagradama označavamo naziv stupaca, au sljedećem - vrijednosti.

Važno! Slijedite redoslijed naziva i vrijednosti stupaca.

Kako ažurirati informacije

Za to se koristi naredba UPDATE. Pogledajmo kako promijeniti lozinku za određenog korisnika. Pišemo sljedeće retke koda:

UPDATE 'table' SET pass = '12345678' WHERE id = '1'

Sada promijenite lozinku u '12345678'. Promjene se događaju u retku s "id"=1. Ako ne napišete naredbu WHERE, promijenit će se svi redovi, a ne određeni.

Preporučam da kupite knjigu SQL za lutke ". Uz njegovu pomoć moći ćete profesionalno raditi s bazom podataka korak po korak. Sve informacije izgrađene su na temelju principa od jednostavnog do složenog i bit će dobro prihvaćene.

Kako izbrisati unos

Ako ste nešto pogrešno napisali, ispravite to naredbom DELETE. Radi isto kao UPDATE. Pišemo sljedeći kod:

IZBRIŠI IZ 'tablice' GDJE je id = '1'

Uzorkovanje informacija

Naredba SELECT koristi se za dohvaćanje vrijednosti iz baze podataka. Pišemo sljedeći kod:

SELECT * FROM 'table' WHERE id = '1'

U ovom primjeru odabiremo sva dostupna polja u tablici. To se događa ako u naredbu upišete zvjezdicu "*". Ako trebate odabrati neku vrijednost uzorka, napišite ovako:

SELECT zapisnik, proslijediti FROM tablicu WHERE id = '1'

Treba napomenuti da sposobnost rada s bazama podataka neće biti dovoljna. Da biste stvorili profesionalni internetski projekt, morat ćete naučiti kako dodati podatke iz baze podataka na stranice. Da biste to učinili, upoznajte se s php web programskim jezikom. Ovo će vam pomoći Kul tečaj Mihaila Rusakova .


Brisanje tablice

Pojavljuje se sa zahtjevom DROP. Da biste to učinili, napišite sljedeće retke:

DROP TABLE stol;

Izlaz zapisa iz tablice prema određenom uvjetu

Uzmite u obzir ovaj kod:

ODABIR ID, zemlju, grad IZ tablice WHERE ljudi>150000000

Prikazat će evidenciju zemalja u kojima živi više od sto pedeset milijuna stanovnika.

Udruga

Povezivanje više tablica zajedno je moguće pomoću Join. Pogledajte kako to radi u ovom videu:

PHP i MySQL

Još jednom želim naglasiti da su zahtjevi prilikom izrade internetskog projekta uobičajena stvar. Da biste ih koristili u php dokumentima, slijedite sljedeći algoritam radnji:

  • Povežite se s bazom podataka pomoću naredbe mysql_connect();
  • Pomoću mysql_select_db() odaberite željenu bazu podataka;
  • Obrada upita pomoću mysql_fetch_array();
  • Zatvaramo vezu naredbom mysql_close().

Važno! Rad s bazom podataka nije težak. Glavna stvar je ispravno napisati zahtjev.

Webmasteri početnici će razmisliti. I što čitati na ovu temu? Želio bih preporučiti knjigu Martina Grabera " SQL za obične smrtnike ". Napisano je tako da će početnici sve razumjeti. Koristite ga kao referentnu knjigu.

Ali ovo je teorija. Kako to funkcionira u praksi? Zapravo, internetski projekt ne samo da se mora stvoriti, već i dovesti na TOP Googlea i Yandexa. Video tečaj će vam pomoći u tome " Izrada i promocija stranice ».


Video upute

Imate još pitanja? Pogledajte više online videa.

Zaključak

Dakle, bavljenje pisanjem sql upita nije tako teško kao što se čini, ali svaki webmaster to mora učiniti. Gore opisani video tečajevi pomoći će u tome. Pretplatite se na moja grupa VKontakte da prvi sazna za nove zanimljive informacije.

Većina modernih web aplikacija komunicira s bazama podataka, obično koristeći jezik tzv SQL. Na našu sreću, ovaj jezik je vrlo lako naučiti. U ovom članku ćemo pogledati jednostavno SQL zahtjeve i naučite kako ih koristiti za interakciju MySQL baza podataka.

Što trebaš?

SQL (jezik strukturiranih upita) jezik posebno dizajniran za interakciju sa sustavima za upravljanje bazama podataka kao što su MySQL, Oracle, Sqlite i drugi ... Za izvođenje SQL zahtjeve u ovom članku, savjetujem vam da instalirate MySQL na lokalno računalo. Također preporučam korištenje phpMyAdmin kao vizualno sučelje.

Sve je to dostupno u svima omiljenom Denveru. Mislim da bi svi trebali znati što je to i gdje se može nabaviti :). Limenka inače koristite WAMP ili MAMP.

Denver ima ugrađen MySQL konzola. Koristit ćemo ga.

IZRADI BAZU PODATAKA:stvaranje baze podataka

Evo naše prve molbe. Napravit ćemo našu prvu bazu podataka za daljnji rad.

Za početak otvorite MySQL konzolu i prijavu. Za WAMP zadana lozinka je prazna. To nije ništa :). Za MAMP - "korijen". Denver treba razjasniti.

Nakon prijave unesite sljedeći redak i kliknite Unesi:

STVORI BAZU PODATAKA my_first_db;

Imajte na umu da se točka-zarez (;) dodaje na kraju upita, baš kao i u drugim jezicima.

Također naredbe u SQL-u osjetljivo na velika i mala slova. Pišemo ih velikim slovima.

Mogućnosti samo: skup znakovai Usporedba

Ako želite instalirati skup znakova (skup znakova) i usporedba (usporedba) mogu napišite sljedeću naredbu:

KREIRANJE BAZE PODATAKA my_first_db ZADANI POSTAV ZNAKOVA utf8 COLLATE utf8_general_ci;

Pronađite popis skupova znakova koji su podržani MySQL.

PRIKAŽI BAZE PODATAKA:navodi sve baze podataka

Ova naredba se koristi za prikaz svih dostupnih baza podataka.

ISPUSTI BAZU PODATAKA:brisanje baze podataka

Možete ispustiti postojeći db s ovim upitom.

Budite oprezni s ovom naredbom jer se izvodi bez upozorenja. Ako u vašoj bazi podataka postoje podaci, svi će biti izbrisani.

KORISTITI:Odabir baze podataka

Tehnički, ovo nije upit, već operator i ne zahtijeva točku-zarez na kraju.

To govori MySQL odaberite bazu podataka koja će raditi prema zadanim postavkama za trenutnu sesiju. Sada smo spremni kreirati tablice i raditi druge stvari s bazom podataka.

Što je tablica u bazi podataka?

Tablicu u bazi podataka možete predstaviti kao excel datoteku.

Baš kao na slici, tablice imaju nazive stupaca, retke i informacije. Preko SQL upite možemo kreirati takve tablice. Također možemo dodavati, čitati, ažurirati i brisati informacije.

IZRADI TABLICU: Napravite tablicu

C Ovim upitom možemo kreirati tablice u bazi podataka. Nažalost dokumentacija MySQL nije baš jasno za početnike na ovu temu. Struktura ovog tipa zahtjeva može biti vrlo složena, ali počet ćemo s jednostavnim.

Sljedeći upit će stvoriti tablicu s 2 stupca.

CREATE TABLE korisnici (korisničko ime VARCHAR(20), datum_kreiranja DATE);

Imajte na umu da svoje upite možemo pisati u više redaka i s karticama za uvlačenje.

Prva linija je jednostavna. Jednostavno kreiramo tablicu pod nazivom "korisnici". Zatim, u zagradama, odvojenim zarezima, nalazi se popis svih stupaca. Nakon naziva svakog stupca imamo tipove informacija kao što su VARCHAR ili DATE.

VARCHAR(20) znači da je stupac tipa string i može imati najviše 20 znakova. DATE je također vrsta informacija koja se koristi za pohranjivanje datuma u ovom formatu: "GGGG - MM-DD".

GLAVNI KLJUČ ( glavni ključh)

Prije nego što izvršimo sljedeći upit, također moramo uključiti stupac za "user_id", koji će biti naš primarni ključ. O PRIMARNOM KLJUČU možete razmišljati kao o informaciji koja se koristi za identifikaciju svakog retka u tablici.

CREATE TABLE korisnici (user_id INT AUTO_INCREMENT PRIMARY KEY, korisničko ime VARCHAR(20), create_date DATE);

INT čini 32-bitni cjelobrojni tip (poput brojeva). AUTO_INCREMENT automatski generira novu vrijednost iskaznica svaki put kada dodamo nove redove informacija. To nije potrebno, ali olakšava cijeli proces.

Ovaj stupac ne mora biti cjelobrojna vrijednost, ali se najčešće koristi. Posjedovanje primarnog ključa također je izborno, ali se preporučuje za arhitekturu baze podataka i performanse.

Pokrenimo upit:

PRIKAŽI TABLE:prikaži sve tablice

Ovaj upit vam omogućuje da dobijete popis tablica koje se nalaze u bazi podataka.

OBJASNITI:Prikaži strukturu tablice

Možete koristiti ovaj upit za prikaz strukture postojeće tablice.

Stupci se prikazuju sa svim svojstvima.

DOP TABLICA:izbrisati tablicu

Baš kao DROP BAZE PODATAKA, ovaj upit ispušta tablicu i njezin sadržaj bez upozorenja.

ALTER TABLE: stol za promjenu

Ovaj upit također može sadržavati složenu strukturu zbog više promjena koje može napraviti u tablici. Pogledajmo primjere.

(ako ste izbrisali tablicu u zadnjem koraku, stvorite je ponovo za testove)

DODAVANJE STUPCA

ALTER TABLE korisnici DODAJ e-poštu VARCHAR(100) NAKON korisničkog imena;

Zbog dobre čitljivosti SQL-a, mislim da ga nema smisla detaljno objašnjavati. Dodajemo novi stupac "e-pošta" iza "korisničko ime".

UKLANJANJE STUPCA

Također je bilo vrlo lako. Molimo koristite ovaj upit s oprezom jer podaci mogu biti izbrisani bez upozorenja.

Vratite stupac koji ste upravo izbrisali za daljnje eksperimentiranje.

IZMIJENITE KOLONU

Ponekad ćete možda htjeti promijeniti svojstva stupca, a ne morate ga u potpunosti ukloniti da biste to učinili.

Ovaj je upit preimenovao korisnički stupac u "user_name" i promijenio njegov tip iz VARCHAR(20) u VARCHAR(30). Takva promjena ne bi trebala promijeniti podatke u tablici.

UMETNUTI: Dodavanje informacija u tablicu

Dodajmo neke informacije u tablicu pomoću sljedećeg upita.

Kao što možete vidjeti, VALUES() sadrži popis vrijednosti odvojenih zarezima. Sve vrijednosti su zatvorene u pojedinačnim stupcima. I vrijednosti moraju biti u redoslijedu stupaca koji su definirani kada je tablica stvorena.

Imajte na umu da je prva vrijednost NULL za polje PRIMARY KEY pod nazivom "user_id". To radimo kako bi se ID automatski generirao, budući da stupac ima svojstvo AUTO_INCREMENT. Kada se podaci dodaju prvi put, ID će biti 1. Sljedeći red će biti 2, i tako dalje...

ALTERNATIVNA OPCIJA

Postoji još jedna opcija upita za dodavanje redaka.

Ovaj put koristimo ključnu riječ SET umjesto VALUES i ona nema zagrade. Postoji nekoliko nijansi:

Kolona se može preskočiti. Na primjer, nismo dodijelili vrijednost "user_id", koja će prema zadanim postavkama dobiti vrijednost AUTO_INCREMENT. Ako izostavite VARCHAR stupac, tada će se dodati prazan niz.

Svaki stupac mora se pozvati po imenu. Zbog toga se mogu spominjati bilo kojim redoslijedom, za razliku od prethodne verzije.

ALTERNATIVA 2

Evo još jedne opcije.

Opet, budući da postoje reference na naziv stupca, možete odrediti vrijednosti bilo kojim redoslijedom.

LAST_INSERT_ID()

Možete koristiti ovaj upit za dobivanje ID-a koji je bio AUTO_INCREMENT za zadnji redak trenutne sesije.

SADA()

Sada je vrijeme da vam pokažemo kako možete koristiti MySQL funkciju u upitima.

Funkcija NOW() vraća trenutni datum. Dakle, možete ga koristiti za automatsko postavljanje datuma stupca na trenutni kada umetnete novi redak.

Imajte na umu da smo primili 1 upozorenje, ali ga zanemarite. Razlog tome je što NOW() također služi za prikaz privremenih informacija.

IZABERI: Čitanje podataka iz tablice

Ako dodamo informacije u tablicu, onda bi bilo logično naučiti kako ih čitati odatle. Tu će nam pomoći upit SELECT.

Ispod je najjednostavniji mogući SELECT upit za čitanje tablice.

U ovom slučaju, zvjezdica (*) znači da smo zatražili sva polja iz tablice. Ako želite samo određene stupce, upit bi izgledao ovako.

StanjeGDJE

Najčešće nas ne zanimaju sve kolumne, nego samo neke. Na primjer, pretpostavimo da nam je potrebna samo adresa e-pošte za korisnika "nettuts".

WHERE vam omogućuje postavljanje uvjeta u upitu i detaljan odabir.

Imajte na umu da jednakost koristi jedan znak jednakosti (=) umjesto dva kao u programiranju.

Također možete koristiti usporedbe.

I ili ILI se mogu koristiti za kombiniranje uvjeta:

Imajte na umu da numeričke vrijednosti ne smiju biti u navodnicima.

U()

Ovo je korisno za uzorkovanje na više vrijednosti.

KAO

Omogućuje vam izradu "zamjenskih" zahtjeva

Znak % koristi se kao "zamjenski znak". To jest, na svom mjestu može biti bilo što.

StanjeNARUDŽITE PO

Ako želite dobiti rezultat u uređenom obliku po nekom kriteriju

Zadani redoslijed je ASC (od najmanjeg do najvećeg). Za obrnuto, DESC se koristi.

LIMIT ... OFFSET ...

Možete ograničiti broj rezultata koje primate.

LIMIT 2 uzima samo prva 2 rezultata. LIMIT 1 OFFSET 2 dobiva 1 rezultat nakon prva 2. LIMIT 2, 1 znači isto (samo primijetite da pomak dolazi prvo, a zatim limit ).

AŽURIRANJE: Izmijenite podatke u tablici

Ovaj se upit koristi za promjenu informacija u tablici.

U većini slučajeva koristi se zajedno s klauzulom WHERE jer ćete najvjerojatnije htjeti unijeti izmjene u određene stupce. Ako ne postoji klauzula WHERE, promjene će utjecati na sve retke.

Također možete koristiti LIMIT da ograničite broj redaka koje je potrebno izmijeniti.

IZBRISATI: Uklanjanje informacija iz tablice

Baš kao i UPDATE, ovaj se upit koristi s WHERE:

Da biste uklonili sadržaj tablice, jednostavno možete učiniti sljedeće:

IZBRIŠI IZ korisnika;

Ali bolje je koristiti SKRATITI

Osim brisanja, ovaj upit također poništava vrijednosti AUTO_INCREMENT a pri ponovnom dodavanju redaka odbrojavanje će početi od nule. IZBRISATI ne učini to i odbrojavanje se nastavlja.

Onemogućavanje vrijednosti niza i posebnih riječi

vrijednosti niza

Neki znakovi moraju biti onemogućeni ( pobjeći ), ili može doći do problema.

Za to se koristi obrnuta kosa crta.(\).

Posebne riječi

Jer u MySQL ima mnogo posebnih riječi ODABIR ili AŽURIRAJ ), kako bi se izbjegle pogreške pri njihovoj upotrebi, moraju se koristiti navodnici. Ali ne obični citati, nego ovi(`).

Odnosno, morat ćete dodati stupac pod nazivom " izbrisati ", morate to učiniti ovako:

Zaključak

Hvala što ste pročitali do kraja. Nadam se da vam je ovaj članak bio koristan. Još nije gotovo! Nastavit će se:).

Predstavljam vam besplatni prijevod članka SQL za početnike

Sve više i više modernih web aplikacija komunicira s bazama podataka, obično koristeći jezik SQL. Na našu sreću, ovaj jezik je prilično lako naučiti. U ovom članku počet ćemo učiti osnove SQL upita i njihovu interakciju s bazom podataka. MySQL.

Što trebaš

SQL (Structured Query Language) je jezik dizajniran za interakciju sa sustavima upravljanja relacijskim bazama podataka (DBMS) kao što su MySQL, Oracle, Sqlite i drugi. Da biste izvršili SQL upite u ovom članku, pretpostavljam da jeste MySQL. Također preporučam korištenje phpMyAdmin kao vizualni prikaz za MySQL.

Sljedeće će aplikacije olakšati instalaciju MySQL i phpMyAdmin na vaše računalo:

  • WAMP za Windows
  • MAMP za Mac

Počnimo izvršavati upite u naredbenom retku. WAMP već ga sadrži u konzoli MySQL. Za MAMP možda ćete morati ovo pročitati.

CREATE DATABASE: Napravite bazu podataka

Naš prvi zahtjev. Napravit ćemo bazu podataka s kojom ćemo raditi.

Prije svega, otvorite konzolu MySQL i prijavite se. Za WAMP, prema zadanim postavkama, koristi se prazna lozinka. Za MAMP lozinka mora biti "root".

Nakon što se prijavite, upišite ovaj zahtjev i kliknite Unesi:

STVORI BAZU PODATAKA my_first_db;

Imajte na umu da se točka-zarez (;) dodaje na kraju upita, baš kao na kraju retka u kodu.

Isto tako, ključne riječi STVORI BAZU PODATAKA neosjetljivo na velika i mala slova, kao i sve ključne riječi u SQL. Ali ćemo ih pisati velikim slovima radi bolje čitljivosti.

Napomena: skup znakova i poredak

Ako želite postaviti zadani skup znakova i poredak, upotrijebite upit poput ovog:

KREIRANJE BAZE PODATAKA my_first_db ZADANI POSTAV ZNAKOVA utf8 COLLATE utf8_general_ci;

Popis podržanih skupova znakova i usporedbi pronaći ćete na MySQL.

PRIKAŽI BAZE PODATAKA: Popis svih baza podataka

Ovaj se upit koristi za prikaz svih baza podataka.

DROP DATABASE: Ispustite bazu podataka

Ovim upitom možete izbrisati postojeću bazu podataka.

Budite oprezni s ovim upitom jer ne ispisuje nikakva upozorenja. Ako imate tablice i podatke u bazi podataka, upit će ih sve ispustiti u trenu.

S tehničke strane, ovo nije zahtjev. Ovo je "operator" i ne zahtijeva točku i zarez na kraju.

On javlja MySQL da trebate odabrati zadanu bazu podataka i raditi s njom do kraja sesije. Sada smo spremni za kreiranje tablica i ostatka ove baze podataka.

Što je tablica baze podataka?

Tablicu u bazi podataka možete zamisliti kao običnu tablicu ili kao csv datoteku koja ima strukturirane podatke.

Kao u ovom primjeru, tablica ima nazive redaka i stupce podataka. Koristeći SQL upite možemo kreirati ovu tablicu. Također možemo dodavati, čitati, mijenjati i brisati podatke.

CREATE TABLE: Napravite tablicu

Ovim upitom možemo kreirati tablicu u bazi podataka. Nažalost dokumentacija MySQL nije baš prijateljski prema novim korisnicima. Struktura ovog upita može biti vrlo složena, ali počet ćemo jednostavno.

Sljedeći upit stvara tablicu s dva stupca.

CREATE TABLE korisnici (korisničko ime VARCHAR(20), datum_kreiranja DATE);

Imajte na umu da možemo napisati upit u više redaka i koristiti Tab za povlačenje.

Sve je jednostavno s prvim redom. Izrađujemo tablicu pod nazivom korisnika. Nadalje, u zagradama su stupci tablice navedeni odvojeni zarezima. Nakon naziva svakog stupca dolazi tip podataka, na primjer, VARCHAR ili DATUM.

VARCHAR(20) znači da je stupac tipa string i ne može imati više od 20 znakova. DATUM- vrsta podataka namijenjena za pohranjivanje datuma u formatu: "GGGG-MM-DD".

glavni ključ

Prije nego što izvršimo ovaj upit, moramo umetnuti stupac user_id, koji će biti PRIMARNI KLJUČ. Bez da budete previše konkretni, možete zamisliti primarni ključ kao način prepoznavanja svakog retka podataka u tablici.

Zahtjev postaje ovako:

CREATE TABLE korisnici (user_id INT AUTO_INCREMENT PRIMARY KEY, korisničko ime VARCHAR(20), create_date DATE);

INT- 32-bitni cijeli broj (numerički). AUTO_INCREMENT automatski generira novi ID broj svaki put kada se doda redak podataka. Nije potrebno, ali je s njim praktičnije.

Ovaj stupac možda nije cijeli broj, iako je najčešći tip podataka. Stupac primarnog ključa nije potreban, ali se preporučuje za poboljšanje performansi i arhitekture baze podataka.

Pokrenimo upit:

PRIKAŽI TABLE: Popis svih tablica

Upit vam omogućuje da dobijete popis svih tablica u trenutnoj bazi podataka.

OBJASNITI: Prikaži strukturu tablice

Koristite ovaj upit za prikaz strukture postojeće tablice.

Kao rezultat, prikazana su polja (stupci) i njihova svojstva.

DROP TABLE: Ispustite stol

Kao ISPUSTI BAZE PODATAKA, ovaj upit briše tablicu i njezin sadržaj bez ikakvog upozorenja.

ALTER TABLE: Promjena tablice

Takav upit može imati složenu strukturu jer može napraviti više promjena u tablici. Pogledajmo jednostavne primjere.

Zbog čitljivosti SQL, ovaj zahtjev ne treba obrazlagati.

Uklanjanje je jednako jednostavno. Pažljivo koristite zahtjev, podaci se brišu bez upozorenja.

Ponovno dodajte polje email, trebat će vam kasnije:

ALTER TABLE korisnici DODAJ e-poštu VARCHAR(100) NAKON korisničkog imena;

Ponekad ćete možda morati promijeniti svojstva stupca, nije ga potrebno brisati i ponovno kreirati.

Ovaj upit preimenuje polje Korisničko ime v Korisničko ime i mijenja svoj tip od VARCHAR(20) na VARCHAR(30). Takve promjene ne utječu na podatke u tablici.

INSERT: Dodavanje podataka u tablicu

Dodajmo zapise u tablicu pomoću upita.

Kao što vidiš, VRIJEDNOSTI() sadrži popis vrijednosti odvojenih zarezima. Vrijednosti niza su zatvorene u jednostrukim navodnicima. Vrijednosti moraju biti u redoslijedu navedenom prilikom kreiranja tablice.

Imajte na umu da je prva vrijednost NULL za primarni ključ čije smo polje imenovali user_id. Sve zato što je polje označeno kao AUTO_INCREMENT a id se generira automatski. Prvi redak podataka imat će id 1. Sljedeći dodan redak bit će 2, i tako dalje.

Alternativna sintaksa

Evo još jedne sintakse za umetanje redaka.

Ovaj put smo koristili ključnu riječ SET umjesto VRIJEDNOSTI. Napomenimo nekoliko stvari:

  • Stupac se može izostaviti. Na primjer, polju nismo dodijelili vrijednost user_id jer je označen kao AUTO_INCREMENT. Ako ne dodijelite vrijednost polju s tipom VARCHAR, tada će prema zadanim postavkama uzeti vrijednost praznog niza (ako druga zadana vrijednost nije postavljena prilikom kreiranja tablice).
  • Svaki stupac može se pozvati po imenu. Prema tome, polja mogu ići bilo kojim redoslijedom, za razliku od prethodne sintakse.

Alternativna sintaksa broj 2

Evo još jednog primjera.

Kao i prije, poljima se može pristupiti po imenu, mogu se pojaviti bilo kojim redoslijedom.

Koristite ovaj upit da biste dobili ID zadnjeg umetnutog retka.

SADA()

Vrijeme je da vam pokažemo kako koristiti funkcije MySQL u zahtjevima.

Funkcija SADA() vraća trenutni datum. Koristite ga za automatsko dodavanje trenutnog datuma u polje s vrstom DATUM.

Napominjemo da smo primili upozorenje od MySQL, ali nije toliko bitno. Razlog je taj što funkcija SADA() zapravo vraća informacije o vremenu.

Stvorili smo polje datum_kreiranja, koji može sadržavati samo datum, a ne vrijeme, pa su podaci skraćeni. Umjesto SADA() mogli bismo koristiti CURDATE(), koji vraća samo trenutni datum, ali će završiti s istim rezultatom.

SELECT: Dohvaćanje podataka iz tablice

Očito su podaci koje smo napisali beskorisni dok ih ne pročitamo. Zahtjev dolazi u pomoć IZABERI.

Najjednostavniji primjer korištenja upita IZABERI za čitanje podataka iz tablice:

Zvjezdica (*) znači da želimo dobiti sve stupce tablice. Ako trebate dobiti samo određene stupce, upotrijebite nešto poput ovoga:

Češće nego ne, želimo dobiti samo određene retke, a ne sve. Na primjer, uzmimo e-mail adresu korisnika nettuts.

Slično je uvjetu IF. WHERE vam omogućuje da postavite uvjet u upitu i dobijete željeni rezultat.

Uvjet jednakosti koristi jednostruki znak (=) umjesto dvostrukog znaka (==) koji biste mogli koristiti u programiranju.

Možete koristiti i druge uvjete:

I i ILI koriste se za kombiniranje uvjeta:

Imajte na umu da numeričke vrijednosti ne moraju biti stavljene u navodnike.

U()

Koristi se za usporedbu s više vrijednosti.

KAO

Omogućuje postavljanje uzorka pretraživanja.

Znak postotka (%) koristi se za određivanje uzorka.

NARUDŽITI PO stanju

Koristite ovaj uvjet ako želite da se rezultat vrati sortirano:

Zadani redoslijed je ASC(Uzlazni). Dodati DESC sortirati obrnutim redoslijedom.

LIMIT … OFFSET …

Možete ograničiti broj vraćenih redaka.

OGRANIČENJE 2 uzima prva dva retka. OGRANIČENJE 1 OFFSET 2 zauzima jedan red, nakon prva dva. OGRANIČENJE 2, 1 znači isto, samo je prvi broj pomak, a drugi ograničava broj redaka.

AŽURIRANJE: Ažurirajte podatke u tablici

Ovaj se upit koristi za ažuriranje podataka u tablici.

U većini slučajeva koristi zajedno sa GDJE za ažuriranje određenih redaka. Ako stanje GDJE nije postavljeno, promjene će se primijeniti na sve retke.

Da biste ograničili retke koji se mogu mijenjati, možete koristiti OGRANIČITI.

DELETE: Brisanje podataka iz tablice

Kao , ovaj se upit često koristi zajedno s uvjetom GDJE.

KRZNI TABLICA

Za uklanjanje sadržaja iz tablice upotrijebite sljedeći upit:

IZBRIŠI IZ korisnika;

Za bolju izvedbu koristite .

Također resetirajte brojač polja AUTO_INCREMENT, tako da će novododani retki imati ID jednak 1. Prilikom korištenja to se neće dogoditi i brojač će nastaviti rasti.

Izbjegavanje vrijednosti niza i posebnih riječi

Vrijednosti niza

Neke znakove je potrebno pobjeći, inače može doći do problema.

Obrnuta kosa crta (\) koristi se za izlaz.

To je vrlo važno iz sigurnosnih razloga. Bilo koji korisnički podaci moraju se izbjeći prije upisivanja u bazu podataka. V PHP koristite funkciju mysql_real_escape_string() ili pripremljene upite.

Posebne riječi

Jer u MySQL mnoge rezervirane riječi poput IZABERI ili , da biste izbjegli proturječja, stavite nazive stupaca i tablica u navodnike. I trebate koristiti ne obične navodnike, već kvačice (`).

Recimo da iz nekog razloga želite dodati stupac pod nazivom :

Zaključak

Hvala na čitanju članka. Nadam se da sam vam uspio pokazati taj jezik SQL vrlo funkcionalan i lak za učenje.