Isang may larawang SQL tutorial para sa mga nagsisimula. Mga Archive ng Kategorya: SQL Books Ang SQL Programming Language para sa mga Dummies

Mula sa may-akda: tinawag ka nilang teapot? Well, ito ay maaaring ayusin! Ang bawat samovar ay dating isang tsarera! O ang bawat propesyonal ay isang samovar? Hindi, may mali na naman! Sa pangkalahatan, ang MySQL para sa mga nagsisimula.

Bakit kailangan ng mga dummies ang MySQL

Kung sineseryoso mong ikonekta ang iyong buhay sa Internet, pagkatapos ay sa pinakaunang mga hakbang sa "web" ay makakatagpo ka ng DBMS na ito. Ang MySQL ay maaaring ligtas na tinatawag na "buong internet" na sistema ng pamamahala ng database. Walang isa o mas seryosong mapagkukunan ang magagawa kung wala ito, naroroon ito sa admin panel ng bawat pagho-host. At higit sa lahat ng sikat na CMS at maging ang mga "self-made" na makina ay binuo kasama ang kanyang pakikilahok.

Sa pangkalahatan, hindi mo magagawa nang wala ang platform na ito. Ngunit para pag-aralan ito, kakailanganin mo rin ang tamang diskarte, tamang tool, at higit sa lahat, pagnanais at pasensya. Umaasa ako na mayroon kang sapat na mga huling bahagi. At maging handa para sa katotohanan na ang iyong utak ay kumukulo, at ang singaw ay bubuhos mula sa iyong ulo, tulad ng mula sa isang tunay na takure.

Ngunit ang MySQL ay napakahirap para sa mga dummies lamang kung sinimulan mo itong pag-aralan nang mali. Hindi kami gagawa ng ganoong pagkakamali, at sisimulan namin ang aming pagkakakilala sa teknolohiyang ito mula pa sa simula.

Pangunahing konsepto

Una, suriin natin ang mga pangunahing konsepto na babanggitin natin sa publikasyong ito:

Ang Database (DB) ay ang pangunahing bumubuo ng yunit ng DBMS. Kasama sa database ang mga talahanayan, na binubuo ng mga hanay at talaan (mga hilera). Ang mga cell na nabuo sa intersection ay naglalaman ng structured data ng isang partikular na uri.

DBMS (database management system) - isang set ng lahat ng software modules para sa database administration.

Ang SQL ay isang structured query language kung saan "nakikipag-ugnayan" ang developer sa core (server) ng DBMS. Tulad ng anumang programming language, ang SQL ay may sarili nitong syntax, set ng mga command at operator, at mga sinusuportahang uri ng data.

Sa tingin ko sapat na ang teoretikal na kaalaman para makapagsimula tayo. "Ipinta" natin ang mga nawawalang gaps sa teorya na may kasanayan. Ngayon ay nananatiling pumili ng tamang tool ng software.

Pagpili ng Tamang Tool

Medyo "paghuhukay" sa buong hanay ng MySQL shell para sa mga nagsisimula, napagtanto ko na ang mga ito ay hindi umiiral. Ang lahat ng mga produkto ng software ng pangangasiwa ng DBMS ay nangangailangan ng naka-install na database server. Sa pangkalahatan, nagpasya akong muli na huwag mag-imbento ng "scooter", at nag-opt para sa domestic Denwer package. Maaari mong i-download ito sa opisyal na website.

Kasama na nito ang lahat ng mga bahagi ng DBMS, na nagpapahintulot sa isang baguhan na magsimula ng praktikal na kakilala sa MySQL kaagad pagkatapos ng isang simple at naiintindihan na pag-install. Bilang karagdagan, ang Denwer ay nagsasama ng ilang higit pang mga tool na kinakailangan para sa isang baguhan na developer: isang lokal na server, PHP.

Mga unang hakbang

Hindi ko ilalarawan ang proseso ng pag-install ng set ng "gentleman", dahil ang lahat ay awtomatikong nangyayari doon. Pagkatapos simulan ang pag-install, magkaroon lamang ng oras upang pindutin ang mga kinakailangang key. Kung ano lang ang kailangan mo sa variant ng MySQL para sa mga dummies.

Kapag natapos na ang proseso ng pag-install, simulan ang lokal na server, maghintay ng ilang segundo. Pagkatapos nito, i-type ang localhost sa address bar ng iyong browser.

Sa page na "Hurrah, it worked!" sundan ang isa sa mga link sa larawan. Pagkatapos nito, dadalhin ka sa phpMyAdmin - isang shell para sa pangangasiwa ng mga database.

Sa pamamagitan ng pag-click sa link na http://downloads.mysql.com/docs/world.sql.zip, magda-download ka ng halimbawa ng database ng pagsubok mula sa opisyal na website ng MySQL. Muli, pumunta sa phpMyAdmin, sa pangunahing menu sa itaas, pumunta sa tab na "Import". Sa window na "Import to Current", sa unang seksyon ("File to import"), itakda ang value sa "Pangkalahatang-ideya ng iyong computer".

Sa window ng explorer, piliin ang archive na may na-download na sample na database. Huwag kalimutang i-click ang OK sa ibaba ng pangunahing window.

Ipinapayo ko sa iyo na huwag baguhin ang tinukoy na mga halaga ng parameter. Ito ay maaaring humantong sa maling pagpapakita ng na-import na source data. Kung ang phpMyAdmin system ay nagbigay ng error na hindi nito nakikilala ang database compression algorithm, pagkatapos ay i-unzip ito at ulitin ang buong proseso ng pag-import mula sa simula.

Kung naging maayos ang lahat, lilitaw ang isang mensahe ng programa sa tuktok na matagumpay ang pag-import, at sa kaliwa sa listahan ng mga database ay may isa pa (salita).

Tingnan natin ang istraktura nito mula sa loob upang mas malinaw mong maisip kung ano ang iyong haharapin.

Mag-click sa pangalan ng MySQL database para sa mga nagsisimula. Sa ilalim nito, ipapakita ang isang listahan ng mga talahanayan kung saan ito binubuo. Mag-click sa isa sa kanila. Pagkatapos ay pumunta sa tuktok na item ng menu na "Istruktura". Ipinapakita ng pangunahing lugar ng trabaho ang istraktura ng talahanayan: lahat ng pangalan ng column, uri ng data, at lahat ng attribute.

Ang tutorial na ito ay parang isang "stamp ng aking memorya" sa wikang SQL (DDL, DML), i.e. ito ay impormasyon na naipon sa kurso ng aking mga propesyonal na aktibidad at patuloy na nakaimbak sa aking isipan. Ito ay isang sapat na minimum para sa akin, na kadalasang ginagamit kapag nagtatrabaho sa mga database. Kung kailangan mong gumamit ng mas kumpletong mga konstruksyon ng SQL, kadalasan ay bumaling ako sa library ng MSDN na matatagpuan sa Internet para sa tulong. Sa palagay ko, ang pagpapanatiling lahat sa iyong ulo ay napakahirap, at walang partikular na pangangailangan para dito. Ngunit ang pag-alam sa mga pangunahing konstruksyon ay lubhang kapaki-pakinabang, dahil. naaangkop ang mga ito halos sa parehong anyo sa maraming relational database tulad ng Oracle, MySQL, Firebird. Ang mga pagkakaiba ay pangunahin sa mga uri ng data, na maaaring magkaiba sa mga detalye. Walang napakaraming mga pangunahing konstruksyon ng wikang SQL, at sa patuloy na pagsasanay ay mabilis silang naaalala. Halimbawa, upang lumikha ng mga bagay (mga talahanayan, mga hadlang, mga index, atbp.) sapat na magkaroon ng isang text editor ng kapaligiran (IDE) sa kamay para sa pagtatrabaho sa isang database, at hindi na kailangang matuto ng isang visual toolkit na hinahasa para sa nagtatrabaho sa isang partikular na uri ng database (MS SQL , Oracle, MySQL, Firebird, ...). Maginhawa rin ito dahil ang buong teksto ay nasa harap ng iyong mga mata, at hindi mo kailangang tumakbo sa maraming tab upang lumikha, halimbawa, isang index o isang paghihigpit. Kapag patuloy na nagtatrabaho sa database, ang paglikha, pagbabago, at lalo na ang muling paglikha ng isang bagay gamit ang mga script ay maraming beses na mas mabilis kaysa kung ito ay ginagawa sa visual mode. Gayundin sa script mode (ayon sa pagkakabanggit, na may angkop na pangangalaga), mas madaling itakda at kontrolin ang mga patakaran para sa pagbibigay ng pangalan sa mga bagay (ang aking subjective na opinyon). Bilang karagdagan, ang mga script ay maginhawang gamitin kapag ang mga pagbabagong ginawa sa isang database (halimbawa, isang pagsubok) ay kailangang ilipat sa parehong form sa isa pang database (produktibo).

Ang wikang SQL ay nahahati sa ilang bahagi, dito ko isasaalang-alang ang 2 pinakamahalagang bahagi nito:
  • DML - Data Manipulation Language (data manipulation language), na naglalaman ng mga sumusunod na construct:
    • PUMILI - pagpili ng data
    • INSERT - pagpasok ng bagong data
    • I-UPDATE - pag-update ng data
    • DELETE - pagtanggal ng data
    • MERGE - pagsasama ng data
kasi Ako ay isang practitioner, dahil magkakaroon ng kaunting teorya sa aklat-aralin na ito, at ang lahat ng mga konstruksyon ay ipapaliwanag na may mga praktikal na halimbawa. Bilang karagdagan, naniniwala ako na ang isang programming language, at lalo na ang SQL, ay maaari lamang maging mastered sa pagsasanay, sa pamamagitan ng pagpindot dito sa iyong sarili at pag-unawa kung ano ang mangyayari kapag naisagawa mo ito o ang konstruksiyon na iyon.

Ang tutorial na ito ay nilikha sa prinsipyo ng Hakbang sa Hakbang, i.e. kinakailangang basahin ito nang sunud-sunod at mas mabuti na agad na sundin ang mga halimbawa. Ngunit kung sa kahabaan ng paraan kailangan mong malaman ang tungkol sa isang utos nang mas detalyado, pagkatapos ay gumamit ng isang tiyak na paghahanap sa Internet, halimbawa, sa library ng MSDN.

Sa pagsulat ng tutorial na ito, gumamit ako ng MS SQL Server version 2014 database, at ginamit ko ang MS SQL Server Management Studio (SSMS) para patakbuhin ang mga script.

Maikling tungkol sa MS SQL Server Management Studio (SSMS)

Ang SQL Server Management Studio (SSMS) ay isang utility para sa Microsoft SQL Server para sa pag-configure, pamamahala at pangangasiwa ng mga bahagi ng database. Ang utility na ito ay naglalaman ng isang script editor (na pangunahing gagamitin namin) at isang graphical na programa na gumagana sa mga bagay at mga setting ng server. Ang pangunahing tool ng SQL Server Management Studio ay ang Object Explorer, na nagpapahintulot sa user na tingnan, kunin, at pamahalaan ang mga object ng server. Ang tekstong ito ay bahagyang hiniram mula sa Wikipedia.

Upang lumikha ng bagong editor ng script, gamitin ang pindutan ng Bagong Query:

Upang baguhin ang kasalukuyang database, maaari mong gamitin ang drop-down na listahan:

Upang magsagawa ng isang partikular na command (o grupo ng mga command), piliin ito at pindutin ang "Execute" na buton o pindutin ang "F5" key. Kung mayroon lamang isang utos sa editor sa ngayon, o kung kailangan mong isagawa ang lahat ng mga utos, kung gayon hindi mo kailangang pumili ng anuman.

Pagkatapos magsagawa ng mga script, lalo na ang mga lumilikha ng mga bagay (mga talahanayan, mga column, mga index), upang makita ang mga pagbabago, gamitin ang I-refresh mula sa menu ng konteksto, na i-highlight ang naaangkop na grupo (halimbawa, Mga Talahanayan), ang talahanayan mismo, o ang pangkat na Mga Column sa loob nito .

Sa totoo lang, ito lang ang kailangan nating malaman para makumpleto ang mga halimbawang ibinigay dito. Ang natitirang utility ng SSMS ay madaling matutunan nang mag-isa.

Medyo teorya

Ang isang relational database (RDB, o higit pa sa konteksto ng isang database lamang) ay isang koleksyon ng mga talahanayan na magkakaugnay. Sa halos pagsasalita, ang database ay isang file kung saan ang data ay nakaimbak sa isang structured na form.

DBMS - ang System para sa Pamamahala ng mga Database na ito, i.e. ito ay isang set ng mga tool para sa pagtatrabaho sa isang partikular na uri ng database (MS SQL, Oracle, MySQL, Firebird, ...).

Tandaan
kasi sa buhay, sa kolokyal na pananalita, kadalasang sinasabi natin: "Oracle DB", o kahit na "Oracle" lang, ibig sabihin ay "Oracle DBMS", at sa konteksto ng tutorial na ito minsan ay gagamitin ang terminong DB. Mula sa konteksto, sa tingin ko ay magiging malinaw kung ano ang eksaktong nakataya.

Ang talahanayan ay isang koleksyon ng mga column. Ang mga haligi ay maaari ding tawaging mga patlang o mga haligi, ang lahat ng mga salitang ito ay gagamitin bilang mga kasingkahulugan, na nagpapahayag ng parehong bagay.

Ang talahanayan ay ang pangunahing bagay ng RDB, ang lahat ng data ng RDB ay naka-imbak sa bawat linya sa mga haligi ng talahanayan. Ang mga linya, mga tala ay kasingkahulugan din.

Para sa bawat talahanayan, pati na rin ang mga haligi nito, ang mga pangalan ay ibinibigay, kung saan sila ay kasunod na tinutukoy.
Ang pangalan ng bagay (pangalan ng talahanayan, pangalan ng column, pangalan ng index, atbp.) sa MS SQL ay maaaring magkaroon ng maximum na haba na 128 character.

Para sa sanggunian– sa database ng ORACLE, maaaring magkaroon ng maximum na haba na 30 character ang mga pangalan ng object. Samakatuwid, para sa isang partikular na database, kailangan mong bumuo ng iyong sariling mga panuntunan para sa pagbibigay ng pangalan sa mga bagay upang matugunan ang limitasyon sa bilang ng mga character.

Ang SQL ay isang wika na nagbibigay-daan sa iyong i-query ang database sa pamamagitan ng DBMS. Sa isang partikular na DBMS, ang wikang SQL ay maaaring may partikular na pagpapatupad (sariling diyalekto).

Ang DDL at DML ay isang subset ng wikang SQL:

  • Ang wika ng DDL ay ginagamit upang lumikha at baguhin ang istraktura ng database, i.e. upang lumikha/magbago/magtanggal ng mga talahanayan at mga relasyon.
  • Ang wika ng DML ay nagpapahintulot sa iyo na manipulahin ang data ng talahanayan, i.e. kasama ang mga linya niya. Pinapayagan ka nitong pumili ng data mula sa mga talahanayan, magdagdag ng bagong data sa mga talahanayan, at mag-update at magtanggal ng umiiral na data.

Sa wikang SQL, maaari kang gumamit ng 2 uri ng komento (single-line at multi-line):

Isang linyang komento
at

/* multiline na komento */

Sa totoo lang, magiging sapat na ang lahat para sa teorya nito.

DDL - Data Definition Language (wika para sa paglalarawan ng data)

Halimbawa, isaalang-alang ang isang talahanayan na may data tungkol sa mga empleyado, sa anyo na pamilyar sa isang tao na hindi isang programmer:

Sa kasong ito, ang mga column ng talahanayan ay may mga sumusunod na pangalan: Numero ng tauhan, Buong pangalan, Petsa ng kapanganakan, E-mail, Posisyon, Departamento.

Ang bawat isa sa mga column na ito ay maaaring mailalarawan sa pamamagitan ng uri ng data na nilalaman nito:

  • Numero ng tauhan - integer
  • buong pangalan - string
  • Petsa ng kapanganakan - petsa
  • Email - string
  • Posisyon - string
  • departamento - string
Ang uri ng column ay isang katangian na nagsasaad kung anong uri ng data ang maiimbak ng column na ito.

Upang magsimula, sapat na na tandaan lamang ang mga sumusunod na pangunahing uri ng data na ginamit sa MS SQL:

Ibig sabihin Notasyon sa MS SQL Paglalarawan
Variable ang haba ng string varchar(N)
at
nvarchar(N)
Gamit ang numerong N, maaari naming tukuyin ang maximum na posibleng haba ng string para sa kaukulang column. Halimbawa, kung gusto nating sabihin na ang halaga ng column na "Pangalan" ay maaaring maglaman ng maximum na 30 character, kailangan nating itakda ang uri nito sa nvarchar (30).
Ang pagkakaiba sa pagitan ng varchar at nvarchar ay ang varchar ay nagpapahintulot sa iyo na mag-imbak ng mga string sa ASCII na format, kung saan ang isang character ay sumasakop ng 1 byte, habang ang nvarchar ay nag-iimbak ng mga string sa Unicode na format, kung saan ang bawat karakter ay sumasakop ng 2 byte.
Ang uri ng varchar ay dapat lamang gamitin kung ikaw ay 100% sigurado na ang field ay hindi na kailangang mag-imbak ng mga Unicode na character. Halimbawa, maaaring gamitin ang varchar upang mag-imbak ng mga email address dahil kadalasan ay naglalaman lamang sila ng mga ASCII na character.
Nakapirming haba ng string char(N)
at
nchar(N)
Ang uri na ito ay naiiba sa isang variable na haba ng string na kung ang haba ng string ay mas mababa sa N na mga character, pagkatapos ay ito ay palaging may palaman sa kanan sa haba ng N mga puwang at naka-imbak sa database sa form na ito, i.e. sa database ito ay sumasakop ng eksaktong N character (kung saan ang isang character ay sumasakop ng 1 byte para sa char at 2 bytes para sa nchar). Sa aking pagsasanay, ang ganitong uri ay napakabihirang ginagamit, at kung ito ay ginagamit, kung gayon ito ay pangunahing ginagamit sa char (1) na format, i.e. kapag ang field ay tinukoy ng isang character.
Integer int Ang ganitong uri ay nagbibigay-daan sa amin na gumamit lamang ng mga integer, parehong positibo at negatibo, sa column. Para sa sanggunian (ito ay hindi gaanong nauugnay para sa amin ngayon) - ang hanay ng mga numero na pinapayagan ng uri ng int mula -2 147 483 648 hanggang 2 147 483 647. Karaniwang ito ang pangunahing uri na ginagamit upang magtakda ng mga identifier.
Totoo o totoong numero lumutang Sa madaling salita, ito ay mga numero kung saan maaaring mayroong decimal point (kuwit).
petsa petsa Kung kinakailangan na mag-imbak lamang ng Petsa sa column, na binubuo ng tatlong bahagi: Numero, Buwan at Taon. Halimbawa, 02/15/2014 (Pebrero 15, 2014). Maaaring gamitin ang ganitong uri para sa column na "Petsa ng pagpasok", "Petsa ng kapanganakan", atbp., i.e. sa mga kaso kung saan mahalaga para sa amin na ayusin lamang ang petsa, o kapag ang bahagi ng oras ay hindi mahalaga sa amin at maaaring itapon o kung hindi ito alam.
Oras oras Maaaring gamitin ang ganitong uri kung ang column ay kailangang mag-imbak lamang ng data ng oras, i.e. Mga Oras, Minuto, Segundo at Milisecond. Halimbawa, 17:38:31.3231603
Halimbawa, ang pang-araw-araw na "Flight Departure Time".
petsa at oras datetime Ang ganitong uri ay nagbibigay-daan sa iyo na mag-imbak ng parehong Petsa at Oras sa parehong oras. Halimbawa, 02/15/2014 5:38:31.323 PM
Halimbawa, maaaring ito ang petsa at oras ng isang kaganapan.
Bandila bit Ang uri na ito ay kapaki-pakinabang para sa pag-iimbak ng mga halaga ng Oo/Hindi, kung saan ang Oo ay maiimbak bilang 1 at Hindi ay maiimbak bilang 0.

Gayundin, ang halaga ng field, kung sakaling hindi ito ipinagbabawal, ay maaaring hindi tukuyin, para sa layuning ito ang NULL na keyword ay ginagamit.

Upang patakbuhin ang mga halimbawa, gumawa tayo ng isang database ng pagsubok na tinatawag na Pagsubok.

Ang isang simpleng database (nang walang pagtukoy ng mga karagdagang parameter) ay maaaring malikha sa pamamagitan ng pagpapatakbo ng sumusunod na command:

GUMAWA NG DATABASE Test
Maaari mong tanggalin ang database gamit ang utos (dapat kang maging maingat sa utos na ito):

DROP DATABASE Test
Upang lumipat sa aming database, maaari mong patakbuhin ang command:

Pagsusulit sa US
Bilang kahalili, piliin ang Test database mula sa drop-down na listahan sa SSMS menu area. Sa trabaho, madalas kong ginagamit ang pamamaraang ito ng paglipat sa pagitan ng mga database.

Ngayon sa aming database maaari kaming lumikha ng isang talahanayan gamit ang mga paglalarawan kung paano sila, gamit ang mga puwang at mga Cyrillic na character:

GUMAWA NG TABLE [Mga Empleyado]([Personnel Number] int, [Pangalan] nvarchar(30), [Petsa ng Kapanganakan] petsa, nvarchar(30), [Posisyon] nvarchar(30), [Department] nvarchar(30))
Sa kasong ito, kakailanganin naming ilakip ang mga pangalan sa mga square bracket […].

Ngunit sa database, para sa higit na kaginhawahan, mas mahusay na tukuyin ang lahat ng mga pangalan ng mga bagay sa Latin at huwag gumamit ng mga puwang sa mga pangalan. Sa MS SQL, kadalasan sa kasong ito, ang bawat salita ay nagsisimula sa isang malaking titik, halimbawa, para sa field na "Personnel number", maaari naming itakda ang pangalang PersonnelNumber. Maaari ka ring gumamit ng mga numero sa pangalan, halimbawa, PhoneNumber1.

Sa isang tala
Sa ilang DBMS, ang sumusunod na format ng mga pangalan na "PHONE_NUMBER" ay maaaring mas gusto, halimbawa, ang format na ito ay kadalasang ginagamit sa ORACLE database. Naturally, kapag nagtatakda ng pangalan ng field, kanais-nais na hindi ito tumutugma sa mga keyword na ginamit sa DBMS.

Para sa kadahilanang ito, maaari mong kalimutan ang tungkol sa square bracket syntax at tanggalin ang talahanayan ng [Mga Empleyado]:

DROP TABLE [Mga Empleyado]
Halimbawa, ang isang talahanayan na may mga empleyado ay maaaring pangalanan na "Mga Empleyado" at ang mga field nito ay maaaring bigyan ng mga sumusunod na pangalan:

  • ID - Numero ng Tauhan (Employee ID)
  • Pangalan - buong pangalan
  • Kaarawan - Petsa ng kapanganakan
  • Email
  • Posisyon
  • Departamento - Departamento
Kadalasan, ginagamit ang salitang ID upang pangalanan ang field ng identifier.

Ngayon likhain natin ang aming talahanayan:

GUMAWA NG TABLE Mga Empleyado(ID int, Pangalan nvarchar(30), Petsa ng kaarawan, Email nvarchar(30), Posisyon nvarchar(30), Departamento nvarchar(30))
Maaari mong gamitin ang NOT NULL na opsyon upang tukuyin ang mga kinakailangang column.

Para sa isang umiiral nang talahanayan, ang mga patlang ay maaaring muling tukuyin gamit ang mga sumusunod na command:

I-update ang field ng ID ALTER TABLE Mga empleyado ALTER COLUMN ID int NOT NULL -- update Name field ALTER TABLE Mga empleyado ALTER COLUMN Name nvarchar(30) NOT NULL

Sa isang tala
Ang pangkalahatang konsepto ng wikang SQL para sa karamihan ng DBMS ay nananatiling pareho (hindi bababa sa, maaari kong hatulan ito mula sa mga DBMS kung saan ako nagkaroon ng pagkakataong magtrabaho). Ang pagkakaiba sa pagitan ng DDL sa iba't ibang mga DBMS ay pangunahin sa mga uri ng data (hindi lamang ang kanilang mga pangalan ay maaaring magkaiba dito, kundi pati na rin ang mga detalye ng kanilang pagpapatupad), ang mismong mga detalye ng pagpapatupad ng wikang SQL ay maaari ding bahagyang naiiba (ibig sabihin, ang kakanyahan ng ang mga utos ay pareho, ngunit maaaring may kaunting pagkakaiba sa diyalekto, sayang, ngunit walang isang pamantayan). Alam ang mga pangunahing kaalaman ng SQL, madali kang lumipat mula sa isang DBMS patungo sa isa pa. sa kasong ito, kakailanganin mo lamang na maunawaan ang mga detalye ng pagpapatupad ng mga utos sa bagong DBMS, i.e. sa karamihan ng mga kaso, ito ay sapat lamang upang gumuhit ng isang pagkakatulad.

Paglikha ng talahanayan GUMAWA NG TABLE Employees(ID int, -- sa uri ng ORACLE int ay ang katumbas (wrapper) para sa numero(38) Pangalan nvarchar2(30), -- nvarchar2 sa ORACLE ay katumbas ng nvarchar sa MS SQL Petsa ng kaarawan, Email nvarchar2( 30) , Posisyon nvarchar2(30), Departamento nvarchar2(30)); -- ang pag-update ng mga field ng ID at Pangalan (dito ang MODIFY(…) ay ginagamit sa halip na ALTER COLUMN ALTER TABLE Employees MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- pagdaragdag ng PK (sa kasong ito, ang konstruksyon ay mukhang sa MS SQL, ito ay ipapakita sa ibaba) ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
Para sa ORACLE, may mga pagkakaiba sa mga tuntunin ng pagpapatupad ng uri ng varchar2, ang pag-encode nito ay nakasalalay sa mga setting ng database at ang teksto ay maaaring i-save, halimbawa, sa pag-encode ng UTF-8. Bilang karagdagan, ang haba ng field sa ORACLE ay maaaring itakda pareho sa mga byte at sa mga character, para dito, ginagamit ang mga karagdagang opsyon na BYTE at CHAR, na tinukoy pagkatapos ng haba ng field, halimbawa:

NAME varchar2(30 BYTE) -- magiging 30 bytes ang kapasidad ng field NAME varchar2(30 CHAR) -- magiging 30 character ang kapasidad ng field
Aling opsyon ang gagamitin bilang default na BYTE o CHAR, sa kaso ng isang simpleng detalye ng uri ng varchar2(30) sa ORACLE, depende sa mga setting ng database, maaari rin itong itakda minsan sa mga setting ng IDE. Sa pangkalahatan, kung minsan madali kang malito, kaya sa kaso ng ORACLE, kung ang uri ng varchar2 ay ginagamit (at kung minsan ito ay nabibigyang katwiran dito, halimbawa, kapag gumagamit ng pag-encode ng UTF-8), mas gusto kong tahasang isulat ang CHAR (dahil kadalasang mas maginhawang basahin ang haba ng isang string sa mga character ).

Ngunit sa kasong ito, kung mayroon nang ilang data sa talahanayan, kung gayon para sa matagumpay na pagpapatupad ng mga utos, kinakailangan na ang mga patlang ng ID at Pangalan sa lahat ng mga hilera ng talahanayan ay dapat punan. Ipakita natin ito sa isang halimbawa, ipasok ang data sa talahanayan sa mga patlang ng ID, Posisyon at Departamento, maaari itong gawin gamit ang sumusunod na script:

INSERT Employees(ID,Position,Department) VALUES (1000,N"Director",N"Administration"), (1001,N"Programmer",N"IT"), (1002,N"Accountant",N"Accounting" ), (1003,N"Senior programmer",N"IT")
Sa kasong ito, ang INSERT command ay magtapon din ng error, dahil kapag nagpasok, hindi namin tinukoy ang halaga ng kinakailangang field ng Pangalan.
Kung mayroon na kaming data na ito sa orihinal na talahanayan, kung gayon ang utos na "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" ay matagumpay na naisakatuparan, at ang command na "ALTER TABLE Employees ALTER COLUMN Name int NOT NULL" ay maglalabas ng isang error mensahe, na mayroong NULL (hindi tinukoy) na mga halaga sa field na Pangalan.

Magdagdag tayo ng mga halaga para sa field na Pangalan at punan muli ang data:


Gayundin, ang NOT NULL na opsyon ay maaaring gamitin nang direkta kapag lumilikha ng bagong talahanayan, i.e. sa konteksto ng CREATE TABLE command.

Una, tanggalin ang talahanayan na may utos:

DROP TABLE Mga empleyado
Ngayon, gumawa tayo ng table na may mandatoryong ID at Name na column:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30) NOT NULL, Birthday date, Email nvarchar(30), Position nvarchar(30), Department nvarchar(30))
Maaari mo ring isulat ang NULL pagkatapos ng pangalan ng column, na nangangahulugang ang mga NULL na halaga (hindi tinukoy) ay papayagan dito, ngunit hindi ito kinakailangan, dahil ang katangiang ito ay ipinahiwatig bilang default.

Kung, sa kabaligtaran, gusto mong gawing opsyonal ang umiiral na column, pagkatapos ay gamitin ang sumusunod na command syntax:

ALTER TABLE Empleyado ALTER COLUMN Pangalan nvarchar(30) NULL
O kaya lang:

ALTER TABLE Mga Empleyado ALTER COLUMN Pangalan nvarchar(30)
Sa utos na ito, maaari rin nating baguhin ang uri ng field sa isa pang katugmang uri, o baguhin ang haba nito. Halimbawa, palawakin natin ang field ng Pangalan sa 50 character:

ALTER TABLE Mga Empleyado ALTER COLUMN Pangalan nvarchar(50)

pangunahing susi

Kapag gumagawa ng isang talahanayan, ito ay kanais-nais na ito ay may isang natatanging hanay o isang hanay ng mga hanay na natatangi para sa bawat isa sa mga hilera nito - isang talaan ay maaaring natatanging makilala sa pamamagitan ng natatanging halaga. Ang halagang ito ay tinatawag na pangunahing susi ng talahanayan. Para sa aming talahanayan ng Mga Empleyado, maaaring ang natatanging value na ito ay ang column ng ID (na naglalaman ng "Numero ng Tauhan ng Empleyado" - kahit na sa aming kaso ay natatangi ang value na ito para sa bawat empleyado at hindi na mauulit).

Maaari kang lumikha ng pangunahing susi sa isang umiiral na talahanayan gamit ang utos:

ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID)
Kung saan ang "PK_Employees" ay ang pangalan ng constraint na responsable para sa primary key. Karaniwan, ang pangunahing key ay pinangalanan na may prefix na "PK_" na sinusundan ng pangalan ng talahanayan.

Kung ang pangunahing key ay binubuo ng ilang mga field, ang mga field na ito ay dapat na nakalista sa mga bracket na pinaghihiwalay ng mga kuwit:

ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY(field1,field2,…)
Ito ay nagkakahalaga ng noting na sa MS SQL lahat ng mga patlang na kasama sa pangunahing susi ay dapat magkaroon ng NOT NULL na katangian.

Gayundin, ang pangunahing susi ay maaaring direktang tukuyin kapag lumilikha ng isang talahanayan, i.e. sa konteksto ng CREATE TABLE command. Tanggalin natin ang talahanayan:

DROP TABLE Mga empleyado
At pagkatapos ay likhain ito gamit ang sumusunod na syntax:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30) NOT NULL, Birthday date, Email nvarchar(30), Position nvarchar(30), Department nvarchar(30), CONSTRAINT PK_Employees PRIMARY KEY(ID) -- ilarawan ang PK pagkatapos lahat ng mga patlang bilang isang hadlang)
Pagkatapos ng paggawa, punan ang data ng talahanayan:

INSERT Employees(ID, Position, Department, Name) VALUES (1000,N"Director",N"Administration",N"Ivanov II.), (1001,N"Programmer",N"IT",N" Petrov PP" ), (1002,N"Accountant",N"Accounting",N"Sidorov SS"), (1003,N"Senior Programmer",N"IT",N"Andreev A. A.")
Kung ang pangunahing susi sa talahanayan ay binubuo lamang ng mga halaga ng isang hanay, kung gayon ang sumusunod na syntax ay maaaring gamitin:

CREATE TABLE Employees(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, -- tukuyin ang Pangalan nvarchar(30) NOT NULL, Petsa ng kaarawan, Email nvarchar(30), Posisyon nvarchar(30), Department nvarchar(30))
Sa katunayan, maaaring tanggalin ang pangalan ng hadlang, kung saan bibigyan ito ng pangalan ng system (tulad ng "PK__Employee__3214EC278DA42077"):

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30) NOT NULL, Birthday date, Email nvarchar(30), Position nvarchar(30), Department nvarchar(30), PRIMARY KEY(ID))
O kaya:

GUMAWA NG TABLE Employees(ID int NOT NULL PRIMARY KEY, Name nvarchar(30) NOT NULL, Birthday date, Email nvarchar(30), Position nvarchar(30), Department nvarchar(30))
Ngunit inirerekumenda ko na palagi mong tahasang itakda ang pangalan ng pagpilit para sa mga permanenteng talahanayan, dahil sa pamamagitan ng isang tahasang ibinigay at nauunawaan na pangalan, pagkatapos ay magiging mas madaling manipulahin ito, halimbawa, maaari mo itong tanggalin:

ALTER TABLE Employees DROP CONSTRAINT PK_Employees
Ngunit ang gayong maikling syntax, nang hindi tinukoy ang mga pangalan ng mga paghihigpit, ay maginhawang gamitin kapag lumilikha ng mga pansamantalang talahanayan ng database (ang pangalan ng pansamantalang talahanayan ay nagsisimula sa # o ##), na tatanggalin pagkatapos gamitin.

I-summarize natin

Sa ngayon ay sakop namin ang mga sumusunod na utos:
  • GUMAWA NG TALAAN table_name (enumeration ng mga patlang at ang kanilang mga uri, mga paghihigpit) - ginagamit upang lumikha ng isang bagong talahanayan sa kasalukuyang database;
  • DROP TABLE table_name - ginagamit upang tanggalin ang isang talahanayan mula sa kasalukuyang database;
  • ALTER TABLE table_name ALTER COLUMN column_name … – ginagamit para i-update ang uri ng column o para baguhin ang mga setting nito (halimbawa, para itakda ang NULL o NOT NULL na katangian);
  • ALTER TABLE table_name MAGDAGDAG NG PAGPILITAN constraint_name PANGUNAHING SUSI(field1, field2,…) – pagdaragdag ng pangunahing key sa isang umiiral na talahanayan;
  • ALTER TABLE table_name DROP CONSTRAINT constraint_name - alisin ang pagpilit mula sa talahanayan.

Kaunti tungkol sa mga pansamantalang talahanayan

Pag-clip mula sa MSDN. Mayroong dalawang uri ng mga pansamantalang talahanayan sa MS SQL Server: lokal (#) at global (##). Ang mga lokal na pansamantalang talahanayan ay makikita lamang ng kanilang mga tagalikha hanggang sa ang session ng koneksyon sa instance ng SQL Server ay winakasan kapag sila ay unang ginawa. Awtomatikong tinatanggal ang mga lokal na pansamantalang talahanayan pagkatapos magdiskonekta ang isang user mula sa isang halimbawa ng SQL Server. Ang mga pandaigdigang pansamantalang talahanayan ay makikita ng lahat ng mga gumagamit sa panahon ng anumang mga sesyon ng koneksyon pagkatapos gawin ang mga talahanayang ito, at tatanggalin kapag ang lahat ng mga gumagamit na tumutukoy sa mga talahanayang ito ay nadiskonekta mula sa halimbawa ng SQL Server.

Ang mga pansamantalang talahanayan ay nilikha sa database ng tempdb system, i.e. paglikha ng mga ito, hindi namin barado ang pangunahing database, kung hindi man ang mga pansamantalang talahanayan ay ganap na magkapareho sa mga regular na talahanayan, maaari din silang tanggalin gamit ang DROP TABLE na utos. Mas karaniwang ginagamit ang lokal (#) na mga pansamantalang talahanayan.

Upang lumikha ng pansamantalang talahanayan, maaari mong gamitin ang command na CREATE TABLE:

GUMAWA NG TALAAN #Temp(ID int, Pangalan nvarchar(30))
Dahil ang isang pansamantalang talahanayan sa MS SQL ay katulad ng isang regular na talahanayan, maaari mo ring tanggalin ito nang naaayon sa utos na DROP TABLE:

DROP TABLE #Temp

Maaari ka ring lumikha ng isang pansamantalang talahanayan (pati na rin ang isang regular na talahanayan) at agad na punan ito ng data na ibinalik ng query gamit ang SELECT ... INTO syntax:

PUMILI NG ID, Pangalan SA #Temp MULA SA Mga Empleyado

Sa isang tala
Sa iba't ibang DBMS, maaaring magkaiba ang pagpapatupad ng mga pansamantalang talahanayan. Halimbawa, sa ORACLE at Firebird DBMS, ang istraktura ng mga pansamantalang talahanayan ay dapat na matukoy nang maaga sa pamamagitan ng CREATE GLOBAL TEMPORARY TABLE na utos, na nagpapahiwatig ng mga detalye ng pag-iimbak ng data dito, pagkatapos ay makikita ito ng user sa mga pangunahing talahanayan at gumagana kasama nito tulad ng sa isang regular na mesa.

Normalization ng database - paghahati sa mga sub-table (mga direktoryo) at pagtukoy ng mga relasyon

Ang aming kasalukuyang talahanayan ng Mga Empleyado ay may kawalan na ang user ay maaaring magpasok ng anumang teksto sa mga patlang ng Posisyon at Departamento, na pangunahing puno ng mga error, dahil para sa isang empleyado maaari niyang ipahiwatig lamang ang "IT" bilang departamento, at para sa pangalawang empleyado, para sa halimbawa , ilagay ang "IT department", magkaroon ng pangatlong "IT". Bilang resulta, hindi magiging malinaw kung ano ang ibig sabihin ng user, i.e. Ang mga empleyado ba ay mga empleyado ng parehong departamento, o inilarawan ba ng gumagamit ang kanyang sarili at ito ay 3 magkaibang departamento? At higit pa rito, sa kasong ito, hindi namin magagawang igrupo nang tama ang data para sa ilang ulat, kung saan maaaring kailanganing ipakita ang bilang ng mga empleyado sa konteksto ng bawat departamento.

Ang pangalawang disbentaha ay ang dami ng imbakan ng impormasyong ito at ang pagdoble nito, i.e. para sa bawat empleyado, ang buong pangalan ng departamento ay ipinahiwatig, na nangangailangan ng isang lugar sa database upang iimbak ang bawat karakter mula sa pangalan ng departamento.

Ang pangatlong disbentaha ay ang kahirapan sa pag-update ng mga field na ito kung nagbabago ang pangalan ng isang posisyon, halimbawa, kung kailangan mong palitan ang pangalan ng posisyon na "Programmer" sa "Junior programmer". Sa kasong ito, kailangan nating gumawa ng mga pagbabago sa bawat linya ng talahanayan, kung saan ang Posisyon ay katumbas ng "Programmer".

Upang maiwasan ang mga pagkukulang na ito, ginagamit ang tinatawag na normalisasyon ng database - paghahati nito sa mga sub-table, mga reference table. Hindi kinakailangang umakyat sa gubat ng teorya at pag-aralan kung ano ang mga normal na anyo, sapat na upang maunawaan ang kakanyahan ng normalisasyon.

Gumawa tayo ng 2 reference na talahanayan na "Mga Posisyon" at "Mga Kagawaran", ang una ay tatawaging Mga Posisyon, at ang pangalawa, ayon sa pagkakabanggit, Mga Departamento:

GUMAWA NG TALAHANAYAN Mga Posisyon(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Pangalan nvarchar(30) NOT NULL) GUMAWA NG TALAAN Mga Departamento(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Departments PRIMARY KEY, Pangalan nvarchar(30 ) HINDI NULL)
Tandaan na dito ginamit namin ang bagong opsyon sa IDENTITY, na nangangahulugang awtomatikong mabibilang ang data sa column ng ID, simula sa 1, na may hakbang na 1, i.e. kapag nagdagdag ng mga bagong tala, sila ay magkakasunod na itatalaga ang mga halaga 1, 2, 3, at iba pa. Ang ganitong mga field ay karaniwang tinatawag na auto-incrementing. Isang field lang na may IDENTITY property ang maaaring tukuyin sa isang table, at kadalasan, ngunit hindi kinakailangan, ang naturang field ang pangunahing key para sa table na iyon.

Sa isang tala
Sa iba't ibang DBMS, ang pagpapatupad ng mga patlang na may isang counter ay maaaring gawin sa ibang paraan. Sa MySQL, halimbawa, ang naturang field ay tinukoy gamit ang AUTO_INCREMENT na opsyon. Sa ORACLE at Firebird, ang functionality na ito ay dati nang maaaring tularan gamit ang SEQUENCEs. Pero sa pagkakaalam ko, idinagdag na ngayon ng ORACLE ang GENERATED AS IDENTITY na opsyon.

Awtomatiko nating punan ang mga talahanayang ito, batay sa kasalukuyang data na naitala sa mga patlang ng Posisyon at Departamento ng talahanayan ng Mga Empleyado:

Punan ang patlang ng Pangalan ng talahanayan ng Mga Posisyon na may mga natatanging halaga mula sa patlang ng Posisyon ng talahanayan ng Mga Empleyado INSERT Positions(Pangalan) SELECT DISTINCT Position FROM Employees WHERE Position IS NOT NULL -- itapon ang mga record na walang tinukoy na posisyon
Gayon din ang gagawin namin para sa talahanayan ng mga Departamento:

INSERT Departamento(Pangalan) PUMILI NG DISTINCT na Departamento MULA SA Mga Empleyado KUNG SAAN ANG Departamento AY HINDI NULL
Kung bubuksan natin ngayon ang mga talahanayan ng Mga Posisyon at Departamento, makakakita tayo ng may bilang na hanay ng mga halaga ayon sa field ng ID:

PUMILI * MULA SA Mga Posisyon

PUMILI * MULA SA Mga Departamento

Gagampanan na ng mga talahanayang ito ang papel ng mga direktoryo para sa pagtatakda ng mga posisyon at departamento. Magre-refer kami ngayon sa mga job at department ID. Una sa lahat, gumawa tayo ng mga bagong field sa Employees table para iimbak ang ID data:

Magdagdag ng field para sa position ID ALTER TABLE Mga Empleyado ADD PositionID int -- magdagdag ng field para sa department ID ALTER TABLE Mga Empleyado ADD DepartmentID int
Ang uri ng mga patlang ng sanggunian ay dapat na kapareho ng sa mga direktoryo, sa kasong ito ito ay int.

Maaari ka ring magdagdag ng ilang mga patlang sa talahanayan nang sabay-sabay gamit ang isang utos, na naglilista ng mga patlang na pinaghihiwalay ng mga kuwit:

ALTER TABLE Mga Empleyado ADD PositionID int, DepartmentID int
Ngayon magsulat tayo ng mga link (mga hadlang sa sanggunian - FOREIGN KEY) para sa mga patlang na ito, upang ang user ay hindi magkaroon ng pagkakataon na magsulat sa mga patlang na ito, mga halaga na hindi kabilang sa mga halaga ng ID sa mga direktoryo.

ALTER TABLE Mga Empleyado ADD CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID)
At gagawin namin ang parehong para sa pangalawang field:

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID)
Ngayon ang user ay makakapagpasok lamang ng mga halaga ng ID mula sa kaukulang reference book sa mga field na ito. Alinsunod dito, upang makagamit ng bagong departamento o posisyon, kailangan muna niyang magdagdag ng bagong entry sa kaukulang direktoryo. kasi ang mga posisyon at departamento ay naka-imbak na ngayon sa mga direktoryo sa isang kopya, pagkatapos ay upang baguhin ang pangalan, sapat na upang baguhin lamang ito sa direktoryo.

Ang pangalan ng isang referential constraint ay karaniwang tambalan, ito ay binubuo ng prefix na "FK_", na sinusundan ng pangalan ng talahanayan, at pagkatapos ng underscore, ay ang pangalan ng field na tumutukoy sa identifier ng lookup table.

Ang identifier (ID) ay karaniwang isang panloob na halaga na ginagamit lamang para sa mga link at kung anong halaga ang nakaimbak doon, sa karamihan ng mga kaso, ito ay ganap na walang malasakit, kaya hindi na kailangang subukang alisin ang mga butas sa pagkakasunud-sunod ng mga numero na bumangon sa kurso ng pagtatrabaho sa isang talahanayan, halimbawa, pagkatapos tanggalin ang mga talaan mula sa handbook.

ALTER TABLE table ADD CONSTRAINT constraint_name FOREIGN KEY(field1,field2,…) REFERENCES lookup table(field1,field2,…)
Sa kasong ito, sa talahanayang "table_reference", ang pangunahing key ay kinakatawan ng isang kumbinasyon ng ilang mga field (field1, field2, ...).

Sa totoo lang, ngayon ay i-update natin ang mga field ng PositionID at DepartmentID kasama ang mga halaga ng ID mula sa mga direktoryo. Gamitin natin ang UPDATE DML command para sa layuning ito:

I-UPDATE at I-SET ang PositionID=(SELECT ID FROM Positions WHERE Name=e.Position), DepartmentID=(SELECT ID FROM Departments WHERE Name=e.Department) MULA sa Mga Empleyado e
Tingnan natin kung ano ang mangyayari sa pamamagitan ng pagpapatakbo ng query:

PUMILI * MULA SA Mga Empleyado

Iyon lang, ang mga patlang ng PositionID at DepartmentID ay puno ng mga kaukulang posisyon at departamento na may mga ID ng pangangailangan sa mga patlang ng Position at Departamento sa talahanayan ng Mga Empleyado ngayon, maaari mong tanggalin ang mga patlang na ito:

ALTER TABLE Empleyado DROP COLUMN Posisyon, Departamento
Ang talahanayan ngayon ay ganito ang hitsura:

PUMILI * MULA SA Mga Empleyado

ID Pangalan Birthday Email PositionID DepartmentID
1000 Ivanov I.I. WALA WALA 2 1
1001 Petrov P.P. WALA WALA 3 3
1002 Sidorov S.S. WALA WALA 1 2
1003 Andreev A.A. WALA WALA 4 3

Yung. sa kalaunan ay inalis namin ang pag-iimbak ng labis na impormasyon. Ngayon, sa pamamagitan ng posisyon at mga numero ng departamento, maaari nating natatanging matukoy ang kanilang mga pangalan gamit ang mga halaga sa mga talahanayan ng paghahanap:

PUMILI ng e.ID,e.Pangalan,p.Pangalan PositionName,d.Pangalan ng Pangalan ng Kagawaran MULA sa Mga Empleyado e LEFT SUMALI Mga Departamento d ON d.ID=e.DepartmentID LEFT SUMALI Mga Posisyon p ON p.ID=e.PositionID

Sa Object Inspector, makikita natin ang lahat ng bagay na nilikha para sa isang ibinigay na talahanayan. Mula dito maaari ka ring magsagawa ng iba't ibang manipulasyon sa mga bagay na ito - halimbawa, palitan ang pangalan o tanggalin ang mga bagay.

Nararapat din na tandaan na ang isang talahanayan ay maaaring sumangguni sa sarili nito, i.e. maaari kang lumikha ng isang recursive link. Halimbawa, magdagdag tayo ng isa pang field na ManagerID sa ating talahanayan kasama ang mga empleyado, na magsasaad ng empleyado kung kanino nag-uulat ang empleyadong ito. Gumawa tayo ng field:

ALTER TABLE Employees ADD ManagerID int
Ang NULL na halaga ay pinapayagan sa patlang na ito, ang patlang ay walang laman kung, halimbawa, walang mga superyor sa empleyado.

Ngayon, gumawa tayo ng FOREIGN KEY sa Employees table:

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES Employees(ID)
Gumawa tayo ngayon ng isang diagram at tingnan kung ano ang hitsura ng mga ugnayan sa pagitan ng aming mga talahanayan:

Bilang resulta, dapat nating makita ang sumusunod na larawan (ang talahanayan ng Mga Empleyado ay nauugnay sa mga talahanayan ng Mga Posisyon at Depertment, at tumutukoy din sa sarili nito):

Sa wakas, ito ay nagkakahalaga ng pagbanggit na ang mga reference key ay maaaring magsama ng mga karagdagang opsyon ON DELETE CASCADE at ON UPDATE CASCADE, na nagsasabi kung paano kumilos kapag nagde-delete o nag-a-update ng record na naka-reference sa lookup table. Kung hindi tinukoy ang mga opsyong ito, hindi namin mababago ang ID sa talahanayan ng direktoryo ng entry na may mga link mula sa isa pang talahanayan, at hindi rin namin maaaring tanggalin ang naturang entry mula sa direktoryo hanggang sa tanggalin namin ang lahat ng mga row na tumutukoy sa entry na ito o, Let's i-update ang mga linyang ito ng mga sanggunian sa isa pang halaga.

Halimbawa, muli nating likhain ang talahanayan gamit ang opsyong ON DELETE CASCADE para sa FK_Employees_DepartmentID:

DROP TABLE Employees CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_EmployeesDepart_Employees FOR ) REFERENCES Departments(ID) ON DELETE CASCADE, CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENCES Employees(ID,PositionID)REFERENCES Employees(ID)DedayNagerID )VALUES (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"Andreev AA","19820417",4,3,1000)
Alisin natin ang departamentong may ID 3 mula sa talahanayan ng Mga Departamento:

I-delete ang Mga Departamento WHERE ID=3
Tingnan natin ang data sa talahanayan ng Mga Empleyado:

PUMILI * MULA SA Mga Empleyado

ID Pangalan Birthday Email PositionID DepartmentID ManagerID
1000 Ivanov I.I. 1955-02-19 WALA 2 1 WALA
1002 Sidorov S.S. 1976-06-07 WALA 1 2 1000

Gaya ng nakikita mo, ang data para sa departamento 3 ay tinanggal din mula sa talahanayan ng Mga Empleyado.

Ang opsyon na ON UPDATE CASCADE ay kumikilos nang katulad, ngunit ito ay magkakabisa kapag ina-update ang halaga ng ID sa direktoryo. Halimbawa, kung babaguhin namin ang position ID sa direktoryo ng mga posisyon, sa kasong ito, maa-update ang DepartmentID sa talahanayan ng Mga Empleyado sa bagong halaga ng ID na itinakda namin sa direktoryo. Ngunit sa kasong ito, hindi posible na ipakita ito, dahil. ang ID column sa talahanayan ng Mga Departamento ay may opsyon na IDENTITY, na hahadlang sa amin na isagawa ang sumusunod na query (baguhin ang department ID 3 hanggang 30):

I-UPDATE ang Mga Departamento SET ID=30 WHERE ID=3
Ang pangunahing bagay ay upang maunawaan ang kakanyahan ng 2 pagpipiliang ito ON DELETE CASCADE at ON UPDATE CASCADE. Ginagamit ko ang mga opsyong ito sa mga bihirang pagkakataon, at inirerekomenda ko na pag-isipan mong mabuti bago tukuyin ang mga ito sa isang referential constraint. kung hindi mo sinasadyang matanggal ang isang tala mula sa reference table, maaari itong humantong sa malalaking problema at lumikha ng isang chain reaction.

Ibalik natin ang departamento 3:

Bigyan ng pahintulot na magdagdag/magpalit ng IDENTITY values ​​SET IDENTITY_INSERT Departments ON INSERT Departments(ID,Pangalan) VALUES(3,N"IT") -- tanggihan ang pagdaragdag/pagpapalit ng IDENTITY values ​​SET IDENTITY_INSERT Departments OFF
Ganap na i-clear ang Employees table gamit ang TRUNCATE TABLE command:

TRUNCATE TABLE Mga empleyado
At muli, i-reload ang data dito gamit ang nakaraang INSERT command:

INSERT Employees (ID,Pangalan,Birthday,PositionID,DepartmentID,ManagerID)VALUES (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"Andreev AA,"19820417" ,4,3,1000)

I-summarize natin

Sa ngayon, ilan pang DDL command ang naidagdag sa aming kaalaman:
  • Ang pagdaragdag ng IDENTITY property sa field - nagbibigay-daan sa iyong gawing awtomatikong punan ang field na ito (counter field) para sa table;
  • ALTER TABLE table_name ADD list_of_fields_with_characteristics – pinapayagan kang magdagdag ng mga bagong field sa talahanayan;
  • ALTER TABLE table_name DROP COLUMN list_of_fields - nagbibigay-daan sa iyo na alisin ang mga patlang mula sa talahanayan;
  • ALTER TABLE table_name MAGDAGDAG NG PAGPILITAN constraint_name DAYUHANG SUSI(mga patlang) MGA SANGGUNIAN lookup_table(fields) – nagbibigay-daan sa iyong tukuyin ang relasyon sa pagitan ng table at lookup table.

Iba pang mga paghihigpit - NATATANGI, DEFAULT, CHECK

Gamit ang UNIQUE constraint, maaari mong sabihin na ang value para sa bawat row sa isang partikular na field o set ng mga field ay dapat na natatangi. Sa kaso ng talahanayan ng Mga Empleyado, maaari naming ipataw ang gayong paghihigpit sa field ng Email. I-pre-populate lang ang Email ng mga value kung hindi pa natukoy ang mga ito:

I-UPDATE ang Employees SET Email=" [email protected]"WHERE ID=1000 UPDATE Employees SET Email=" [email protected]" WHERE ID=1001 UPDATE Employees SET Email=" [email protected]"WHERE ID=1002 UPDATE Employees SET Email=" [email protected]" WHERE ID=1003
At ngayon ay maaari kang magpataw ng isang natatanging-paghihigpit sa larangang ito:

ALTER TABLE Employees ADD CONSTRAINT UQ_Employees_Email UNIQUE(Email)
Ngayon ang user ay hindi na makakapagpasok ng parehong E-Mail para sa ilang empleyado.

Karaniwang pinangalanan ang uniqueness constraint bilang mga sumusunod - una ay ang prefix na "UQ_", pagkatapos ay ang pangalan ng talahanayan at pagkatapos ng underscore ay ang pangalan ng field kung saan ipinataw ang constraint na ito.

Alinsunod dito, kung ang isang kumbinasyon ng mga patlang ay dapat na natatangi sa konteksto ng mga hilera ng talahanayan, pagkatapos ay ilista namin ang mga ito na pinaghihiwalay ng mga kuwit:

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(field1,field2,...)
Sa pamamagitan ng pagdaragdag ng DEFAULT constraint sa isang field, maaari tayong magtakda ng default na value na papalitan kung ang field ay hindi nakalista sa listahan ng field ng INSERT command kapag may bagong record na ipinasok. Maaaring direktang itakda ang paghihigpit na ito kapag gumagawa ng talahanayan.

Magdagdag tayo ng bagong field na "Petsa ng Pagrerekrut" sa talahanayan ng Mga Empleyado at pangalanan itong HireDate at sabihin na ang default na halaga para sa field na ito ay ang kasalukuyang petsa:

ALTER TABLE Employees ADD HireDate date NOT NULL DEFAULT SYSDATETIME()
O kung mayroon nang HireDate column, maaaring gamitin ang sumusunod na syntax:

ALTER TABLE Employees ADD DEFAULT SYSDATETIME() FOR HireDate
Dito hindi ko tinukoy ang pangalan ng pagpilit, dahil sa kaso ng DEFAULT, ako ay nasa opinyon na ito ay hindi masyadong kritikal. Ngunit kung gagawin mo ito sa mabuting paraan, kung gayon, sa palagay ko, hindi mo kailangang maging tamad at dapat kang magtakda ng isang normal na pangalan. Ginagawa ito tulad ng sumusunod:

ALTER TABLE Employees ADD CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME() FOR HireDate
Dahil ang column na ito ay hindi pa umiiral noon, kapag ito ay idinagdag sa bawat tala, ang kasalukuyang halaga ng petsa ay ipapasok sa HireDate field.

Kapag nagdadagdag ng bagong entry, awtomatikong ilalagay din ang kasalukuyang petsa, siyempre, kung hindi namin ito tahasang itatakda, i.e. hindi tinukoy sa listahan ng mga column. Ipakita natin ito sa isang halimbawa nang hindi tinukoy ang field na HireDate sa listahan ng mga idinagdag na halaga:

INSERT Employees(ID,Pangalan,Email)VALUES(1004,N"Sergeev S.S."," [email protected]")
Tingnan natin kung ano ang nangyari:

PUMILI * MULA SA Mga Empleyado

ID Pangalan Birthday Email PositionID DepartmentID ManagerID HireDate
1000 Ivanov I.I. 1955-02-19 [email protected] 2 1 WALA 2015-04-08
1001 Petrov P.P. 1983-12-03 [email protected] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email protected] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [email protected] 4 3 1000 2015-04-08
1004 Sergeev S.S. WALA [email protected] WALA WALA WALA 2015-04-08

Ang check constraint CHECK ay ginagamit kapag ito ay kinakailangan upang suriin ang mga halaga na ipinasok sa field. Halimbawa, ipataw natin ang paghihigpit na ito sa field ng numero ng tauhan, na ating employee identifier (ID). Gamit ang hadlang na ito, sabihin natin na ang mga numero ng tauhan ay dapat may halaga mula 1000 hanggang 1999:

ALTER TABLE Employees ADD CONSTRAINT CK_Employees_ID CHECK(ID BETWEEN 1000 AND 1999)
Karaniwang pareho ang pangalan ng pagpilit, una sa prefix na "CK_", pagkatapos ay ang pangalan ng talahanayan at ang pangalan ng field kung saan inilalapat ang pagpilit.

Subukan nating magpasok ng di-wastong entry upang matiyak na gumagana ang paghihigpit (dapat nating makuha ang kaukulang error):

INSERT Employees(ID,Email) VALUES(2000," [email protected]")
Ngayon, baguhin natin ang halagang ilalagay sa 1500 at tiyaking naipasok ang talaan:

INSERT Employees(ID,Email) VALUES(1500," [email protected]")
Maaari ka ring lumikha ng NATATANGI at CHECK na mga hadlang nang hindi tinukoy ang isang pangalan:

ALTER TABLE Employees ADD UNIQUE(Email) ALTER TABLE Empleyes ADD CHECK(ID BETWEEN 1000 AND 1999)
Ngunit ito ay hindi isang magandang kasanayan at ito ay mas mahusay na tukuyin ang pangalan ng pagpilit nang tahasan, dahil upang malaman sa ibang pagkakataon kung ano ang magiging mas mahirap, kakailanganin mong buksan ang bagay at tingnan kung ano ang responsable nito.

Sa isang magandang pangalan, maraming impormasyon tungkol sa isang hadlang ang maaaring matutunan nang direkta mula sa pangalan nito.

At, nang naaayon, ang lahat ng mga paghihigpit na ito ay maaaring malikha kaagad kapag lumilikha ng isang talahanayan, kung hindi pa ito umiiral. Tanggalin natin ang talahanayan:

DROP TABLE Mga empleyado
At muling likhain ito kasama ang lahat ng nilikhang mga hadlang sa isang utos ng CREATE TABLE:

GUMAWA NG TABLE Employees(ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, HireDate date NOT NULL DEFAULT SYSDATETIME(), -- for DEFAULT I will throw a CONSTRAINT PK_Employees PRIMARY KEY exception (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Mga Departamento(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT UQ_Employees (INT_Employees) (INT_Employees) (INT_EMPloyees) (INT_EMPloyees) WECK0Email CONSTRAINT

INSERT Employees (ID,Pangalan,Birthday,Email,PositionID,DepartmentID)VALUES (1000,N"Ivanov I.I.","19550219"," [email protected]",2,1), (1001,N"Petrov P.P.","19831203"," [email protected]",3,3), (1002,N"Sidorov S.S.","19760607"," [email protected]",1,2), (1003,N"Andreev A.A.","19820417"," [email protected]",4,3)

Kaunti tungkol sa mga index na ginawa kapag gumagawa ng PRIMARY KEY at NATATANGING mga hadlang

Gaya ng makikita mo sa screenshot sa itaas, kapag gumagawa ng PRIMARY KEY at NATATANGING mga hadlang, awtomatikong nalikha ang mga index na may parehong mga pangalan (PK_Employees at UQ_Employees_Email). Bilang default, ang index para sa pangunahing key ay ginawa bilang CLUSTERED, at para sa lahat ng iba pang mga index bilang NONCLUSTERED. Ito ay nagkakahalaga na sabihin na ang konsepto ng isang clustered index ay hindi magagamit sa lahat ng DBMS. Ang isang talahanayan ay maaari lamang magkaroon ng isang CLUSTERED index. CLUSTERED - nangangahulugan na ang mga talaan ng talahanayan ay pagbukud-bukurin ayon sa index na ito, maaari ding sabihin na ang index na ito ay may direktang access sa lahat ng data ng talahanayan. Ito upang sabihin ang pangunahing index ng talahanayan. Upang ilagay ito kahit na mas magaspang, ito ay isang index screwed sa talahanayan. Ang clustered index ay isang napakalakas na tool na makakatulong sa pag-optimize ng query, tandaan lamang iyon. Kung gusto nating sabihin na ang clustered index ay ginagamit hindi sa pangunahing key, ngunit para sa isa pang index, kung gayon kapag lumilikha ng pangunahing key, dapat nating tukuyin ang NONCLUSTERED na opsyon:

ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY NONCLUSTERED(field1,field2,…)
Halimbawa, gawin nating hindi clustered ang constraint index na PK_Employees, at ang constraint index na UQ_Employees_Email ay clustered. Una sa lahat, alisin natin ang mga paghihigpit na ito:

ALTER TABLE Employees DROP CONSTRAINT PK_Employees ALTER TABLE Employees DROP CONSTRAINT UQ_Employees_Email
At ngayon gawin natin ang mga ito gamit ang CLUSTERED at NONCLUSTERED na mga opsyon:

ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY NONCLUSTERED (ID) ALTER TABLE Employees ADD CONSTRAINT UQ_Employees_Email UNIQUE CLUSTERED (Email)
Ngayon, kapag pumili kami mula sa talahanayan ng Mga Empleyado, makikita namin na ang mga tala ay pinagsunod-sunod ayon sa clustered index na UQ_Employees_Email:

PUMILI * MULA SA Mga Empleyado

ID Pangalan Birthday Email PositionID DepartmentID HireDate
1003 Andreev A.A. 1982-04-17 [email protected] 4 3 2015-04-08
1000 Ivanov I.I. 1955-02-19 [email protected] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [email protected] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email protected] 1 2 2015-04-08

Bago ito, kapag ang clustered index ay ang PK_Employees index, ang mga tala ay bilang default na pinagsunod-sunod ayon sa field ng ID.

Ngunit sa kasong ito, ito ay isang halimbawa lamang na nagpapakita ng kakanyahan ng clustered index, dahil. malamang, ang mga query ay gagawin sa talahanayan ng Mga Empleyado sa pamamagitan ng field ng ID, at sa ilang mga kaso, ito mismo ay maaaring kumilos bilang isang sanggunian.

Para sa mga direktoryo, karaniwang ipinapayong ang clustered index ay itayo sa pangunahing susi, dahil sa mga kahilingan, madalas kaming sumangguni sa directory identifier para makuha, halimbawa, ang pangalan (Posisyon, Departamento). Dito naaalala natin ang isinulat ko tungkol sa itaas, na ang clustered index ay may direktang access sa mga hilera ng talahanayan, at sumusunod na makukuha natin ang halaga ng anumang column nang walang karagdagang overhead.

Ang clustered index ay kapaki-pakinabang na ilapat sa mga field na pinakamadalas na pinipili.

Minsan ang mga talahanayan ay gumagawa ng isang susi sa pamamagitan ng isang kahalili na field, kung saan ito ay kapaki-pakinabang na panatilihin ang CLUSTERED index na opsyon para sa isang mas naaangkop na index at tukuyin ang NONCLUSTERED na opsyon kapag gumagawa ng isang kahalili na pangunahing key.

I-summarize natin

Sa yugtong ito, nakilala namin ang lahat ng uri ng mga paghihigpit, sa kanilang pinakasimpleng anyo, na nilikha ng isang utos tulad ng "ALTER TABLE table_name ADD CONSTRAINT constraint_name ...":
  • PANGUNAHING SUSI- pangunahing susi;
  • DAYUHANG SUSI- pagse-set up ng mga link at pagsubaybay sa referential integridad ng data;
  • NATATANGING- nagpapahintulot sa iyo na lumikha ng pagiging natatangi;
  • SURIIN- nagpapahintulot sa iyo na isagawa ang kawastuhan ng ipinasok na data;
  • DEFAULT– nagpapahintulot sa iyo na itakda ang default na halaga;
  • Dapat ding tandaan na ang lahat ng mga paghihigpit ay maaaring alisin gamit ang command na " ALTER TABLE table_name DROP CONSTRAINT constraint_name".
Bahagyang hinawakan din namin ang paksa ng mga indeks at sinuri ang konsepto ng cluster ( CLUSTERED) at hindi clustered ( HINDI NAKA-NCLUSTER) index.

Paglikha ng mga standalone na index

Ang self-sufficiency dito ay tumutukoy sa mga index na hindi ginawa para sa isang PANGUNAHING SUSI o NATATANGING hadlang.

Ang mga index sa isang field o field ay maaaring malikha gamit ang sumusunod na command:

GUMAWA NG INDEX IDX_Employees_Name SA Mga Empleyado(Pangalan)
Maaari mo ring tukuyin ang CLUSTERED, NONCLUSTERED, UNIQUE na mga opsyon dito, at maaari mo ring tukuyin ang direksyon ng pag-uuri para sa bawat indibidwal na field na ASC (default) o DESC:

GUMAWA NG NATATANGING NONCLUSTERED INDEX UQ_Employees_EmailDesc ON Employees(Email DESC)
Kapag gumagawa ng hindi naka-cluster na index, ang NONCLUSTERED na opsyon ay maaaring tanggalin, bilang ito ay ipinahiwatig bilang default, ito ay ipinapakita dito para lamang ipahiwatig ang posisyon ng CLUSTERED o NONCLUSTERED na opsyon sa command.

Maaari mong alisin ang index gamit ang sumusunod na command:

DROP INDEX IDX_Employees_Name ON Employees
Ang mga simpleng index, tulad ng mga hadlang, ay maaaring gawin sa konteksto ng command na CREATE TABLE.

Halimbawa, tanggalin natin muli ang talahanayan:

DROP TABLE Mga empleyado
At muling likhain ito kasama ang lahat ng nilikhang mga hadlang at index na may isang command na CREATE TABLE:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, HireDate date NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME(), ManagerID int, CONSTRAloyyINTesPK ), Pagpilit fk_employees_departmentid banyagang susi (department) Mga kagawaran ng sanggunian (id), pagpilit fk_employees_positionid banyagang susi (positionID) Mga posisyon ng sanggunian (ID), pagpigil ng mga sanggunian ng mga empleyado (ID), pagpilit sa pagitan ng 1000 at 1999), INDEX IDX_Employees_Name(Pangalan))
Panghuli, ipasok sa talahanayan ng aming mga empleyado:

INSERT Employees (ID,Pangalan,Birthday,Email,PositionID,DepartmentID,ManagerID)VALUES (1000,N"Ivanov II","19550219"," [email protected]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [email protected]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [email protected]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [email protected]",4,3,1000)
Bilang karagdagan, nararapat na tandaan na ang mga halaga ay maaaring isama sa isang hindi naka-cluster na index sa pamamagitan ng pagtukoy sa mga ito sa INCLUDE. Yung. sa kasong ito, ang INCLUDE index ay medyo kahawig ng isang clustered index, ngayon lamang ang index ay hindi naka-attach sa talahanayan, ngunit ang mga kinakailangang halaga ay naka-attach sa index. Alinsunod dito, ang mga naturang index ay maaaring lubos na mapabuti ang pagganap ng mga piling query (SELECT), kung ang lahat ng mga nakalistang field ay nasa index, kung gayon ito ay posible na hindi na kailangang i-access ang talahanayan sa lahat. Ngunit natural nitong pinapataas ang laki ng index, dahil ang mga halaga ng mga nakalistang field ay nadoble sa index.

Pag-clip mula sa MSDN. Pangkalahatang Command Syntax para sa Paglikha ng mga Index

GUMAWA ng [NATATANGI] [CLUSTERED | NONCLUSTERED ] INDEX index_name NAKA-ON (column [ ASC | DESC ] [ ,...n ]) [ INCLUDE (column_name [ ,...n ]) ]

I-summarize natin

Maaaring pataasin ng mga index ang bilis ng pagkuha ng data (SELECT), ngunit binabawasan ng mga index ang bilis ng pag-update ng data ng talahanayan, dahil pagkatapos ng bawat pagbabago, kakailanganin ng system na buuin muli ang lahat ng mga index para sa isang partikular na talahanayan.

Ito ay kanais-nais sa bawat kaso upang mahanap ang pinakamainam na solusyon, ang ginintuang ibig sabihin, upang ang parehong pagganap ng sampling at ang pagbabago ng data ay nasa tamang antas. Ang diskarte sa paggawa ng mga index at ang bilang ng mga ito ay maaaring depende sa maraming salik, gaya ng kung gaano kadalas nagbabago ang data sa talahanayan.

Konklusyon sa DDL

Tulad ng nakikita mo, ang wika ng DDL ay hindi kasing kumplikado na tila sa unang tingin. Dito ko naipakita ang halos lahat ng pangunahing disenyo niya, gamit lamang ang tatlong mesa.

Ang pangunahing bagay ay upang maunawaan ang kakanyahan, at ang natitira ay isang bagay ng pagsasanay.

Good luck sa mastering ito kahanga-hangang wika na tinatawag na SQL.

Maligayang pagdating sa aking blog site. Ngayon ay pag-uusapan natin ang tungkol sa mga query sa sql para sa mga nagsisimula. Maaaring may tanong ang ilang webmaster. Bakit matuto ng sql? Hindi makadaan?

Lumalabas na hindi ito magiging sapat upang lumikha ng isang propesyonal na proyekto sa Internet. Ginagamit ang Sql para magtrabaho kasama ang database at lumikha ng mga application para sa WordPress. Tingnan natin kung paano gumamit ng mga query nang mas detalyado.

Ano ito

Ang Sql ay isang structured query na wika. Nilikha upang matukoy ang uri ng data, magbigay ng access sa mga ito at magproseso ng impormasyon sa maikling panahon. Inilalarawan nito ang mga bahagi o ilang resulta na gusto mong makita sa proyekto sa Internet.

Sa madaling salita, pinapayagan ka ng programming language na ito na magdagdag, magbago, maghanap at magpakita ng impormasyon sa database. Ang katanyagan ng mysql ay dahil sa ang katunayan na ito ay ginagamit upang lumikha ng mga dynamic na proyekto sa Internet, na batay sa isang database. Samakatuwid, upang bumuo ng isang functional na blog, kailangan mong matutunan ang wikang ito.

Ano ang magagawa

Pinapayagan ng sql na wika ang:

  • lumikha ng mga talahanayan;
  • pagbabago tumanggap at mag-imbak ng iba't ibang data;
  • pagsamahin ang impormasyon sa mga bloke;
  • protektahan ang data;
  • lumikha ng mga kahilingan sa pag-access.

Mahalaga! Ang pagkakaroon ng pakikitungo sa sql, maaari kang magsulat ng mga application para sa WordPress ng anumang kumplikado.

Anong istraktura

Ang database ay binubuo ng mga talahanayan na maaaring katawanin bilang isang Excel file.

Mayroon siyang pangalan, column at row na may ilang impormasyon. Maaari kang lumikha ng mga naturang talahanayan gamit ang mga query sa sql.

Anong kailangan mong malaman


Mga Pangunahing Punto Sa Pag-aaral ng Sql

Tulad ng nabanggit sa itaas, ang mga query ay ginagamit upang iproseso at ipasok ang bagong impormasyon sa isang database na binubuo ng mga talahanayan. Ang bawat linya ay isang hiwalay na entry. Kaya gumawa tayo ng database. Upang gawin ito, isulat ang utos:

Lumikha ng database na 'bazaname'

Sa mga panipi, isinusulat namin ang pangalan ng database sa Latin. Subukang mag-isip ng isang makabuluhang pangalan para sa kanya. Huwag gumawa ng database tulad ng "111", "www" at iba pa.

Pagkatapos lumikha ng database, i-install:

Itakda ang mga pangalan 'utf-8'

Ito ay kinakailangan upang ang nilalaman sa site ay maipakita nang tama.

Ngayon lumikha kami ng isang talahanayan:

GUMAWA NG TALAAN 'bazaname' . 'talahanayan' (

id INT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,

log VARCHAR(10),

pumasa sa VARCHAR(10),

petsa DATE

Sa pangalawang linya, sumulat kami ng tatlong katangian. Tingnan natin kung ano ang ibig nilang sabihin:

  • Ang attribute na NOT NULL ay nangangahulugan na ang cell ay hindi mawawalan ng laman (ang field ay kinakailangan);
  • Ang halaga ng AUTO_INCREMENT ay autocomplete;
  • PRIMARY KEY ay ang pangunahing susi.

Paano magdagdag ng impormasyon

Upang punan ang mga patlang ng nilikha na talahanayan ng mga halaga, ang INSERT na pahayag ay ginagamit. Sinusulat namin ang mga sumusunod na linya ng code:

INSERT SA 'table'

(login , pass , date) VALUES

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

Sa mga bracket ipinapahiwatig namin ang pangalan ng mga haligi, at sa susunod - ang mga halaga.

Mahalaga! Sundin ang pagkakasunod-sunod ng mga pangalan at value ng column.

Paano mag-update ng impormasyon

Para dito, ginagamit ang UPDATE command. Tingnan natin kung paano baguhin ang password para sa isang partikular na user. Sinusulat namin ang mga sumusunod na linya ng code:

I-UPDATE ang 'table' SET pass = '12345678' WHERE id = '1'

Ngayon baguhin ang password sa '12345678'. Nagaganap ang mga pagbabago sa linyang may "id"=1. Kung hindi mo isusulat ang utos na WHERE, magbabago ang lahat ng linya, hindi isang tiyak.

Inirerekomenda ko na bilhin mo ang libro SQL para sa mga dummies ". Sa tulong nito, magagawa mong propesyonal na magtrabaho kasama ang database nang hakbang-hakbang. Ang lahat ng impormasyon ay binuo batay sa prinsipyo mula sa simple hanggang sa kumplikado, at matatanggap ng mabuti.

Paano magtanggal ng entry

Kung may mali kang isinulat, itama ito gamit ang utos na DELETE. Gumagana ang parehong bilang UPDATE. Sinusulat namin ang sumusunod na code:

I-DELETE MULA SA 'table' WHERE id = '1'

Pagsa-sample ng impormasyon

Ang utos na SELECT ay ginagamit upang kunin ang mga halaga mula sa database. Sinusulat namin ang sumusunod na code:

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

Sa halimbawang ito, pipiliin namin ang lahat ng magagamit na mga patlang sa talahanayan. Nangyayari ito kung sumulat ka ng asterisk na "*" sa command. Kung kailangan mong pumili ng ilang sample na halaga, sumulat ng ganito:

SELECT log , pass FROM table WHERE id = '1'

Dapat tandaan na ang kakayahang magtrabaho kasama ang mga database ay hindi magiging sapat. Upang lumikha ng isang propesyonal na proyekto sa Internet, kailangan mong matutunan kung paano magdagdag ng data mula sa database sa mga pahina. Upang gawin ito, maging pamilyar sa php web programming language. Makakatulong ito sa iyo Ang cool na kurso ni Mikhail Rusakov .


Pagtanggal ng talahanayan

Nagaganap sa isang kahilingan sa DROP. Upang gawin ito, isulat ang mga sumusunod na linya:

DROP TABLE table;

Pag-output ng isang tala mula sa isang talahanayan ayon sa isang tiyak na kundisyon

Isaalang-alang ang code na ito:

PUMILI ng id, bansa, lungsod MULA sa talahanayan kung saan ang mga tao>150000000

Ipapakita nito ang mga talaan ng mga bansa kung saan ang populasyon ay higit sa isang daan at limampung milyon.

Isang asosasyon

Posible ang pag-uugnay ng maramihang mga talahanayan gamit ang Join. Tingnan kung paano ito gumagana sa video na ito:

PHP at MySQL

Muli gusto kong bigyang-diin na ang mga kahilingan kapag lumilikha ng isang proyekto sa Internet ay isang pangkaraniwang bagay. Upang magamit ang mga ito sa mga dokumento ng php, sundin ang sumusunod na algorithm ng mga aksyon:

  • Kumonekta sa database gamit ang mysql_connect() command;
  • Gamit ang mysql_select_db() piliin ang nais na database;
  • Pagproseso ng query gamit ang mysql_fetch_array();
  • Isinasara namin ang koneksyon sa mysql_close() command.

Mahalaga! Ang pagtatrabaho sa isang database ay hindi mahirap. Ang pangunahing bagay ay isulat nang tama ang kahilingan.

Mag-iisip ang mga baguhang webmaster. At ano ang mababasa sa paksang ito? Gusto kong irekomenda ang aklat ni Martin Graber " SQL para sa mga mortal lamang ". Ito ay nakasulat sa paraang mauunawaan ng mga nagsisimula ang lahat. Gamitin ito bilang isang reference book.

Ngunit ito ay isang teorya. Paano ito gumagana sa pagsasanay? Sa katunayan, ang isang proyekto sa Internet ay hindi lamang dapat malikha, ngunit dalhin din sa TOP ng Google at Yandex. Tutulungan ka ng kursong video dito " Paglikha at pag-promote ng site ».


Video na pagtuturo

May mga tanong pa ba? Manood ng higit pang online na video.

Konklusyon

Kaya, ang pagharap sa pagsusulat ng mga query sa sql ay hindi kasing hirap ng tila, ngunit kailangang gawin ito ng sinumang webmaster. Ang mga kursong video na inilarawan sa itaas ay makakatulong dito. Mag-subscribe sa ang aking VKontakte group upang maging unang makaalam tungkol sa mga bagong kawili-wiling impormasyon.

Karamihan sa mga modernong web application ay nakikipag-ugnayan sa mga database, kadalasang gumagamit ng isang wikang tinatawag SQL. Sa kabutihang-palad para sa amin, ang wikang ito ay napakadaling matutunan. Sa artikulong ito, titingnan natin ang simple SQL mga kahilingan at matutunan kung paano gamitin ang mga ito para makipag-ugnayan MySQL database.

Ano'ng kailangan mo?

SQL (Structured Query Language) isang wika na espesyal na idinisenyo upang makipag-ugnayan sa mga sistema ng pamamahala ng database tulad ng MySQL, Oracle, Sqlite at iba pa ... Upang gumanap SQL mga kahilingan sa artikulong ito, ipinapayo ko sa iyo na i-install MySQL sa lokal na computer. Inirerekumenda ko rin ang paggamit phpMyAdmin bilang isang visual na interface.

Ang lahat ng ito ay makukuha sa paboritong Denver ng lahat. Sa tingin ko dapat malaman ng lahat kung ano ito at kung saan ito makukuha :). Pwede gumamit ng WAMP o MAMP.

May built in si Denver MySQL console. Gagamitin natin.

GUMAWA NG DATABASE:paglikha ng database

Narito ang aming unang kahilingan. Gagawa kami ng aming unang database para sa karagdagang trabaho.

Upang makapagsimula, buksan MySQL console at pag-login. Para sa WAMP walang laman ang default na password. Wala yun :). Para sa MAMP - "ugat". Kailangang linawin si Denver.

Pagkatapos mag-login, ipasok ang sumusunod na linya at i-click Ipasok:

GUMAWA NG DATABASE my_first_db;

Tandaan na ang isang semicolon (;) ay idinagdag sa dulo ng query, tulad ng sa ibang mga wika.

Mga utos din sa SQL case sensitive. Sinusulat namin ang mga ito sa malalaking titik.

Mga pagpipilian sa totoo lang: set ng karakterat Collation

Kung gusto mong i-install character set (character set) at collation (comparison) maaari isulat ang sumusunod na utos:

GUMAWA NG DATABASE my_first_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Maghanap ng isang listahan ng mga set ng character na sinusuportahan MySQL.

IPAKITA ANG MGA DATABASE:naglilista ng lahat ng mga database

Ang utos na ito ay ginagamit upang ipakita ang lahat ng magagamit na mga database.

DROP DATABASE:pagtanggal ng database

Maaari mong i-drop ang isang umiiral na db gamit ang query na ito.

Mag-ingat sa utos na ito dahil tumatakbo ito nang walang babala. Kung mayroong data sa iyong database, lahat sila ay tatanggalin.

GAMITIN:Pagpili ng database

Sa teknikal, hindi ito isang query, ngunit isang operator, at hindi nangangailangan ng semicolon sa dulo.

Sinasabi nito sa MySQL pumili ng database na gagana bilang default para sa kasalukuyang session. Ngayon handa na kaming lumikha ng mga talahanayan at gumawa ng iba pang mga bagay gamit ang database.

Ano ang isang talahanayan sa isang database?

Maaari kang kumatawan sa isang talahanayan sa database bilang Excel file.

Tulad ng sa larawan, ang mga talahanayan ay may mga pangalan ng hanay, mga hilera, at impormasyon. Sa pamamagitan ng SQL mga query na maaari tayong lumikha ng mga naturang talahanayan. Maaari rin kaming magdagdag, magbasa, mag-update, at magtanggal ng impormasyon.

GUMAWA NG TALAAN: Gumawa ng table

C Sa query na ito, maaari tayong lumikha ng mga talahanayan sa database. Sa kasamaang palad ang dokumentasyon MySQL hindi masyadong malinaw para sa mga baguhan sa paksang ito. Ang istraktura ng ganitong uri ng kahilingan ay maaaring maging napakakumplikado, ngunit magsisimula kami sa isang madali.

Ang sumusunod na query ay lilikha ng isang talahanayan na may 2 mga hanay.

GUMAWA NG TABLE na mga user (username VARCHAR(20), create_date DATE);

Tandaan na maaari naming isulat ang aming mga query sa maraming linya at may mga tab para sa indentation.

Ang unang linya ay simple. Lumilikha lamang kami ng isang talahanayan na tinatawag na "mga gumagamit". Susunod, sa mga panaklong, na pinaghihiwalay ng mga kuwit, ay isang listahan ng lahat ng mga hanay. Pagkatapos ng bawat pangalan ng column, mayroon kaming mga uri ng impormasyon gaya ng VARCHAR o DATE.

VARCHAR(20) ay nangangahulugan na ang column ay may uri ng string at maaaring may maximum na 20 character ang haba. Ang DATE ay isa ring uri ng impormasyon na ginagamit upang mag-imbak ng mga petsa sa ganitong format: "YYYY - MM-DD".

PANGUNAHING SUSI ( pangunahing susih)

Bago natin isagawa ang susunod na query, kailangan din nating magsama ng column para sa "user_id ", na magiging pangunahing key natin. Maaari mong isipin ang PANGUNAHING SUSI bilang impormasyon na ginagamit upang matukoy ang bawat hilera sa isang talahanayan.

GUMAWA NG TABLE na mga user (user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20), create_date DATE);

INT gumagawa ng 32 bit integer type (tulad ng mga numero). AUTO_INCREMENT awtomatikong bumubuo ng bagong halaga ID sa tuwing nagdaragdag kami ng mga bagong hilera ng impormasyon. Hindi ito kinakailangan, ngunit ginagawang mas madali ang buong proseso.

Ang column na ito ay hindi kailangang maging isang integer na halaga, ngunit ito ay pinakakaraniwang ginagamit. Opsyonal din ang pagkakaroon ng Primary Key, ngunit inirerekomenda para sa arkitektura at pagganap ng database.

Magpatakbo tayo ng query:

IPAKITA ANG MGA TABLE:ipakita ang lahat ng mga talahanayan

Binibigyang-daan ka ng query na ito na makakuha ng listahan ng mga talahanayan na nasa database.

Ipaliwanag:Ipakita ang istraktura ng talahanayan

Maaari mong gamitin ang query na ito upang ipakita ang istraktura ng isang umiiral na talahanayan.

Ang mga column ay ipinapakita kasama ang lahat ng mga katangian.

DROP TABLE:tanggalin ang talahanayan

Tulad ng DROP DATABASES, ibinabagsak ng query na ito ang talahanayan at ang mga nilalaman nito nang walang babala.

ALTER TABLE: baguhin ang talahanayan

Ang query na ito ay maaari ding maglaman ng isang kumplikadong istraktura dahil sa mas maraming pagbabago na maaari nitong gawin sa talahanayan. Tingnan natin ang mga halimbawa.

(kung tinanggal mo ang talahanayan sa huling hakbang, gawin itong muli para sa mga pagsubok)

DAGDAG NG COLUMN

ALTER TABLE user ADD email VARCHAR(100) AFTER username;

Dahil sa mahusay na kakayahang mabasa ng SQL, sa palagay ko ay walang saysay na ipaliwanag ito nang detalyado. Nagdaragdag kami ng bagong column na "email" pagkatapos ng "username".

PAG-ALIS NG COLUMN

Napakadali din noon. Mangyaring gamitin ang query na ito nang may pag-iingat dahil ang data ay maaaring tanggalin nang walang babala.

Ibalik ang column na kakatanggal mo lang para sa karagdagang eksperimento.

GUMAWA NG PAGBABAGO SA ISANG COLUMN

Minsan maaaring gusto mong gumawa ng mga pagbabago sa mga katangian ng isang column, at hindi mo kailangang ganap na alisin ito upang magawa ito.

Pinalitan ng query na ito ang column ng user sa "user_name " at binago ang uri nito mula VARCHAR(20) patungong VARCHAR(30). Ang ganitong pagbabago ay hindi dapat baguhin ang data sa talahanayan.

INSERT: Pagdaragdag ng impormasyon sa isang talahanayan

Magdagdag tayo ng ilang impormasyon sa talahanayan gamit ang sumusunod na query.

Gaya ng nakikita mo, ang VALUES() ay naglalaman ng listahan ng mga value na pinaghihiwalay ng kuwit. Ang lahat ng mga halaga ay nakapaloob sa mga solong hanay. At ang mga halaga ay dapat nasa pagkakasunud-sunod ng mga hanay na tinukoy noong nilikha ang talahanayan.

Tandaan na ang unang value ay NULL para sa PRIMARY KEY field na tinatawag na "user_id ". Ginagawa namin ito upang awtomatikong mabuo ang ID, dahil ang column ay may AUTO_INCREMENT property. Kapag idinagdag ang impormasyon sa unang pagkakataon ang ID ay magiging 1. Ang susunod na hilera ay magiging 2, at iba pa...

ALTERNATIVE OPTION

May isa pang pagpipilian sa query para sa pagdaragdag ng mga hilera.

Sa pagkakataong ito, ginagamit namin ang SET na keyword sa halip na VALUES at wala itong panaklong. Mayroong ilang mga nuances:

Maaaring laktawan ang column. Halimbawa, hindi kami nagtalaga ng value sa "user_id ", na makakakuha ng AUTO_INCREMENT value nito bilang default. Kung aalisin mo ang isang column ng VARCHAR, magdaragdag ng walang laman na string.

Ang bawat hanay ay dapat na tinutukoy sa pamamagitan ng pangalan. Dahil dito, maaari silang banggitin sa anumang pagkakasunud-sunod, hindi tulad ng nakaraang bersyon.

ALTERNATIVE 2

Narito ang isa pang pagpipilian.

Muli, dahil may mga sanggunian sa pangalan ng hanay, maaari mong tukuyin ang mga halaga sa anumang pagkakasunud-sunod.

LAST_INSERT_ID()

Magagamit mo ang query na ito para makuha ang ID na AUTO_INCREMENT para sa huling row ng kasalukuyang session.

NGAYON()

Ngayon ay oras na upang ipakita sa iyo kung paano mo magagamit ang isang MySQL function sa mga query.

Ibinabalik ng NOW() function ang kasalukuyang petsa. Para magamit mo ito para awtomatikong itakda ang petsa ng isang column sa kasalukuyang isa kapag nagpasok ka ng bagong row.

Tandaan na nakatanggap kami ng 1 babala, ngunit huwag pansinin ito. Ang dahilan nito ay ang NOW() ay nagsisilbi ring magpakita ng pansamantalang impormasyon.

PUMILI: Pagbabasa ng data mula sa isang talahanayan

Kung magdaragdag kami ng impormasyon sa isang talahanayan, magiging lohikal na matutunan kung paano basahin ito mula doon. Dito matutulungan tayo ng SELECT query.

Nasa ibaba ang pinakasimpleng posibleng SELECT query para magbasa ng table.

Sa kasong ito, ang asterisk (*) ay nangangahulugan na hiniling namin ang lahat ng mga patlang mula sa talahanayan. Kung gusto mo lang ng ilang column, magiging ganito ang hitsura ng query.

kundisyonSAAN

Kadalasan, hindi kami interesado sa lahat ng column, ngunit sa ilan lang. Halimbawa, ipagpalagay natin na kailangan lang natin ang email address para sa user na "nettuts ".

Binibigyang-daan ka ng WHERE na magtakda ng mga kundisyon sa isang query at gumawa ng mga detalyadong pagpili.

Tandaan na ang pagkakapantay-pantay ay gumagamit ng isang equal sign (=) sa halip na dalawa gaya ng sa programming.

Maaari ka ring gumamit ng mga paghahambing.

Ang AT o O ay maaaring gamitin upang pagsamahin ang mga kundisyon:

Tandaan na ang mga numerong halaga ay hindi dapat nasa mga panipi.

SA()

Ito ay kapaki-pakinabang para sa pag-sample sa maraming mga halaga.

GAYA NG

Binibigyang-daan kang gumawa ng mga "wildcard" na kahilingan

Ang % sign ay ginagamit bilang "wildcard". Iyon ay, sa lugar nito ay maaaring maging anuman.

kundisyonINIUTOS NI

Kung gusto mong makuha ang resulta sa isang ordered form ayon sa ilang criterion

Ang default na order ay ASC (mula sa pinakamaliit hanggang sa pinakamalaki). Para sa kabaligtaran, DESC ang ginagamit.

LIMIT ... OFFSET ...

Maaari mong limitahan ang bilang ng mga resulta na iyong natatanggap.

LIMIT 2 lang ang kukuha ng unang 2 resulta. LIMIT 1 OFFSET 2 ay nakakakuha ng 1 resulta pagkatapos ng unang 2. LIMIT 2, pareho ang ibig sabihin ng 1 (pansinin lang na mauna ang offset at pagkatapos ay limitahan ).

I-UPDATE: Gumawa ng mga pagbabago sa impormasyon sa talahanayan

Ang query na ito ay ginagamit upang baguhin ang impormasyon sa isang talahanayan.

Sa karamihan ng mga kaso, ginagamit ito kasabay ng sugnay na WHERE, dahil malamang na gusto mong gumawa ng mga pagbabago sa ilang mga column. Kung walang sugnay na WHERE, makakaapekto ang mga pagbabago sa lahat ng row.

Maaari mo ring gamitin ang LIMIT upang limitahan ang bilang ng mga row na kailangang baguhin.

TANGGALIN: Pag-alis ng impormasyon mula sa isang talahanayan

Tulad ng UPDATE, ang query na ito ay ginagamit sa WHERE:

Upang alisin ang mga nilalaman ng isang talahanayan, magagawa mo lang ito:

TANGGALIN MULA SA mga user;

Pero mas magandang gamitin TRUNCATE

Bilang karagdagan sa pagtanggal, nire-reset din ng query na ito ang mga halaga AUTO_INCREMENT at kapag nagdagdag muli ng mga row, magsisimula ang countdown mula sa zero. I-DELETE hindi ito ginagawa at nagpapatuloy ang countdown.

Hindi pagpapagana ng String Values ​​at Special Words

mga halaga ng string

Kailangang i-disable ang ilang character ( pagtakas ), o maaaring may mga problema.

Para dito, ginagamit ang isang backslash.(\).

Mga espesyal na salita

Dahil sa MySQL maraming espesyal na salita PUMILI o I-UPDATE ), para maiwasan ang mga error kapag ginagamit ang mga ito, dapat gumamit ng mga panipi. Ngunit hindi ordinaryong quotes, ngunit ito(`).

Ibig sabihin, kakailanganin mong magdagdag ng column na pinangalanang " tanggalin ", kailangan mong gawin ito tulad nito:

Konklusyon

Salamat sa pagbabasa hanggang dulo. Umaasa ako na ang artikulong ito ay naging kapaki-pakinabang sa iyo. Hindi pa tapos! Itutuloy :).

Ipinakita ko sa iyong pansin ang isang libreng pagsasalin ng artikulong SQL para sa mga Nagsisimula

Parami nang parami ang mga modernong web application na nakikipag-ugnayan sa mga database, kadalasang gumagamit ng wika SQL. Sa kabutihang-palad para sa amin, ang wikang ito ay medyo madaling matutunan. Sa artikulong ito, magsisimula kaming matutunan ang mga pangunahing kaalaman ng mga query sa SQL at ang kanilang pakikipag-ugnayan sa database. MySQL.

Ang iyong kailangan

Ang SQL (Structured Query Language) ay isang wikang idinisenyo upang makipag-ugnayan sa mga relational database management system (DBMS) tulad ng MySQL, Oracle, Sqlite at iba pa. Upang maisagawa ang mga query sa SQL sa artikulong ito, ipinapalagay ko na mayroon ka MySQL. Inirerekomenda ko rin ang paggamit phpMyAdmin bilang isang visual na pagpapakita para sa MySQL.

Ang mga sumusunod na app ay gagawing madali ang pag-install MySQL at phpMyAdmin sa iyong computer:

  • WAMP para sa Windows
  • MAMP para sa Mac

Magsimula tayong magsagawa ng mga query sa command line. WAMP naglalaman na nito sa console MySQL. Para sa MAMP maaaring kailanganin mong basahin ito.

GUMAWA NG DATABASE: Gumawa ng database

Ang aming pinakaunang kahilingan. Gagawa kami ng database kung saan kami gagana.

Una sa lahat, buksan ang console MySQL at mag-log in. Para sa WAMP, bilang default, ginagamit ang isang walang laman na password. Para sa MAMP ang password ay dapat na "ugat".

Pagkatapos mag-log in, i-type ang kahilingang ito at i-click Pumasok:

GUMAWA NG DATABASE my_first_db;

Tandaan na ang isang semicolon (;) ay idinagdag sa dulo ng query, tulad ng sa dulo ng isang linya sa code.

Gayundin, ang mga keyword GUMAWA NG DATABASE case insensitive, tulad ng lahat ng keyword sa SQL. Ngunit isusulat namin ang mga ito sa malalaking titik para sa mas madaling mabasa.

Tandaan: set ng character at pagkakasunud-sunod ng collation

Kung gusto mong itakda ang default na set ng character at pagkakasunud-sunod ng collation, gumamit ng query na tulad nito:

GUMAWA NG DATABASE my_first_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Makakakita ka ng listahan ng mga sinusuportahang hanay ng character at collation sa MySQL.

IPAKITA ANG MGA DATABASE: Listahan ng lahat ng mga database

Ang query na ito ay ginagamit upang ipakita ang lahat ng mga database.

DROP DATABASE: Mag-drop ng database

Sa query na ito, maaari mong tanggalin ang isang umiiral na database.

Mag-ingat sa query na ito dahil hindi ito nagpi-print ng anumang mga babala. Kung mayroon kang mga talahanayan at data sa database, ang query ay i-drop ang lahat ng ito sa isang iglap.

Mula sa teknikal na pananaw, hindi ito kahilingan. Ito ay isang "operator" at hindi nangangailangan ng semicolon sa dulo.

Nag-uulat siya MySQL na kailangan mong piliin ang default na database at magtrabaho kasama nito hanggang sa katapusan ng session. Ngayon ay handa na kaming lumikha ng mga talahanayan at ang natitirang bahagi ng database na ito.

Ano ang isang talahanayan ng database?

Maaari mong isipin ang isang talahanayan sa isang database bilang isang regular na talahanayan, o bilang isang csv file na may structured data.

Tulad ng halimbawang ito, ang talahanayan ay may mga pangalan ng row at mga column ng data. Gamit ang mga query sa SQL maaari nating gawin ang talahanayang ito. Maaari rin kaming magdagdag, magbasa, magbago at magtanggal ng data.

GUMAWA NG TABLE: Gumawa ng table

Sa query na ito, maaari tayong lumikha ng isang talahanayan sa database. Sa kasamaang palad ang dokumentasyon MySQL hindi masyadong palakaibigan sa mga bagong user. Ang istraktura ng query na ito ay maaaring maging napakakumplikado, ngunit magsisimula tayo sa simple.

Ang sumusunod na query ay lumilikha ng isang talahanayan na may dalawang hanay.

GUMAWA NG TABLE na mga user (username VARCHAR(20), create_date DATE);

Tandaan na maaari naming isulat ang query sa maraming linya at gamitin Tab para sa pag-urong.

Ang lahat ay simple sa unang linya. Lumilikha kami ng isang talahanayan na pinangalanan mga gumagamit. Dagdag pa, sa mga bracket, ang mga column ng talahanayan ay nakalista na pinaghihiwalay ng mga kuwit. Pagkatapos ng bawat pangalan ng column, darating ang uri ng data, halimbawa, VARCHAR o DATE.

VARCHAR(20) nangangahulugan na ang column ay may uri ng string at maaaring hindi hihigit sa 20 character ang haba. DATE- uri ng data na inilaan para sa pag-iimbak ng mga petsa sa format na: "YYYY-MM-DD".

pangunahing susi

Bago natin isagawa ang query na ito, kailangan nating magpasok ng column user_id, na magiging PRIMARY KEY. Nang hindi naglalagay ng masyadong maraming detalye, maaari mong isipin ang isang pangunahing key bilang isang paraan upang makilala ang bawat hilera ng data sa isang talahanayan.

Ang kahilingan ay nagiging ganito:

GUMAWA NG TABLE na mga user (user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20), create_date DATE);

INT- 32-bit integer type (numeric). AUTO_INCREMENT awtomatikong bumubuo ng bagong id number sa tuwing may idinagdag na row ng data. Hindi ito kinakailangan, ngunit ito ay mas maginhawa dito.

Maaaring hindi isang integer ang column na ito, bagama't ito ang pinakakaraniwang uri ng data. Hindi kinakailangan ang isang pangunahing key na column, ngunit inirerekomenda upang mapabuti ang pagganap at arkitektura ng database.

Magpatakbo tayo ng query:

IPAKITA ANG MGA TALAAN: Listahan ng lahat ng mga talahanayan

Ang query ay nagpapahintulot sa iyo na makakuha ng isang listahan ng lahat ng mga talahanayan sa kasalukuyang database.

IPALIWANAG: Ipakita ang istraktura ng talahanayan

Gamitin ang query na ito upang tingnan ang istraktura ng isang umiiral na talahanayan.

Bilang resulta, ipinapakita ang mga field (column) at ang kanilang mga katangian.

DROP TABLE: Mag-drop ng table

Gaya ng DROP DATABASES, tinatanggal ng query na ito ang talahanayan at ang mga nilalaman nito nang walang anumang babala.

ALTER TABLE: Palitan ang table

Ang naturang query ay maaaring may isang kumplikadong istraktura dahil maaari itong gumawa ng maraming pagbabago sa talahanayan. Tingnan natin ang mga simpleng halimbawa.

Dahil sa pagiging madaling mabasa SQL, ang kahilingang ito ay hindi nangangailangan ng paliwanag.

Ang pag-alis ay kasing dali lang. Gamitin ang kahilingan nang may pag-iingat, ang data ay tinanggal nang walang babala.

Idagdag muli ang field email, kakailanganin mo ito mamaya:

ALTER TABLE user ADD email VARCHAR(100) AFTER username;

Minsan maaaring kailanganin mong baguhin ang mga katangian ng isang column, hindi na kailangang tanggalin ito at likhain itong muli.

Pinapalitan ng query na ito ang pangalan ng field username v username at binabago ang uri nito mula sa VARCHAR(20) sa VARCHAR(30). Ang ganitong mga pagbabago ay hindi nakakaapekto sa data sa talahanayan.

INSERT: Pagdaragdag ng data sa isang talahanayan

Magdagdag tayo ng mga tala sa talahanayan gamit ang mga query.

Tulad ng nakikita mo, VALUES() naglalaman ng listahan ng mga halaga na pinaghihiwalay ng kuwit. Ang mga halaga ng string ay nakapaloob sa mga solong panipi. Ang mga halaga ay dapat nasa pagkakasunud-sunod na tinukoy noong ginawa ang talahanayan.

Tandaan na ang unang halaga ay WALA para sa pangunahing key na pinangalanan namin ang field user_id. Lahat dahil ang field ay minarkahan bilang AUTO_INCREMENT at awtomatikong nabuo ang id. Ang unang row ng data ay magkakaroon ng id na 1. Ang susunod na row na idinagdag ay 2, at iba pa.

Alternatibong syntax

Narito ang isa pang syntax para sa pagpasok ng mga row.

Sa pagkakataong ito ginamit namin ang keyword ITAKDA sa halip na MGA HALAGA. Tandaan natin ang ilang bagay:

  • Maaaring tanggalin ang column. Halimbawa, hindi kami nagtalaga ng halaga sa field user_id dahil ito ay minarkahan bilang AUTO_INCREMENT. Kung hindi ka magtatalaga ng halaga sa isang field na may uri VARCHAR, pagkatapos ay sa pamamagitan ng default ay kukuha ito ng halaga ng isang walang laman na string (kung ang isa pang default na halaga ay hindi naitakda sa paggawa ng talahanayan).
  • Ang bawat column ay maaaring i-refer sa pamamagitan ng pangalan. Samakatuwid, ang mga patlang ay maaaring pumunta sa anumang pagkakasunud-sunod, hindi tulad ng nakaraang syntax.

Alternatibong syntax number 2

Narito ang isa pang halimbawa.

Tulad ng dati, ang mga patlang ay maaaring ma-access sa pamamagitan ng pangalan, maaari silang lumitaw sa anumang pagkakasunud-sunod.

Gamitin ang query na ito para makuha ang id ng huling inilagay na row.

NGAYON()

Oras na para ipakita sa iyo kung paano gamitin ang mga function MySQL sa mga kahilingan.

Function NGAYON() ibinabalik ang kasalukuyang petsa. Gamitin ito upang awtomatikong idagdag ang kasalukuyang petsa sa isang field na may uri DATE.

Pakitandaan na nakatanggap kami ng babala mula sa MySQL, ngunit hindi ito ganoon kahalaga. Ang dahilan ay ang pag-andar NGAYON() talagang nagbabalik ng impormasyon sa oras.

Gumawa kami ng field create_date, na maaari lamang maglaman ng petsa, hindi oras, kaya naputol ang data. sa halip na NGAYON() magagamit natin CURDATE(), na ibinabalik lamang ang kasalukuyang petsa, ngunit magtatapos sa parehong resulta.

SELECT: Pagkuha ng data mula sa isang table

Obviously, walang silbi ang mga datos na naisulat natin hangga't hindi natin ito nababasa. Ang kahilingan ay dumating upang iligtas PUMILI.

Ang pinakasimpleng halimbawa ng paggamit ng query PUMILI upang basahin ang data mula sa isang talahanayan:

Ang asterisk (*) ay nangangahulugan na gusto naming makuha ang lahat ng column ng table. Kung kailangan mo lang kumuha ng ilang column, gumamit ng ganito:

Mas madalas kaysa sa hindi, gusto lang naming makakuha ng ilang row, hindi lahat. Halimbawa, kunin natin ang E-mail address ng user mga nettuts.

Ito ay katulad ng kondisyon ng IF. Ang WHERE ay nagpapahintulot sa iyo na magtakda ng kundisyon sa isang query at makuha ang ninanais na resulta.

Ang kundisyon ng pagkakapantay-pantay ay gumagamit ng isang solong tanda (=) sa halip na ang double sign (==) na maaari mong gamitin sa programming.

Maaari mo ring gamitin ang iba pang mga kundisyon:

AT at O ay ginagamit upang pagsamahin ang mga kondisyon:

Tandaan na ang mga numerong halaga ay hindi kailangang ilakip sa mga panipi.

SA()

Ginagamit para sa paghahambing sa maramihang mga halaga.

GAYA NG

Binibigyang-daan kang magtakda ng pattern ng paghahanap.

Ang percent sign (%) ay ginagamit upang tukuyin ang isang pattern.

ORDER BY kondisyon

Gamitin ang kundisyong ito kung gusto mong maibalik ang resulta na pinagsunod-sunod:

Ang default na order ay ASC(Paakyat). Idagdag DESC upang ayusin sa reverse order.

LIMIT… OFFSET…

Maaari mong limitahan ang bilang ng mga ibinalik na row.

LIMIT 2 kinukuha ang unang dalawang linya. LIMIT 1 OFFSET 2 tumatagal ng isang linya, pagkatapos ng unang dalawa. LIMIT 2, 1 pareho ang ibig sabihin, ang unang numero lang ang offset, at nililimitahan ng pangalawa ang bilang ng mga row.

I-UPDATE: I-update ang data sa talahanayan

Ginagamit ang query na ito upang i-update ang data sa isang talahanayan.

Sa karamihan ng mga kaso ginamit kasama ng SAAN para i-update ang mga partikular na row. Kung kundisyon SAAN hindi nakatakda, ang mga pagbabago ay ilalapat sa lahat ng mga hilera.

Upang paghigpitan ang mga row na maaaring mabago, maaari mong gamitin LIMIT.

DELETE: Tanggalin ang data mula sa isang talahanayan

Gaya ng , ang query na ito ay kadalasang ginagamit kasabay ng kundisyon SAAN.

TRUNCATE TABLE

Upang alisin ang nilalaman mula sa isang talahanayan, gamitin ang sumusunod na query:

TANGGALIN MULA SA mga user;

Para sa mas mahusay na pagganap, gamitin .

I-reset din ang field counter AUTO_INCREMENT, kaya ang mga bagong idinagdag na row ay magkakaroon ng id na katumbas ng 1. Kapag ginagamit hindi ito mangyayari at patuloy na lalago ang counter.

Pagtakas sa mga halaga ng string at mga espesyal na salita

Mga halaga ng string

Ang ilang mga character ay kailangang i-escape, kung hindi, maaaring may mga problema.

Ang backslash (\) ay ginagamit para sa pagtakas.

Napakahalaga nito para sa mga kadahilanang pangseguridad. Ang anumang data ng user ay dapat na i-escape bago isulat sa database. V PHP gamitin ang mysql_real_escape_string() function o mga inihandang query.

Mga espesyal na salita

Dahil sa MySQL maraming nakalaan na salita tulad ng PUMILI o , upang maiwasan ang mga kontradiksyon, ilakip ang mga pangalan ng hanay at talahanayan sa mga panipi. At kailangan mong gumamit ng hindi ordinaryong mga panipi, ngunit mga backtick (`).

Sabihin nating sa ilang kadahilanan ay gusto mong magdagdag ng column na tinatawag :

Konklusyon

Salamat sa pagbabasa ng artikulo. Sana naipakita ko sa iyo ang wikang iyon SQL napaka-functional at madaling matutunan.