Эхлэгчдэд зориулсан SQL-ийн бие даан суралцах зурагтай гарын авлага. Ангиллын архивууд: SQL дээрх номууд Дамми хүмүүст зориулсан sql програмчлалын хэл

Зохиогчоос:Чамайг цайны сав гэж дууддаг байсан уу? За, үүнийг засах боломжтой! Самовар бүр нэг удаа цайны сав байсан! Эсвэл мэргэжлийн хүн бүр нэг удаа самовар байсан уу? Үгүй ээ, дахин ямар нэг зүйл буруу байна! Ерөнхийдөө MySQL нь эхлэгчдэд зориулагдсан.

Дамми яагаад MySQL хэрэгтэй байна вэ?

Хэрэв та амьдралаа интернеттэй нухацтай холбох гэж байгаа бол "вэб" дэх эхний алхамуудад та энэхүү DBMS-тэй таарах болно. MySQL-г "бүх интернет" мэдээллийн сангийн удирдлагын систем гэж нэрлэж болно. Нэг ч их эсвэл бага ноцтой нөөц үүнгүйгээр хийж чадахгүй, энэ нь хостинг бүрийн админ самбарт байдаг. Хамгийн алдартай CMS, тэр ч байтугай өөрөө хийсэн хөдөлгүүрүүдийг түүний оролцоотойгоор бүтээдэг.

Ерөнхийдөө та энэ платформгүйгээр хийж чадахгүй. Гэхдээ үүнийг судлахын тулд танд бас зөв хандлага, зөв ​​хэрэгсэл, хамгийн чухал нь хүсэл, тэвчээр хэрэгтэй. Танд сүүлийнх нь хангалттай байгаа гэж найдаж байна. Таны тархи буцалж, жинхэнэ цайны савнаас уур гарч ирэхэд бэлэн байгаарай.

Гэхдээ буруу сурч эхэлбэл MySQL нь дамми хүмүүст маш хэцүү байдаг. Бид ийм алдаа гаргахгүй бөгөөд бид энэ технологитой танилцах ажлыг эхнээс нь эхлүүлэх болно.

Үндсэн ойлголтууд

Эхлээд энэ нийтлэлд дурдах үндсэн ойлголтуудыг авч үзье.

Өгөгдлийн сан (МБ) нь DBMS-ийн үндсэн бүрэлдэхүүн хэсэг юм. Өгөгдлийн сан нь багана, бүртгэлээс (мөр) бүрдэх хүснэгтүүдийг агуулдаг. Уулзвар дээр үүссэн нүднүүд нь тодорхой төрлийн бүтэцтэй өгөгдлийг агуулдаг.

DBMS (өгөгдлийн сангийн удирдлагын систем) - мэдээллийн баазыг удирдах бүх програм хангамжийн модулиудын багц.

SQL нь бүтэцлэгдсэн асуулгын хэл бөгөөд түүний тусламжтайгаар хөгжүүлэгч нь DBMS-ийн цөм (сервер)-тэй "харилцдаг". Аливаа програмчлалын хэлний нэгэн адил SQL өөрийн гэсэн синтакс, команд, операторын багц, дэмжигдсэн өгөгдлийн төрлүүдтэй.

Бидэнд онолын мэдлэг хангалттай байгаа гэж бодож байна. Бид онолын дутуу дутууг дадлагаар “будаг”. Одоо зөвхөн зөв програм хангамжийг сонгох л үлдлээ.

Зөв хэрэгслийг хайж олох

Эхлэгчдэд зориулсан MySQL бүрхүүлийн бүх хүрээг "хэрэгсэнийхээ дараа" би эдгээр нь огт байхгүй гэдгийг ойлгосон. DBMS-ийн удирдлагын бүх програм хангамжийн бүтээгдэхүүнүүд нь аль хэдийн суулгасан мэдээллийн сангийн серверийг шаарддаг. Ерөнхийдөө би "скутер" -ийг дахин зохион бүтээхгүй байхаар дахин шийдэж, дотоодын Денвер багцыг сонгосон. Та үүнийг албан ёсны вэбсайтаас татаж авах боломжтой.

Энэ нь DBMS-ийн бүх бүрэлдэхүүн хэсгүүдийг аль хэдийн багтаасан бөгөөд эхлэгчдэд энгийн бөгөөд ойлгомжтой суулгацын дараа шууд MySQL-тэй практик танилцаж эхлэх боломжийг олгодог. Нэмж дурдахад Denwer нь шинэхэн хөгжүүлэгчдэд шаардлагатай хэд хэдэн хэрэгслийг агуулдаг: локал сервер, PHP.

Эхний алхамууд

Тэнд бүх зүйл автоматаар явагддаг тул би "ноёд" багцыг суулгах процессыг тайлбарлахгүй. Суулгалтыг эхлүүлсний дараа шаардлагатай товчлууруудыг дарахад л хангалттай. MySQL-ийн хуурамч хувилбарт танд хэрэгтэй зүйл.

Суулгах процесс дуусахад локал серверийг эхлүүлээд хэдэн секунд хүлээнэ үү. Үүний дараа хөтөчийнхөө хаягийн мөрөнд localhost гэж бичнэ үү.

Хуудас дээр "Уррай, энэ ажиллаж байна!" зураг дээрх холбоосуудын аль нэгийг дагана уу. Дараа нь таныг мэдээллийн сангийн удирдлагын бүрхүүл болох phpMyAdmin руу аваачна.

http://downloads.mysql.com/docs/world.sql.zip холбоос дээр дарснаар та албан ёсны MySQL вэб сайтаас тестийн мэдээллийн санг татаж авах болно. Дахин phpMyAdmin руу очоод дээд хэсэгт байрлах үндсэн цэсний "Импорт" таб руу очно уу. Эхний хэсгийн "Одоогоор импортлох" цонхонд ("Импортлох файл") "Компьютерээ үзэх" утгыг тохируулна уу.

Explorer цонхноос татаж авсан мэдээллийн сан бүхий архивыг сонгоно уу. Үндсэн цонхны доод талд байгаа "Ok" дээр дарахаа бүү мартаарай.

Заасан параметрийн утгыг одоохондоо өөрчлөхгүй байхыг би танд зөвлөж байна. Энэ нь импортын эх сурвалжийн өгөгдлийг буруу харуулахад хүргэж болзошгүй юм. Хэрэв phpMyAdmin өгөгдлийн сангийн шахалтын алгоритмыг таньж чадахгүй алдаа гаргавал түүнийг задлаад импортын процессыг эхнээс нь бүхэлд нь давтана уу.

Хэрэв бүх зүйл сайн болсон бол импорт амжилттай болсон тухай програмын мессеж дээд талд гарч ирэх бөгөөд DB жагсаалтын зүүн талд өөр нэг (үг) байна.

Юутай тулгарах талаар илүү тодорхой төсөөлөхийн тулд түүний бүтцийг дотроос нь харцгаая.

Эхлэгчдэд зориулсан MySQL мэдээллийн сангийн нэр дээр дарна уу. Түүний доороос бүрдэх хүснэгтүүдийн жагсаалт гарч ирнэ. Тэдгээрийн нэг дээр дарна уу. Дараа нь "Бүтэц" цэсийн дээд хэсэгт очно уу. Үндсэн ажлын талбар нь хүснэгтийн бүтцийг харуулдаг: бүх баганын нэр, өгөгдлийн төрөл, бүх шинж чанарууд.

Энэхүү заавар нь SQL хэлний (DDL, DML) "миний санах ойн тамга" гэх мэт зүйл юм. Энэ бол миний мэргэжлийн үйл ажиллагааны явцад хуримтлагдсан мэдээлэл бөгөөд миний толгойд байнга хадгалагддаг. Энэ бол миний хувьд хангалттай доод хэмжээ бөгөөд үүнийг мэдээллийн сантай ажиллахад ихэвчлэн ашигладаг. Хэрэв илүү бүрэн гүйцэд SQL бүтцийг ашиглах шаардлагатай бол би ихэвчлэн Интернетэд байрлах MSDN номын сан руу ханддаг. Миний бодлоор бүх зүйлийг толгойдоо байлгах нь маш хэцүү бөгөөд үүнд онцгой шаардлага байхгүй. Гэхдээ үндсэн бүтээн байгуулалтыг мэдэх нь маш хэрэгтэй, учир нь Эдгээрийг Oracle, MySQL, Firebird зэрэг олон харилцааны мэдээллийн санд бараг ижил хэлбэрээр ашиглах боломжтой. Ялгаа нь үндсэндээ өгөгдлийн төрлүүдэд байдаг бөгөөд тэдгээр нь нарийвчилсан байдлаар ялгаатай байж болно. SQL хэлний үндсэн бүтэц тийм ч олон байдаггүй бөгөөд байнгын дасгал хийснээр тэдгээрийг хурдан санах болно. Жишээлбэл, объект (хүснэгт, хязгаарлалт, индекс гэх мэт) үүсгэхийн тулд өгөгдлийн сантай ажиллах орчны текст засварлагч (IDE) байхад хангалттай бөгөөд тусгайлсан харааны хэрэгслийг судлах шаардлагагүй болно. тодорхой төрлийн мэдээллийн сантай ажиллах (MS SQL, Oracle, MySQL, Firebird, ...). Энэ нь бас тохиромжтой, учир нь бүх текст таны нүдэн дээр байх бөгөөд жишээ нь индекс эсвэл хязгаарлалт үүсгэхийн тулд олон тооны цонхоор гүйх шаардлагагүй. Өгөгдлийн сантай тогтмол ажилласнаар скрипт ашиглан объект үүсгэх, өөрчлөх, ялангуяа дахин үүсгэх нь визуал горимд хийснээс хэд дахин хурдан байдаг. Мөн скрипт горимд (зохицуулалтын дагуу) объектыг нэрлэх дүрмийг тохируулах, хянах нь илүү хялбар байдаг (миний субъектив үзэл бодол). Нэмж дурдахад скриптийг нэг мэдээллийн санд хийсэн өөрчлөлтийг (жишээлбэл, туршилтын) өөр (бүтээмжтэй) мэдээллийн сан руу ижил хэлбэрээр шилжүүлэх шаардлагатай үед ашиглахад тохиромжтой.

SQL хэл нь хэд хэдэн хэсэгт хуваагддаг бөгөөд энд би түүний хамгийн чухал 2 хэсгийг авч үзэх болно.
  • DML - Дараах бүтцийг агуулсан өгөгдөл боловсруулах хэл:
    • SELECT - өгөгдөл сонгох
    • INSERT - шинэ өгөгдөл оруулах
    • UPDATE - өгөгдлийн шинэчлэл
    • DELETE - өгөгдлийг устгах
    • MERGE - өгөгдлийг нэгтгэх
Учир нь Би дадлагажигч хүн, энэ зааварт тийм бага онол байх болно, бүх бүтээн байгуулалтыг практик жишээн дээр тайлбарлах болно. Нэмж дурдахад, програмчлалын хэлийг, ялангуяа SQL-ийг зөвхөн өөрөө мэдэрч, энэ эсвэл тэр бүтээн байгуулалтыг гүйцэтгэхэд юу тохиолдохыг ойлгосноор практикт эзэмшинэ гэдэгт би итгэдэг.

Энэхүү заавар нь Алхам алхмаар зарчим, i.e. Үүнийг жишээнүүдийн дагуу дараалан унших хэрэгтэй. Гэхдээ хэрэв та тушаалын талаар илүү дэлгэрэнгүй мэдээлэл авах шаардлагатай бол интернетээс, жишээлбэл, MSDN номын сангаас тодорхой хайлтыг ашиглана уу.

Энэхүү хичээлийг бичихдээ миний MS SQL Server Management Studio (SSMS) ашигласан скриптүүдийг ажиллуулахын тулд MS SQL Server мэдээллийн сангийн 2014 хувилбарыг ашигласан.

MS SQL Server Management Studio (SSMS)-ийн талаар товчхон

SQL Server Management Studio (SSMS) нь Microsoft SQL Server-д зориулсан мэдээллийн баазын бүрэлдэхүүн хэсгүүдийг тохируулах, удирдах, удирдах зориулалттай хэрэгсэл юм. Энэхүү хэрэгсэл нь скрипт засварлагч (бид үүнийг голчлон ашиглах болно) болон серверийн объект, тохиргоотой ажилладаг график програмыг агуулдаг. SQL Server Management Studio-ийн гол хэрэгсэл нь Object Explorer бөгөөд серверийн объектуудыг харах, сэргээх, удирдах боломжийг хэрэглэгчдэд олгодог. Энэ текстийг Википедиагаас хэсэгчлэн авсан болно.

Шинэ скрипт засварлагч үүсгэхийн тулд "Шинэ асуулга" товчийг ашиглана уу:

Одоогийн мэдээллийн санг өөрчлөхийн тулд та унадаг жагсаалтыг ашиглаж болно:

Тодорхой командыг (эсвэл бүлэг командуудыг) гүйцэтгэхийн тулд түүнийг сонгоод Execute товч эсвэл F5 товчийг дарна уу. Одоогийн байдлаар засварлагч дээр зөвхөн нэг команд байгаа эсвэл та бүх командыг гүйцэтгэх шаардлагатай бол юу ч сонгох шаардлагагүй.

Скриптүүдийг ажиллуулсны дараа, ялангуяа объект (хүснэгт, багана, индекс) үүсгэж байгаа өөрчлөлтүүдийг харахын тулд контекст цэснээс тохирох бүлгийг (жишээ нь, Хүснэгтүүд), хүснэгтийн өөрөө эсвэл баганын бүлгийг сонгон шинэчлэлтийг ашиглана уу.

Үнэн хэрэгтээ энд өгсөн жишээнүүдийг хэрэгжүүлэхийн тулд бидний мэдэх ёстой зүйл бол энэ юм. SSMS-ийн бусад хэрэгслийг бие даан сурахад хялбар байдаг.

Жаахан онол

Relational өгөгдлийн сан (RDB, эсвэл цаашилбал зүгээр л мэдээллийн сангийн хүрээнд) нь хоорондоо холбогдсон хүснэгтүүдийн цуглуулга юм. Товчоор хэлбэл, мэдээллийн сан нь бүтэцлэгдсэн хэлбэрээр хадгалагддаг файл юм.

DBMS - Эдгээр мэдээллийн сангийн удирдлагын систем, i.e. Энэ нь тодорхой төрлийн мэдээллийн сантай (MS SQL, Oracle, MySQL, Firebird, ...) ажиллах хэрэгслүүдийн багц юм.

Анхаарна уу
Учир нь Амьдралд, ярианы ярианд бид ихэвчлэн: "Oracle DB", эсвэл зүгээр л "Oracle" гэж хэлдэг бөгөөд энэ нь үнэндээ "Oracle DBMS" гэсэн утгатай бөгөөд энэ зааварчилгааны хүрээнд заримдаа DB гэсэн нэр томъёог ашиглах болно. Контекстээс харвал юуны тухай болох нь тодорхой болно гэж бодож байна.

Хүснэгт нь баганын цуглуулга юм. Багануудыг талбар эсвэл багана гэж нэрлэж болно, эдгээр бүх үгсийг ижил зүйлийг илэрхийлэхийн тулд ижил утгатай ашиглах болно.

Хүснэгт нь RDB-ийн гол объект бөгөөд бүх RDB өгөгдлийг хүснэгтийн баганад мөр мөрөөр хадгалдаг. Мөр, бичлэгүүд нь мөн ижил утгатай.

Хүснэгт тус бүр болон түүний баганад нэрсийг өгсөн бөгөөд тэдгээрт дараа нь хандах боломжтой.
MS SQL дээрх объектын нэр (хүснэгтийн нэр, баганын нэр, индексийн нэр гэх мэт) хамгийн ихдээ 128 тэмдэгттэй байж болно.

Лавлах зорилгоор- ORACLE мэдээллийн санд объектын нэр хамгийн ихдээ 30 тэмдэгттэй байж болно. Тиймээс, тодорхой мэдээллийн сангийн хувьд тэмдэгтийн тоог хязгаарлахын тулд объектыг нэрлэх өөрийн дүрмийг боловсруулах хэрэгтэй.

SQL нь DBMS ашиглан өгөгдлийн санд асуулга явуулах боломжийг олгодог хэл юм. Тодорхой DBMS-д SQL хэл нь тодорхой хэрэгжилттэй байж болно (өөрийн аялгуу).

DDL болон DML нь SQL хэлний дэд хэсэг юм:

  • DDL хэл нь өгөгдлийн сангийн бүтцийг бий болгох, өөрчлөхөд ашиглагддаг, i.e. хүснэгт, холбоос үүсгэх / өөрчлөх / устгах.
  • DML хэл нь хүснэгтийн өгөгдлийг удирдах боломжийг олгодог, i.e. түүний мөрүүдтэй. Энэ нь хүснэгтээс өгөгдлийг сонгох, хүснэгтэд шинэ өгөгдөл нэмэх, байгаа өгөгдлийг шинэчлэх, устгах боломжийг олгодог.

SQL-д ашиглах боломжтой 2 төрлийн тайлбар байдаг (нэг мөр ба олон мөр):

Нэг мөр тайлбар
болон

/ * олон мөрт тайлбар * /

Үнэндээ энэ нь онолын хувьд хангалттай байх болно.

DDL - Өгөгдөл тодорхойлох хэл

Жишээлбэл, програмист биш хүмүүст зориулсан ердийн хэлбэрээр ажилчдын талаарх мэдээлэл бүхий хүснэгтийг авч үзье.

Энэ тохиолдолд хүснэгтийн баганууд дараах нэртэй байна: Ажилтны дугаар, овог нэр, төрсөн он, сар, өдөр, цахим шуудан, албан тушаал, хэлтэс.

Эдгээр багана бүрийг дараах өгөгдлийн төрлөөр тодорхойлж болно.

  • Ажилтны тоо - бүхэл тоо
  • Бүтэн нэр - мөр
  • Төрсөн огноо - огноо
  • И-мэйл - мөр
  • Байршил - мөр
  • хэлтэс - мөр
Баганын төрөл нь тухайн баганад ямар төрлийн өгөгдөл хадгалах боломжтойг харуулсан шинж чанар юм.

Эхлэхийн тулд MS SQL-д ашигладаг дараах үндсэн өгөгдлийн төрлүүдийг санахад л хангалттай.

Утга MS SQL тэмдэглэгээ Тодорхойлолт
Хувьсах урттай мөр varchar (N)
болон
nvarchar (N)
N тоогоор бид харгалзах баганын хамгийн их боломжтой мөрийн уртыг зааж өгч болно. Жишээлбэл, хэрэв бид "нэр" баганын утга дээд тал нь 30 тэмдэгт агуулж болно гэж хэлэхийг хүсвэл nvarchar (30) төрөлд тохируулах хэрэгтэй.
Varchar болон nvarchar хоёрын ялгаа нь varchar нь мөрүүдийг ASCII форматаар хадгалдаг бөгөөд нэг тэмдэгт нь 1 байт байдаг бол nvarchar нь тэмдэгт бүр нь 2 байт байх Юникод форматаар мөрүүдийг хадгалдаг.
Энэ талбарт Юникод тэмдэгт хадгалах шаардлагагүй гэдэгт 100% итгэлтэй байгаа тохиолдолд л varchar төрлийг ашиглах ёстой. Жишээлбэл, varchar нь имэйл хаягийг хадгалахад ашиглагдаж болно, учир нь Тэд ихэвчлэн зөвхөн ASCII тэмдэгтүүдийг агуулдаг.
Тогтмол урттай утас тэмдэгт (N)
болон
nchar (N)
Энэ төрөл нь хувьсах урттай мөрөөс ялгаатай нь хэрэв мөр нь N тэмдэгтээс бага байвал түүнийг үргэлж баруун талд N тэмдэгт хүртэл зайгаар дүүргэж, мэдээллийн санд энэ хэлбэрээр хадгалдаг, өөрөөр хэлбэл. энэ нь мэдээллийн санд яг N тэмдэгт эзэлдэг (нэг тэмдэгт нь char-д 1 байт, nchar-д 2 байт байдаг). Миний практикт энэ төрлийг маш ховор ашигладаг бөгөөд хэрвээ үүнийг ашигладаг бол ихэвчлэн char (1) форматаар ашигладаг, i.e. талбарыг нэг тэмдэгтээр тодорхойлсон үед.
Бүхэл тоо int Энэ төрөл нь эерэг ба сөрөг аль алиныг нь баганад зөвхөн бүхэл тоог ашиглах боломжийг олгодог. Лавлагааны хувьд (одоо энэ нь бидний хувьд тийм ч чухал биш юм) - int төрлийн зөвшөөрөгдсөн тооны хүрээ нь -2 147 483 648-аас 2 147 483 647 хүртэл байдаг. Ихэвчлэн энэ нь танигчийг тохируулахад хэрэглэгддэг үндсэн төрөл юм.
Бодит эсвэл бодит тоо хөвөх Энгийнээр хэлбэл, эдгээр нь аравтын бутархай (таслал) байж болох тоонууд юм.
огноо огноо Хэрэв та Тоо, Сар, Жил гэсэн гурван бүрэлдэхүүн хэсгээс бүрдэх баганад зөвхөн огноог хадгалах шаардлагатай бол. Жишээлбэл, 2014 оны 02-р сарын 15-ны өдөр (2014 оны 2-р сарын 15). Энэ төрлийг "Элсэлтийн огноо", "Төрсөн он сар өдөр" гэх мэт баганад ашиглаж болно. Зөвхөн огноог засах нь бидний хувьд чухал эсвэл цаг хугацааны бүрэлдэхүүн хэсэг нь бидний хувьд чухал биш бөгөөд үүнийг хаях боломжтой эсвэл тодорхойгүй тохиолдолд.
Цаг хугацаа цаг Зөвхөн цаг хугацааны өгөгдлийг баганад хадгалах шаардлагатай бол энэ төрлийг ашиглаж болно, i.e. Цаг, минут, секунд, миллисекунд. Жишээлбэл, 17:38: 31.3231603
Жишээлбэл, өдөр бүр "Нислэгийн явах цаг".
огноо, цаг он сар өдөр цаг Энэ төрөл нь огноо, цагийг нэгэн зэрэг хадгалах боломжийг олгодог. Жишээлбэл, 2014.02.15 17:38: 31.323
Жишээлбэл, энэ нь үйл явдлын огноо, цаг байж болно.
туг жаахан Энэ төрөл нь "Тийм" / "Үгүй" гэх мэт утгуудыг хадгалахад тохиромжтой бөгөөд "Тийм" нь 1, "Үгүй" нь 0 гэж хадгалагдана.

Мөн талбайн утгыг, хэрэв хориглоогүй бол зааж өгөхгүй байж болох бөгөөд энэ зорилгоор NULL түлхүүр үгийг ашиглана.

Жишээнүүдийг ажиллуулахын тулд Test хэмээх тестийн бааз үүсгэцгээе.

Дараах тушаалыг ажиллуулснаар энгийн мэдээллийн санг (нэмэлт параметрүүдийг заагаагүй) үүсгэж болно.

ӨГӨГДЛИЙН САН БҮТЭЭХ Тест
Та тушаалаар мэдээллийн санг устгаж болно (та энэ тушаалыг маш болгоомжтой хийх хэрэгтэй):

DROP DATABASE тест
Манай мэдээллийн сан руу шилжихийн тулд та дараах тушаалыг ажиллуулж болно.

Туршилтыг ашиглах
Эсвэл SSMS цэсний унадаг жагсаалтаас Test мэдээллийн санг сонгоно уу. Ажиллаж байхдаа би суурь хооронд шилжих энэ аргыг ихэвчлэн ашигладаг.

Одоо бид мэдээллийн сандаа хоосон зай, кирилл үсэг ашиглан тайлбарыг байгаагаар нь ашиглан хүснэгт үүсгэж болно.

ХҮСНЭГТ ҮЗҮҮЛЭХ [Ажилчид] ([Ажилчдын дугаар] int, [Бүтэн нэр] nvarchar (30), [Төрсөн он сар өдөр], nvarchar (30), [Албан тушаал] nvarchar (30), [Хэлтэс] nvarchar (30))
Энэ тохиолдолд бид нэрийг дөрвөлжин хаалтанд оруулах ёстой [...].

Гэхдээ мэдээллийн санд илүү тохиромжтой байхын тулд объектын бүх нэрийг латин цагаан толгойн үсгээр зааж өгөх нь дээр бөгөөд нэрэнд хоосон зай ашиглахгүй байх нь дээр. MS SQL-д ихэвчлэн энэ тохиолдолд үг бүр том үсгээр эхэлдэг, жишээлбэл, "Боловсон хүчний дугаар" талбарт бид PersonnelNumber нэрийг тохируулж болно. Та мөн нэрэнд тоо ашиглаж болно, жишээлбэл, Утасны дугаар1.

Тэмдэглэл дээр
Зарим DBMS-д "PHONE_NUMBER" гэсэн дараах нэрлэх хэлбэрийг илүүд үзэж болно, жишээлбэл, энэ форматыг ORACLE DB-д ихэвчлэн ашигладаг. Мэдээжийн хэрэг, талбарын нэрийг зааж өгөхдөө DBMS-д ашигласан түлхүүр үгстэй давхцахгүй байх нь зүйтэй юм.

Ийм учраас та дөрвөлжин хаалтны синтаксийг мартаж, [Ажилтнууд] хүснэгтийг устгаж болно:

УНАХ ХҮСНЭГТ [Ажилчид]
Жишээлбэл, ажилчидтай хүснэгтийг "Ажилчид" гэж нэрлэж болох бөгөөд түүний талбаруудыг дараах байдлаар нэрлэж болно.

  • ID - Ажилтны дугаар (Ажилтны ID)
  • Нэр - бүтэн нэр
  • Төрсөн өдөр - Төрсөн огноо
  • Имэйл - И-мэйл
  • Албан тушаал - Байршил
  • хэлтэс - хэлтэс
Ихэнхдээ ID гэдэг үгийг таних талбарыг нэрлэхэд ашигладаг.

Одоо хүснэгтээ үүсгэцгээе:

ХҮСНЭГТ ҮЗҮҮЛЭХ Ажилтнууд (ID int, Нэр nvarchar (30), Төрсөн өдөр, Имэйл nvarchar (30), Албан тушаал nvarchar (30), хэлтэс nvarchar (30))
Шаардлагатай баганыг зааж өгөхийн тулд NOT NULL сонголтыг ашиглаж болно.

Одоо байгаа хүснэгтийн хувьд талбаруудыг дараах тушаалуудыг ашиглан дахин тодорхойлж болно.

ID талбарыг шинэчлэх ALTER TABLE Ажилчдын ALTER COLUMN ID int NOT NULL - Нэрийн талбарыг шинэчлэх ALTER TABLE Ажилчдын ALTER COLUMN Нэр nvarchar (30) NULL NOT NULL

Тэмдэглэл дээр
Ихэнх DBMS-ийн SQL хэлний ерөнхий ойлголт ижил хэвээр байна (наад зах нь би үүнийг хамтран ажиллаж байсан DBMS-ээр нь дүгнэж болно). Төрөл бүрийн DBMS-ийн DDL-ийн ялгаа нь үндсэндээ өгөгдлийн төрлөөс хамаардаг (энд зөвхөн тэдгээрийн нэр өөр өөр байж болно, гэхдээ тэдгээрийн хэрэгжилтийн нарийвчилсан мэдээлэл), SQL хэлний хэрэгжилтийн онцлог нь мөн бага зэрэг ялгаатай байж болно (өөрөөр хэлбэл, өгөгдлийн мөн чанар). тушаалууд нь адилхан, гэхдээ аялгуунд бага зэрэг ялгаатай байж магадгүй, гэхдээ нэг стандарт байдаггүй). SQL-ийн үндсийг мэдсэнээр та нэг DBMS-ээс нөгөөд амархан шилжих боломжтой, учир нь Энэ тохиолдолд та зөвхөн шинэ DBMS дахь тушаалуудын хэрэгжилтийн нарийн ширийн зүйлийг ойлгох хэрэгтэй, i.e. ихэнх тохиолдолд энгийн зүйрлэл хангалттай.

Хүснэгт үүсгэх CREATE TABLE Ажилчид (ID int, - ORACLE-д, int төрөл нь (38) дугаартай дүйцэхүйц (боодол) nvarchar2 (30), - ORACLE дахь nvarchar2 нь MS SQL дэх nvarchar-тай тэнцэнэ Төрсөн өдөр, Имэйл nvar02 ), nvarchar2 (30) албан тушаал, nvarchar2 хэлтэс (30)); - ID болон Name талбаруудыг шинэчлэх (энд ALTER COLUMN-ийн оронд MODIFY (...) ашигладаг) ALTER TABLE Employees MODIFY (ID int NOT NULL, Name nvarchar2 (30) NOT NULL); - PK нэмэх (энэ тохиолдолд бүтэц нь MS SQL-д байгаа шиг харагдах бөгөөд доор харуулагдах болно) ALTER TABLE Ажилчдын НЭМЭГДСЭН ХЯЗГААР PK_Amployees PRIMARY KEY (ID);
ORACLE-ийн хувьд varchar2 төрлийн хэрэгжилтийн хувьд ялгаатай байдаг бөгөөд түүний кодчилол нь өгөгдлийн сангийн тохиргооноос хамаардаг бөгөөд текстийг жишээлбэл, UTF-8 кодчилолд хадгалах боломжтой. Нэмж дурдахад, ORACLE дахь талбарын уртыг байт болон тэмдэгтээр тохируулж болох бөгөөд үүнд талбарын уртын дараа заасан BYTE болон CHAR нэмэлт сонголтуудыг ашигладаг, жишээлбэл:

NAME varchar2 (30 BYTE) - талбарын багтаамж 30 байт байх болно NAME varchar2 (30 CHAR) - талбарын багтаамж 30 тэмдэгт байх болно
ORACLE-д varchar2 (30) төрлийн энгийн заалт байгаа тохиолдолд BYTE эсвэл CHAR-ийн аль сонголтыг ашиглах нь өгөгдлийн сангийн тохиргооноос хамаарна, заримдаа үүнийг IDE тохиргоонд тохируулж болно. Ерөнхийдөө заримдаа та амархан төөрөлдөж болно, тиймээс ORACLE-ийн хувьд varchar2 төрлийг ашигладаг бол (мөн үүнийг заримдаа энд зөвтгөдөг, жишээлбэл, UTF-8 кодчилолыг ашиглах үед) би CHAR ( гэж тодорхой бичихийг илүүд үздэг. Учир нь мөрийн уртыг тэмдэгтээр унших нь ихэвчлэн илүү тохиромжтой байдаг.

Гэхдээ энэ тохиолдолд хүснэгтэд аль хэдийн зарим өгөгдөл байгаа бол тушаалуудыг амжилттай гүйцэтгэхийн тулд хүснэгтийн бүх мөрөнд ID болон Name талбаруудыг бөглөх шаардлагатай. Үүнийг жишээгээр харуулъя, ID, албан тушаал, хэлтэс талбарт өгөгдлийг хүснэгтэд оруулна уу, үүнийг дараах скриптээр хийж болно.

INSERT ажилчид (ID, албан тушаал, хэлтэс) ​​ҮНЭ ЦЭНЭ (1000, N "Захирал", N "Захиргаа"), (1001, N "Программист", N "IT"), (1002, N "Нягтлан бодогч", N "Нягтлан бодох бүртгэл" ), (1003, N "Ахлах програмист", N "IT")
Энэ тохиолдолд INSERT команд нь алдаа гаргах болно, учир нь оруулах үед бид шаардлагатай Нэрийн талбарын утгыг зааж өгөөгүй.
Хэрэв бид анхны хүснэгтэд энэ өгөгдөлтэй байсан бол "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" команд амжилттай дуусч, "ALTER TABLE Employee ALTER COLUMN Name int NOT NULL" гэсэн тушаал нь алдааны мессеж үүсгэх байсан. , Нэрийн талбарт NULL (тодорхойгүй) утгууд байгаа.

Нэрийн талбарт утгыг нэмж, өгөгдлийг дахин бөглөнө үү:


Мөн шинэ хүснэгт үүсгэх үед NOT NULL сонголтыг шууд ашиглаж болно, i.e. CREATE TABLE командын хүрээнд.

Эхлээд дараах тушаалыг ашиглан хүснэгтийг устгая.

DROP TABLE Ажилчид
Одоо ID болон Name гэсэн заавал багана бүхий хүснэгт үүсгэцгээе:

ХҮСНЭГТ ҮЗҮҮЛЭХ Ажилтнууд (ID int NOT NULL, Нэр nvarchar (30) NULL БИШ, Төрсөн өдөр, Имэйл nvarchar (30), Албан тушаал nvarchar (30), хэлтэс nvarchar (30))
Та мөн баганын нэрний ард NULL гэж бичиж болно, энэ нь NULL утгыг (заавал заагаагүй) зөвшөөрнө гэсэн үг боловч энэ шинж чанарыг анхдагчаар тооцдог тул энэ шаардлагагүй.

Хэрэв эсрэгээр, одоо байгаа баганыг бөглөх нэмэлт болгох шаардлагатай бол бид дараах тушаалын синтаксийг ашиглана.

ALTER TABLE Ажилчид ALTER COLUMN Нэр nvarchar (30) NULL
Эсвэл зүгээр л:

ALTER TABLE Ажилчид ALTER COLUMN Нэр nvarchar (30)
Мөн энэ командын тусламжтайгаар бид талбарын төрлийг өөр тохирох төрөл болгон өөрчлөх эсвэл уртыг нь өөрчлөх боломжтой. Жишээлбэл, Нэр талбарыг 50 тэмдэгт болгон өргөжүүлье:

ALTER TABLE Ажилчид ALTER COLUMN Нэр nvarchar (50)

Үндсэн түлхүүр

Хүснэгтийг үүсгэхдээ мөр бүрт өвөрмөц багана эсвэл баганын багцтай байх нь зүйтэй - бичлэгийг энэхүү өвөрмөц утгаараа өвөрмөц байдлаар тодорхойлж болно. Энэ утгыг хүснэгтийн үндсэн түлхүүр гэж нэрлэдэг. Манай Ажилчдын хүснэгтийн хувьд ийм өвөрмөц утга нь ID багана байж болно (энэ нь "Ажилтны ажилтны дугаар" -ыг агуулдаг - манай тохиолдолд энэ утга нь ажилтан бүрийн хувьд өвөрмөц бөгөөд давтагдах боломжгүй байсан ч гэсэн).

Та одоо байгаа хүснэгтийн үндсэн түлхүүрийг дараах тушаалыг ашиглан үүсгэж болно.

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид НЭМЭГДСЭН ХЯЗГААР PK_Ажилтнуудын АНХДАГЧ ТҮЛХҮҮР (ID)
Энд "PK_Amployees" нь үндсэн түлхүүрийг хариуцах хязгаарлалтын нэр юм. Ихэвчлэн "PK_" угтварыг үндсэн түлхүүр, дараа нь хүснэгтийн нэрийг нэрлэхэд ашигладаг.

Хэрэв үндсэн түлхүүр нь хэд хэдэн талбараас бүрдэх бол эдгээр талбаруудыг хаалтанд таслалаар тусгаарласан байх ёстой.

ALTER TABLE хүснэгтийн нэр НЭМЭХ Хязгаарлалт_нэр АНХДАГЧ ТҮЛХҮҮР (талбар1, талбар2, ...)
MS SQL-д үндсэн түлхүүрт орсон бүх талбарууд NULL БИШ БАЙХ ёстой гэдгийг тэмдэглэх нь зүйтэй.

Мөн хүснэгтийг үүсгэх үед үндсэн түлхүүрийг шууд тодорхойлж болно, i.e. CREATE TABLE командын хүрээнд. Хүснэгтийг устгацгаая:

DROP TABLE Ажилчид
Дараа нь дараах синтаксийг ашиглан үүнийг үүсгэцгээе:

CREATE TABLE Ажилтнууд (ID int NOT NULL, Нэр nvarchar (30) NOT NULL, Төрсөн өдөр, Имэйл nvarchar (30), Байршил nvarchar (30), хэлтэс nvarchar (30), CONSTRAINT PK_Ажилтан PRIMARY KEY (IDK) дараа нь тайлбарлах - талбаруудыг хязгаарлалт болгон)
Үүсгэсэний дараа өгөгдлийг хүснэгтэд бөглөнө үү:

INSERT ажилчид (ID, албан тушаал, хэлтэс, нэр) ҮНЭ ЦЭНЭ (1000, N "Захирал", N "Захиргаа", N "Иванов И.И."), (1001, N "Программист", N "IT", N " Петров PP " ), (1002, Н" Нягтлан бодогч ", Н" Нягтлан бодох бүртгэл ", Н" Сидоров SS "), (1003, Н" Ахлах програмист ", Н" МТ ", Н" Андреев А. А.")
Хэрэв хүснэгтийн үндсэн түлхүүр нь зөвхөн нэг баганын утгуудаас бүрдэх бол дараах синтаксийг ашиглаж болно.

CREATE TABLE Ажилтнууд (ID int NOT NULL CONSTRAINT PK_Amployees PRIMARY KEY, - талбарын шинж чанараар зааж өгнө Нэр nvarchar (30) NULL БИШ, Төрсөн өдөр, Имэйл nvarchar (30), Байршил nvarchar (30), хэлтэс nvarchar (30)
Үнэн хэрэгтээ, хязгаарлалтын нэрийг орхигдуулж болох бөгөөд энэ тохиолдолд түүнд системийн нэр өгөх болно ("PK__Ажилтан__3214EC278DA42077" гэх мэт):

ХҮСНЭГТ ҮЗҮҮЛЭХ Ажилтнууд (ID int NOT NULL, Нэр nvarchar (30) NO NULL, Төрсөн өдөр, Имэйл nvarchar (30), Байршил nvarchar (30), nvarchar (30), АНХДАГЧ ТҮЛХҮҮР (ID))
Эсвэл:

CREATE TABLE Ажилчид (ID int NOT NULL PRIMARY KEY, Нэр nvarchar (30) NOT NULL, Төрсөн өдөр, Имэйл nvarchar (30), Албан тушаал nvarchar (30), хэлтэс nvarchar (30))
Гэхдээ би байнгын хүснэгтүүдийн хязгаарлалтын нэрийг үргэлж тодорхой зааж өгөхийг зөвлөж байна тодорхой заасан бөгөөд ойлгомжтой нэрээр, дараа нь үүнийг удирдахад хялбар байх болно, жишээлбэл, та устгаж болно:

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид PK_Amployees ХЯЗГААРЛАЛТАЙ
Гэхдээ ийм богино синтакс нь хязгаарлалтын нэрийг заагаагүй бол түр зуурын мэдээллийн сангийн хүснэгтийг үүсгэхэд ашиглахад тохиромжтой (түр хүснэгтийн нэр # эсвэл ## тэмдэгтээр эхэлдэг) үүнийг ашигласны дараа устгана.

Дүгнэж хэлье

Одоогоор бид дараах тушаалуудыг авч үзсэн.
  • Хүснэгт үүсгэххүснэгтийн нэр (талбаруудын тоолол, тэдгээрийн төрөл, хязгаарлалт) - одоогийн мэдээллийн санд шинэ хүснэгт үүсгэхэд ашиглагддаг;
  • ХҮСНЭГТИЙГ УНАХ table_name - одоогийн мэдээллийн сангаас хүснэгтийг устгахад үйлчилдэг;
  • ХҮСНЭГТИЙГ ӨӨРЧЛӨХхүснэгтийн нэр ӨӨРЧЛӨЛТ БАГАбаганын_нэр… - баганын төрлийг шинэчлэх эсвэл түүний тохиргоог өөрчлөхөд ашиглагддаг (жишээлбэл, NULL эсвэл NOT NULL шинж чанарыг тодорхойлох);
  • ХҮСНЭГТИЙГ ӨӨРЧЛӨХхүснэгтийн нэр ХЯЗГААРЛАЛ НЭМЭХхязгаарлалтын_нэр АНХАН ТҮЛХҮҮР(талбар1, талбар2, ...) - одоо байгаа хүснэгтэд үндсэн түлхүүр нэмэх;
  • ХҮСНЭГТИЙГ ӨӨРЧЛӨХхүснэгтийн нэр DROP CONSTRAINTхязгаарлалтын_нэр - хүснэгтээс хязгаарлалтыг арилгана.

Түр зуурын ширээний талаар бага зэрэг

MSDN-ээс ишлэл. MS SQL Server дээр хоёр төрлийн түр зуурын хүснэгтүүд байдаг: локал (#) ба глобал (##). Орон нутгийн түр хүснэгтүүд нь анх үүсгэгдсэн даруйдаа SQL Server инстанцын холболт дуусах хүртэл зөвхөн бүтээгчид нь харагдана. Хэрэглэгч SQL Server-ийн жишээнээс салгасны дараа локал түр хүснэгтүүд автоматаар хасагдана. Глобал түр зуурын хүснэгтүүд нь эдгээр хүснэгтийг үүсгэсний дараа холболтын сессийн үед бүх хэрэглэгчдэд харагдах бөгөөд эдгээр хүснэгтийг ашиглаж буй бүх хэрэглэгчид SQL Server инстанцаас салгах үед хасагдана.

Түр зуурын хүснэгтүүдийг tempdb системийн мэдээллийн санд үүсгэсэн, i.e. Тэдгээрийг үүсгэснээр бид үндсэн суурийг хог болгохгүй, эс тэгвээс түр зуурын хүснэгтүүд нь энгийн хүснэгтүүдтэй бүрэн ижил байх тул тэдгээрийг DROP TABLE командыг ашиглан буулгаж болно. Орон нутгийн (#) түр хүснэгтийг илүү өргөн ашигладаг.

Түр зуурын хүснэгт үүсгэхийн тулд та CREATE TABLE командыг ашиглаж болно.

ХҮСНЭГТ ҮЗҮҮЛЭХ #Temp (ID int, Нэр nvarchar (30))
MS SQL дээрх түр зуурын хүснэгт нь ердийн хүснэгттэй төстэй тул та үүнийг DROP TABLE командын тусламжтайгаар өөрөө буулгаж болно.

ХҮСНЭГТ #Темп

Мөн түр зуурын хүснэгтийг (ердийн хүснэгт шиг) үүсгэж, SELECT ... INTO синтакс ашиглан асуулгад буцаасан мэдээллээр нэн даруй дүүргэх боломжтой.

СОНГОХ ID, Нэр INTO #Temp FROM ажилчдын

Тэмдэглэл дээр
Түр зуурын хүснэгтүүдийг хэрэгжүүлэх нь өөр өөр DBMS-д өөр байж болно. Жишээлбэл, ORACLE болон Firebird DBMS дээр түр зуурын хүснэгтүүдийн бүтцийг CREATE GLOBAL TEMPORARY TABLE командын тусламжтайгаар урьдчилан тодорхойлсон байх ёстой бөгөөд үүнд өгөгдөл хадгалах онцлогийг харуулсан бөгөөд хэрэглэгч үүнийг үндсэн хүснэгтүүдээс харж, түүнтэй ажиллах боломжтой болно. ердийн ширээтэй.

Өгөгдлийн санг хэвийн болгох - дэд хүснэгтүүдэд (лавлах ном) хувааж, харилцааг тодорхойлох

Манай одоогийн Ажилчдын хүснэгтэнд Сул тал нь "Албан тушаал" болон "Газар" гэсэн талбарт хэрэглэгч ямар ч текст оруулах боломжтой бөгөөд энэ нь голчлон алдаатай байдаг, учир нь нэг ажилтан "МТ"-ийг хэлтэс гэж зааж өгөх боломжтой, хоёр дахь ажилтан, жишээ нь: "МТ-ийн хэлтэс", гурав дахь "МТ" хэсэгт оруулна уу. Үүний үр дүнд хэрэглэгч юу гэсэн үг нь тодорхойгүй байх болно, өөрөөр хэлбэл. Эдгээр ажилчид нэг хэлтсийн ажилтнууд уу, эсвэл хэрэглэгч өөрийгөө тодорхойлсон бөгөөд эдгээр нь 3 өөр хэлтэс үү? Түүнээс гадна, энэ тохиолдолд бид зарим тайлангийн өгөгдлийг зөв бүлэглэх боломжгүй бөгөөд хэлтэс тус бүрийн хүрээнд ажилчдын тоог харуулах шаардлагатай байж магадгүй юм.

Хоёрдахь сул тал бол энэ мэдээллийн хадгалалтын хэмжээ, түүний давхардал, i.e. ажилтан бүрийн хувьд хэлтсийн бүтэн нэрийг зааж өгсөн бөгөөд энэ нь хэлтсийн нэрнээс тэмдэгт бүрийг хадгалахын тулд мэдээллийн санд зай шаарддаг.

Гурав дахь дутагдал нь албан тушаалын гарчиг өөрчлөгдсөн тохиолдолд, жишээлбэл, "Программист" гэсэн албан тушаалыг "Бага програмист" болгон өөрчлөх шаардлагатай бол эдгээр талбаруудыг шинэчлэхэд төвөгтэй байдаг. Энэ тохиолдолд бид "Программист" гэсэн байрлалтай тэнцүү байгаа хүснэгтийн мөр бүрт өөрчлөлт оруулах шаардлагатай болно.

Эдгээр дутагдлуудаас зайлсхийхийн тулд мэдээллийн санг хэвийн болгох аргыг ашигладаг - үүнийг дэд хүснэгт, лавлах хүснэгт болгон хуваах. Онолын ширэнгэн ой руу орж, хэвийн хэлбэр гэж юу болохыг судлах шаардлагагүй, хэвийн болгохын мөн чанарыг ойлгоход хангалттай.

"Албан тушаал" ба "Хэлтэс" гэсэн 2 хүснэгт үүсгэцгээе, эхнийх нь албан тушаал, хоёр дахь нь тус тус хэлтэс гэж нэрлэгдэх болно.

CREATE TABLE Positions (ID int IDENTITY (1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Нэр nvarchar (30) NULL БИШ) CREATE TABLE хэлтэс (ID int IDENTITY (1,1) NOT NULL CONSTRAINT PK_MARYDepartments, Name3n ) NULL БИШ)
Энд бид ID баганад байгаа өгөгдлийг 1-ээс эхлэн 1-ийн алхамаар автоматаар дугаарлах болно гэсэн шинэ IDENTITY сонголтыг ашигласан болохыг анхаарна уу. Шинэ бичлэг нэмэхдээ 1, 2, 3 гэх мэт утгыг дарааллаар нь онооно. Ийм талбаруудыг ихэвчлэн автоматаар нэмэгдүүлэх гэж нэрлэдэг. Хүснэгтэд зөвхөн IDENTITY шинж чанартай нэг талбарыг тодорхойлж болох ба ихэвчлэн тийм талбар нь тухайн хүснэгтийн үндсэн түлхүүр байх албагүй.

Тэмдэглэл дээр
Өөр өөр DBMS-д тоолууртай талбаруудын хэрэгжилтийг өөрийн гэсэн аргаар хийж болно. Жишээлбэл, MySQL дээр ийм талбарыг AUTO_INCREMENT сонголтыг ашиглан тодорхойлдог. Өмнө нь ORACLE болон Firebird-д энэ функцийг SEQUENCE ашиглан дууриаж болно. Гэхдээ миний мэдэж байгаагаар ORACLE одоо GENERATED AS IDENTITY сонголтыг нэмсэн.

Ажилчдын хүснэгтийн албан тушаал, хэлтсийн талбарт бүртгэгдсэн одоогийн өгөгдөл дээр үндэслэн эдгээр хүснэгтүүдийг автоматаар бөглөцгөөе.

Албан тушаалын хүснэгтийн Нэрийн талбарыг Ажилчдын хүснэгтийн Албан тушаалын талбараас өвөрмөц утгуудаар бөглөнө үү. Албан тушаал INSERT (Нэр) Албан тушаал NULL БУС БАЙГАЛ АЖИЛЧДЫН АЛБАН БАЙРЫГ СОНГОХ - албан тушаал нь тодорхойлогдоогүй бүртгэлийг устгана уу.
Хэлтсийн хүснэгтийн хувьд ижил зүйлийг хийцгээе:

ХЭЛБЭРҮҮДИЙГ ОРУУЛАХ (Нэр) ХЭЛБЭРИЙГ ХҮМҮҮС БАЙГАА БАЙГУУЛЛАГЫН АЖИЛТНУУДаас ЯЛДАГ ХЭЛБЭРИЙГ СОНГОХ
Хэрэв бид одоо албан тушаал, хэлтсийн хүснэгтүүдийг нээвэл ID талбарт дугаарласан утгуудыг харах болно.

Албан тушаалаас * СОНГОХ

Хэлтэсүүдээс * СОНГОХ

Эдгээр хүснэгтүүд нь одоо албан тушаал, хэлтэс хуваарилах лавлах номын үүрэг гүйцэтгэх болно. Бид одоо ажлын байр, хэлтсийн үнэмлэхийг авч үзэх болно. Юуны өмнө танигч өгөгдлийг хадгалахын тулд Ажилчдын хүснэгтэд шинэ талбаруудыг үүсгэцгээе.

Албан тушаалын ID-д талбар нэмэх ХҮСНЭГТ ӨӨРЧЛӨХ Ажилчид ADD PositionID int - хэлтсийн ID-д талбар нэмэх ХҮСНЭГТ ӨӨРЧЛӨЛТ Ажилтнууд ADD DepartmentID int
Лавлагааны талбаруудын төрөл нь лавлагааныхтай ижил байх ёстой бөгөөд энэ тохиолдолд int байна.

Та мөн таслалаар тусгаарлагдсан талбаруудыг жагсаан нэг тушаалаар хүснэгтэд хэд хэдэн талбарыг нэг дор нэмж болно.

ALTER TABLE Ажилчид ADD PositionID int, DepartmentID int
Одоо бид эдгээр талбарт холбоос (лавлагааны хязгаарлалт - ГАДААД ТҮЛХҮҮР) бичих бөгөөд ингэснээр хэрэглэгч лавлах номонд олдсон ID утгуудын дунд байхгүй утгыг эдгээр талбарт бичих боломжгүй болно.

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид ХЯЗГААР НЭМЭХ FK_Ажилтнуудын_Албан тушаалын ID ГАДААД ТҮЛХҮҮР (Албан тушаалын ID) ЛАВЛАГАА Албан тушаал (ID)
Мөн бид хоёр дахь талбарт ижил зүйлийг хийх болно:

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилтнууд ХЯЗГААР НЭМЭХ FK_Ажилтнуудын_Газар ID ГАДААД ТҮЛХҮҮР (Хэлтсийн ID) ИШИГЛЭЛТ Хэлтэсүүд (ID)
Одоо хэрэглэгч эдгээр талбарт харгалзах лавлахаас зөвхөн ID утгыг оруулах боломжтой болно. Үүний дагуу шинэ хэлтэс эсвэл албан тушаалыг ашиглахын тулд эхлээд харгалзах лавлахад шинэ бүртгэл нэмэх шаардлагатай болно. Учир нь Одоо албан тушаал, хэлтэс нь лавлахад нэг хуулбараар хадгалагдаж байгаа бөгөөд нэрийг нь өөрчлөхийн тулд зөвхөн лавлахад л өөрчлөхөд хангалттай.

Лавлагааны хязгаарлалтын нэр нь ихэвчлэн нийлмэл байдаг, энэ нь "FK_" угтвараас бүрдэх ба дараа нь хүснэгтийн нэр, доогуур зураасны дараа лавлагааны хүснэгтийн тодорхойлогчийг заах талбарын нэр байна.

Тодорхойлогч (ID) нь ихэвчлэн дотоод утга бөгөөд зөвхөн холбоосуудад ашиглагддаг бөгөөд ямар үнэ цэнэ хадгалагдаж байгаа нь ихэнх тохиолдолд огт хайхрамжгүй байдаг тул та үүссэн тоонуудын дарааллаар цоорхойг арилгахыг оролдох шаардлагагүй болно. хүснэгттэй ажиллах явцад, жишээлбэл, лавлах номноос бүртгэлийг устгасны дараа.

ALTER TABLE хүснэгт НЭМЭХ ХЯЗГААРЛАХ хязгаарлалтын_нэр ГАДААД ТҮЛХҮҮР (талбар1, талбар2, ...) АШИГЛАЛТЫН лавлах_хүснэгт (талбар1, талбар2, ...)
Энэ тохиолдолд "dir_table" хүснэгтэд үндсэн түлхүүрийг хэд хэдэн талбарын хослолоор илэрхийлнэ (талбар1, талбар2, ...).

Яг үнэндээ одоо PositionID болон DepartmentID талбаруудыг лавлахуудын ID утгуудаар шинэчилье. Энэ зорилгоор DML UPDATE командыг ашиглая:

ШИНЭЧЛЭХ e SET PositionID = (Хаана байгаа албан тушаалаас ID СОНГОХ Нэр = e.Албан тушаал), Департаментын ID = (ХАААН Хэлтэсүүдээс ID СОНГОХ Нэр = e.Хэлтэс) ​​Ажилчдаас e.
Асуулга ажиллуулснаар юу болсныг харцгаая:

Ажилчдаас * СОНГОХ

Ингээд л PositionID болон DepartmentID талбарууд нь харгалзах албан тушаалууд болон таних тэмдэг бүхий хэлтсүүдээр дүүрсэн, Ажилчдын хүснэгт дэх албан тушаал, хэлтсийн талбарууд шаардлагагүй, та эдгээр талбаруудыг устгаж болно.

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид DROP COUMN Албан тушаал, хэлтэс
Одоо хүснэгт дараах хэлбэрийг олж авлаа.

Ажилчдаас * СОНГОХ

ID Нэр Төрсөн өдөр Имэйл PositionID Департаментын ID
1000 Иванов I.I. NULL NULL 2 1
1001 Петров П.П. NULL NULL 3 3
1002 Сидоров С.С. NULL NULL 1 2
1003 Андреев А.А. NULL NULL 4 3

Тэдгээр. Үүний үр дүнд бид илүүдэл мэдээллийн сангаас салсан. Одоо албан тушаал, хэлтсийн дугаараар бид лавлагааны хүснэгтийн утгыг ашиглан тэдгээрийн нэрийг өвөрмөц байдлаар тодорхойлж болно.

e.ID, e.Нэр, х.Нэр Албан тушаалынНэр, г.Нэр ХэлтсийнНэр ажилчдаас e ЗҮҮН НЭГДСЭН Хэлтэс d ДЭЭР БАЙДАЛ d.ID = e.Газрын ID ЗҮҮН НЭГДСЭН Албан тушаал p ON p.ID = e.PositionID

Объект шалгагч дээр бид энэ хүснэгтэд зориулж бүтээсэн бүх объектыг харж болно. Эндээс та эдгээр объектуудтай янз бүрийн залруулга хийж болно - жишээлбэл, объектын нэрийг өөрчлөх эсвэл устгах.

Хүснэгт нь өөртөө хамааралтай болохыг тэмдэглэх нь зүйтэй, i.e. та рекурсив холбоос үүсгэж болно. Жишээлбэл, ажилчдынхаа хүснэгтэд өөр нэг ManagerID талбар нэмж оруулъя, энэ талбар нь энэ ажилтанд харьяалагддаг ажилтныг зааж өгнө. Талбар үүсгэцгээе:

ALTER TABLE Ажилчид ADD ManagerID int
Энэ талбарт NULL-ийг зөвшөөрнө, жишээлбэл, ажилтнаас дээш дарга байхгүй бол талбар хоосон байх болно.

Одоо Ажилчдын хүснэгт дээр ГАДААД ТҮЛХҮҮР үүсгэцгээе:

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид ХЯЗГААЛТ НЭМЭХ FK_Ажилтнуудын_Менежерийн ID ГАДААД ТҮЛХҮҮР (Менежерийн ID) ЛАВЛАГАА Ажилтнууд (ID)
Одоо диаграмм үүсгэж, хүснэгтүүдийн хоорондын хамаарал үүн дээр хэрхэн харагдахыг харцгаая.

Үүний үр дүнд бид дараах зургийг харах ёстой (Ажилтнуудын хүснэгт нь албан тушаал, хэлтсийн хүснэгтүүдтэй холбогдсон бөгөөд мөн өөртэйгөө холбоотой):

Эцэст нь лавлах товчлуурууд нь лавлагааны хүснэгтэд дурдсан бичлэгийг устгах эсвэл шинэчлэх үед хэрхэн ажиллахыг зааж өгөх ON DELETE CASCADE болон ON UPDATE CASCADE гэсэн нэмэлт сонголтуудыг агуулж болохыг дурдах нь зүйтэй. Хэрэв эдгээр сонголтуудыг заагаагүй бол бид өөр хүснэгтээс холбоосууд байгаа бичлэгийн лавлагааны хүснэгтийн ID-г өөрчлөх боломжгүй, мөн дурдсан бүх мөрийг устгах хүртэл бид лавлагаанаас ийм бичлэгийг устгах боломжгүй болно. энэ бичлэг эсвэл бид эдгээр мөрөнд байгаа холбоосыг өөр утгаар шинэчлэх болно.

Жишээлбэл, FK_Employees_DepartmentID-д зориулсан ON DELETE CASCADE сонголттой хүснэгтийг дахин үүсгэцгээе:

DROP TABLE Ажилтнууд ХҮСНЭГТ ҮҮСГЭДЭГ Ажилтнууд (ID int NULL БИШ, Нэр nvarchar (30), Төрсөн өдөр, Имэйл nvarchar (30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Ажилтан PRIMARY KEYRAINT (ID_Amployee) (ID_Amployes) ) ЛАВЛАГААНЫ ХЭЛБЭРҮҮД (ID) КАСКАДЫГ УСТГАХ, ХЯЗГААРЛАХ FK_Ажилтнуудын_Албан тушаалын ID ГАДААД ТҮЛХҮҮР (Албан тушаалын ID) Лавлагаа Албан тушаал (ID), Хязгаарлалт FK_Ажилтны_Менежерийн ID ГАДААД ТҮЛХҮҮР (Менежер0) Нэр (Менежер0) Нэр "19550219", 2,1, NULL), (1001, N "Петров П.П.", "19831203", 3,3,1003), (1002 , Н "Сидоров С.С.", "19760607", 1,2,1000) , (1003, Н "Андреев А.А.", "19820417", 4,3,1000)
Хэлтсийн хүснэгтээс ID 3-тай хэлтсийг устгая:

ID = 3-тай тэнхимүүдийг УСТГАХ
Ажилчдын хүснэгт дэх өгөгдлийг харцгаая:

Ажилчдаас * СОНГОХ

ID Нэр Төрсөн өдөр Имэйл PositionID Департаментын ID Менежер ID
1000 Иванов I.I. 1955-02-19 NULL 2 1 NULL
1002 Сидоров С.С. 1976-06-07 NULL 1 2 1000

Таны харж байгаагаар 3-р хэлтсийн өгөгдлийг Ажилчдын хүснэгтээс устгасан.

ON UPDATE CASCADE сонголт нь үүнтэй адил ажилладаг боловч хайлт дахь ID утгыг шинэчлэх үед ажиллана. Жишээлбэл, хэрэв бид ажлын байрны лавлах дахь албан тушаалын ID-г өөрчилбөл, Ажилчдын хүснэгт дэх Департаментын ID нь бидний лавлахад заасан шинэ ID утга руу шинэчлэгдэх болно. Гэхдээ энэ тохиолдолд үүнийг харуулах боломжгүй болно Хэлтсийн хүснэгтийн ID баганад IDENTITY сонголт байгаа бөгөөд энэ нь биднийг дараах хүсэлтийг биелүүлэхээс сэргийлнэ (тэнхимийн ID 3-ыг 30 болгон өөрчлөх):

ШИНЭЧЛЭХ хэлтэсүүд SET ID = 30 ХААНА ID = 3
Хамгийн гол нь DELETE CASCADE болон ON UPDATE CASCADE гэсэн 2 сонголтын мөн чанарыг ойлгох явдал юм. Би эдгээр сонголтыг маш ховор тохиолдлуудад ашигладаг бөгөөд тэдгээрийг ашиглахаасаа өмнө сайтар бодож үзэхийг зөвлөж байна. Хэрэв та хайлтын хүснэгтээс бичлэгийг санамсаргүйгээр устгавал энэ нь том асуудал үүсгэж, гинжин урвал үүсгэж болзошгүй.

3-р тасгийг сэргээцгээе:

IDENTITY утгыг нэмэх/өөрчлөх зөвшөөрөл олгох SET IDENTITY_INSERT хэлтэс ON INSERT хэлтэс (ID, Нэр) VALUES (3, N "IT") - IDENTITY утгыг нэмэх / өөрчлөхийг хориглох SET IDENTITY_INSERT хэлтэс OFF
TRUNCATE TABLE командыг ашиглан Ажилчдын хүснэгтийг бүрэн цэвэрлэцгээе.

TRUNCATE TABLE Ажилтнууд
Дахин хэлэхэд өмнөх INSERT командыг ашиглан өгөгдлийг дахин ачаална уу:

INSERT ажилчдыг (ID, Нэр, Төрсөн өдөр, Албан тушаалын ID, хэлтсийн ID, Менежерийн ID) ҮНЭ ЦЭНЭ (1000, N "Иванов И.И.", "19550219", 2,1, NULL), (1001, N "Петров П.П." , "19831203", 3 ,3,1003), (1002, Н "Сидоров С.С.", "19760607", 1,2,1000), (1003, Н "Андреев А.А.", "19820417", 4,3,1000)

Дүгнэж хэлье

Одоогийн байдлаар бидний мэдлэгт хэд хэдэн DDL тушаал нэмэгдэв.
  • IDENTITY шинж чанарыг талбарт нэмэх - хүснэгтийн хувьд энэ талбарыг автоматаар бөглөх (тоолуур талбар) хийх боломжийг танд олгоно;
  • ХҮСНЭГТИЙГ ӨӨРЧЛӨХхүснэгтийн нэр НЭМЭХшинж чанаруудтай_талбаруудын_жагсаалт - хүснэгтэд шинэ талбар нэмэх боломжийг танд олгоно;
  • ХҮСНЭГТИЙГ ӨӨРЧЛӨХхүснэгтийн нэр БАГАНА УНАХталбарын_жагсаалт - хүснэгтээс талбаруудыг устгах боломжийг танд олгоно;
  • ХҮСНЭГТИЙГ ӨӨРЧЛӨХхүснэгтийн нэр ХЯЗГААРЛАЛ НЭМЭХхязгаарлалтын_нэр ГАДААД ТҮЛХҮҮР(талбарууд) Ашигласан материаллавлагааны_хүснэгт (талбарууд) - хүснэгт болон лавлагааны хүснэгтийн хоорондын хамаарлыг тодорхойлох боломжийг танд олгоно.

Бусад хязгаарлалт - Өвөрмөц, өгөгдмөл, ШАЛГАХ

UNIQUE хязгаарлалтын тусламжтайгаар та өгөгдсөн талбар эсвэл талбарын багц дахь мөр бүрийн утгууд өвөрмөц байх ёстой гэж хэлж болно. Ажилчдын хүснэгтийн хувьд бид Имэйлийн талбарт ийм хязгаарлалт тавьж болно. Хэрэв эдгээр нь тодорхойлогдоогүй байвал имэйлийг урьдчилан бөглөнө үү:

ШИНЭЧЛЭХ ажилчдын цахим шуудан = " [имэйлээр хамгаалагдсан]"ХАААН ID = 1000 ШИНЭЧЛЭГДСЭН ажилтны цахим шуудан =" [имэйлээр хамгаалагдсан]"WHERE ID = 1001 ШИНЭЧЛЭЛТ Ажилчдын имэйлийг SET =" [имэйлээр хамгаалагдсан]"WHERE ID = 1002 ШИНЭЧЛЭГДСЭН ажилчдын цахим шуудан =" [имэйлээр хамгаалагдсан]"ХАААН ID = 1003
Одоо та энэ талбарт өвөрмөц байдлын хязгаарлалт тавьж болно:

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид ХЯЗГААРЛАХ UQ_Amployees_E-мэйл ОНЦГОЙ (И-мэйл)
Одоо хэрэглэгч хэд хэдэн ажилчдад ижил имэйл оруулах боломжгүй болно.

Өвөрмөц байдлын хязгаарлалтыг ихэвчлэн дараах байдлаар нэрлэдэг - эхлээд "UQ_" угтвар, дараа нь хүснэгтийн нэр, доогуур зураасны дараа энэ хязгаарлалтыг хэрэглэж буй талбарын нэр байна.

Үүний дагуу, хүснэгтийн мөрүүдийн контекстэд талбаруудын хослол өвөрмөц байх ёстой бол бид тэдгээрийг таслалаар тусгаарлаж жагсаав.

ALTER TABLE хүснэгтийн нэр НЭМЭГДСЭН ХЯЗГААРЛАЛЫН_НЭР Өвөрмөц (талбар1, талбар2, ...)
Талбарт DEFAULT хязгаарлалтыг нэмснээр бид шинэ бичлэг оруулах үед энэ талбар INSERT командын талбаруудын жагсаалтад байхгүй бол орлуулах үндсэн утгыг тохируулж болно. Энэ хязгаарлалтыг хүснэгт үүсгэх үед шууд тохируулж болно.

Ажилчдын хүснэгтэд шинэ "Товлосон огноо" талбарыг нэмээд HireDate гэж нэрлээд энэ талбарын үндсэн утга нь одоогийн огноо гэж хэлье.

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилтнууд ажилд орсон огноо НЭМЭХ ӨГӨГДМӨГ SYSDATETIME ()
Эсвэл HireDate багана аль хэдийн байгаа бол дараах синтаксийг ашиглаж болно:

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид ажилд авах огнооны хувьд өгөгдмөл SYSDATETIME () НЭМЭХ
Энд би хязгаарлалтын нэрийг зааж өгөөгүй, учир нь FAULT-ын хувьд энэ нь тийм ч чухал биш гэж би бодож байсан. Тэгэхдээ эвтэйхэн хийвэл залхуурах хэрэггүй, жирийн нэр өгөх хэрэгтэй гэж бодож байна. Үүнийг дараах байдлаар хийнэ.

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид Ажилд авах огноог DF_Amployees_HireDate өгөгдмөл SYSDATETIME () НЭМЭХ Хязгаарлалт
Энэ багана өмнө нь байхгүй байсан тул бүртгэл бүрт нэмэх үед одоогийн огнооны утгыг HireDate талбарт оруулах болно.

Шинэ бичлэг нэмэх үед одоогийн огноог автоматаар оруулах болно, мэдээжийн хэрэг, хэрэв бид үүнийг тодорхой заагаагүй бол, i.e. баганын жагсаалтад заагаагүй болно. Нэмэгдсэн утгуудын жагсаалтын HireDate талбарыг заалгүйгээр жишээгээр харуулъя:

INSERT ажилчид (ID, Нэр, Имэйл) ҮНЭ ЦЭНЭ (1004, N "Sergeev S.S.", " [имэйлээр хамгаалагдсан]")
Юу болсныг харцгаая:

Ажилчдаас * СОНГОХ

ID Нэр Төрсөн өдөр Имэйл PositionID Департаментын ID Менежер ID Ажилд орох огноо
1000 Иванов I.I. 1955-02-19 [имэйлээр хамгаалагдсан] 2 1 NULL 2015-04-08
1001 Петров П.П. 1983-12-03 [имэйлээр хамгаалагдсан] 3 4 1003 2015-04-08
1002 Сидоров С.С. 1976-06-07 [имэйлээр хамгаалагдсан] 1 2 1000 2015-04-08
1003 Андреев А.А. 1982-04-17 [имэйлээр хамгаалагдсан] 4 3 1000 2015-04-08
1004 Сергеев С.С. NULL [имэйлээр хамгаалагдсан] NULL NULL NULL 2015-04-08

CHECK хязгаарлалт нь талбарт оруулсан утгыг шалгах шаардлагатай үед ашиглагддаг. Жишээлбэл, ажилтны таних тэмдэг (ID) болох боловсон хүчний дугаарын талбарт энэ хязгаарлалтыг оруулъя. Энэхүү хязгаарлалтыг ашиглан боловсон хүчний тоо 1000-аас 1999 оны хооронд байх ёстой гэж үзье.

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилтнууд CK_Amployees_ID ШАЛГАХ ХЯЗГААР НЭМЭГДЭХ (ID 1000 БА 1999 ХООРОНД)
Хязгаарлалт нь ихэвчлэн ижил нэртэй бөгөөд эхлээд "CK_" угтвар, дараа нь хүснэгтийн нэр, энэ хязгаарлалт тавигдсан талбарын нэр ирдэг.

Хязгаарлалт ажиллаж байгаа эсэхийг шалгахын тулд хүчингүй оруулга оруулахыг оролдъё (бид холбогдох алдаа гарах ёстой):

INSERT ажилчдын (ID, Email) VALUES (2000, " [имэйлээр хамгаалагдсан]")
Одоо оруулсан утгыг 1500 болгож, бичлэг оруулсан эсэхийг шалгацгаая.

Ажилчдын (ID, И-мэйл) ҮНЭ ЦЭВЭРЛЭХ (1500, " [имэйлээр хамгаалагдсан]")
Та мөн нэр зааж өгөхгүйгээр UNIQUE болон CHECK хязгаарлалтуудыг үүсгэж болно:

ALTER TABLE Ажилчид Өвөрмөц (И-мэйл) НЭМЭГДСЭН ХҮСНЭГТИЙГ ӨӨРЧЛӨХ ХҮСНЭГТ НЭМЭГДЭЖ БАЙНА (ID 1000 БА 1999 ХОНООС)
Гэхдээ энэ нь тийм ч сайн туршлага биш тул хязгаарлалтын нэрийг тодорхой зааж өгөх нь дээр Үүнийг дараа нь ойлгохын тулд аль нь илүү хэцүү болохыг та объектыг нээж, энэ нь юу хариуцаж байгааг харах хэрэгтэй болно.

Сайн нэртэй бол хязгаарлалтын талаархи олон мэдээллийг нэрээр нь шууд таньж болно.

Үүний дагуу эдгээр бүх хязгаарлалтыг хүснэгт үүсгэх үед, хэрэв байхгүй бол шууд үүсгэж болно. Хүснэгтийг устгацгаая:

DROP TABLE Ажилчид
Бид үүнийг нэг CREATE TABLE тушаалаар үүсгэсэн бүх хязгаарлалттайгаар дахин үүсгэх болно:

CREATE TABLE Ажилтнууд (ID int NOT NULL, Name nvarchar (30), Төрсөн өдөр, Имэйл nvarchar (30), PositionID int, DepartmentID int, HireDate date NULL БИШ өгөгдмөл SYSDATETIME (), - DEFAULT-д би CONSTRAINTEY_KSTRAINTYE-г эс тооцвол PST-ийг шидэх болно. (ID), ХЯЗГААРЛАХ FK_Ажилтнуудын_Газрын ID ГАДААД ТҮЛХҮҮР (Хэлтсийн ID) ЛАВЛАГАА Хэлтэсүүд (ID), ХЯЗГААР FK_Ажилтнуудын_Албан тушаалын ID ГАДААД ТҮЛХҮҮР (Албан тушаалын ID) Лавлагаа Албан тушаалууд (ID), CONSTRAINT_Employees (UQ_Email)

INSERT ажилчдыг (ID, Нэр, Төрсөн өдөр, Имэйл, албан тушаалын ID, хэлтсийн ID) ҮНЭ ЦЭНЭ (1000, Н "Иванов И.И.", "19550219", " [имэйлээр хамгаалагдсан]", 2,1), (1001, Н" Петров П.П. "," 19831203 "," [имэйлээр хамгаалагдсан]", 3,3), (1002, Н" Сидоров С.С. "," 19760607 "," [имэйлээр хамгаалагдсан]", 1,2), (1003, Н" Андреев А.А. "," 19820417 "," [имэйлээр хамгаалагдсан]",4,3)

PRIMARY KEY болон UNIQUE хязгаарлалтуудыг үүсгэх үед үүсгэсэн индексүүдийн талаар бага зэрэг

Дээрх дэлгэцийн зургаас харж байгаагаар PRIMARY KEY болон UNIQUE хязгаарлалтуудыг үүсгэх үед ижил нэртэй индексүүд (PK_Employees болон UQ_Employees_Email) автоматаар үүсгэгдсэн. Өгөгдмөлөөр, үндсэн түлхүүрийн индексийг CLUSTERED, бусад бүх индексүүдийн хувьд NONCLUSTERED хэлбэрээр үүсгэнэ. Бүх DBMS-д кластер индекс гэсэн ойлголт байдаггүй гэдгийг хэлэх хэрэгтэй. Хүснэгт нь зөвхөн нэг CLUSTERED индекстэй байж болно. CLUSTERED - хүснэгтийн бичлэгүүдийг энэ индексээр эрэмбэлнэ гэсэн үг бөгөөд энэ индекс нь хүснэгтийн бүх өгөгдөлд шууд хандах боломжтой гэж хэлж болно. Энэ бол хүснэгтийн үндсэн индекс юм. Ойролцоогоор энэ нь хүснэгтэд бэхлэгдсэн индекс юм. Кластерт индекс нь таны асуулгыг оновчтой болгоход туслах маш хүчирхэг хэрэгсэл бөгөөд одоохондоо үүнийг санаарай. Хэрэв бид кластерлагдсан индексийг үндсэн түлхүүрт биш, харин өөр индекст ашиглахыг хүсч байвал үндсэн түлхүүрийг үүсгэхдээ CLUSTERED бус сонголтыг зааж өгөх ёстой.

ALTER TABLE хүснэгтийн нэр НЭМЭХ ХЯЗГААРЛАЛЫН_НЭР БҮЛЭГГҮЙ АНХДАГЧ ТҮЛХҮҮР (талбар1, талбар2, ...)
Жишээ нь, PK_Amployees хязгаарлалтын индексийг кластергүй, UQ_Amployees_Email хязгаарлалтын индексийг кластертай болгоё. Юуны өмнө бид эдгээр хязгаарлалтыг арилгах болно:

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид PK_Ажилтнуудын ХЯЗГААРЛЫГ ДУСААР ХҮСНЭГТИЙГ ӨӨРЧЛҮҮЛЭХ.
Одоо тэдгээрийг CLUSTERED болон NONCLUSTERED сонголтоор үүсгэцгээе:

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Ажилчид PK_Ажилтнуудад ХЯЗГААРЛАХ НЭМЭГДСЭН АНХАН ТҮЛХҮҮР БҮЛГЭЭГҮЙ (ID) ХҮСНЭГТИЙГ ӨӨРЧЛӨХ Хязгаарлагдмал UQ_Ажилтнуудын_И-мэйл ОНЦГОЙ CLUSTERED (И-мэйл)
Одоо, Ажилчдын хүснэгтээс татаж авсны дараа бид бүртгэлүүдийг UQ_Employees_Email-ийн кластерын индексээр эрэмбэлсэн болохыг харж болно:

Ажилчдаас * СОНГОХ

ID Нэр Төрсөн өдөр Имэйл PositionID Департаментын ID Ажилд орох огноо
1003 Андреев А.А. 1982-04-17 [имэйлээр хамгаалагдсан] 4 3 2015-04-08
1000 Иванов I.I. 1955-02-19 [имэйлээр хамгаалагдсан] 2 1 2015-04-08
1001 Петров П.П. 1983-12-03 [имэйлээр хамгаалагдсан] 3 3 2015-04-08
1002 Сидоров С.С. 1976-06-07 [имэйлээр хамгаалагдсан] 1 2 2015-04-08

Үүнээс өмнө PK_Employees индекс нь кластерийн индекс байх үед бүртгэлийг анхдагч байдлаар ID-аар эрэмбэлсэн.

Гэхдээ энэ тохиолдолд энэ нь зөвхөн кластерийн индексийн мөн чанарыг харуулсан жишээ юм. ID талбараар Ажилчдын хүснэгтэд асуулга хийгдэх бөгөөд зарим тохиолдолд энэ нь өөрөө лавлах номын үүрэг гүйцэтгэдэг.

Хайлтын хувьд ихэвчлэн кластерийн индексийг үндсэн түлхүүр дээр бүтээхийг зөвлөж байна, учир нь хүсэлт гаргахдаа бид нэр (албан тушаал, хэлтэс) ​​авахын тулд ихэвчлэн лавлах танигч руу ханддаг. Кластерт индекс нь хүснэгтийн мөрүүдэд шууд хандах боломжтой бөгөөд эндээс бид ямар ч баганын утгыг нэмэлт зардалгүйгээр авах боломжтой гэдгийг дээр дурдсаныг бид санаж байна.

Хамгийн олон удаа түүвэрлэдэг талбарт кластерын индекс хэрэглэх нь давуу талтай.

Заримдаа түлхүүрийг хүснэгтэд орлуулагч талбараар үүсгэдэг бөгөөд энэ тохиолдолд CLUSTERED индексийн сонголтыг илүү тохиромжтой индексээр хадгалах ба орлуулах үндсэн түлхүүр үүсгэх үед NONCLUSTERED сонголтыг зааж өгөх нь ашигтай байдаг.

Дүгнэж хэлье

Энэ үе шатанд бид "ALTER TABLE table_name ADD CONSTRAINT хязгаарлалтын_нэр ..." маягтын тушаалаар үүсгэгддэг бүх төрлийн хязгаарлалттай хамгийн энгийн хэлбэрээр танилцсан:
  • АНХАН ТҮЛХҮҮР- үндсэн түлхүүр;
  • ГАДААД ТҮЛХҮҮР- холбоосыг тохируулах, мэдээллийн лавлагааны бүрэн бүтэн байдлыг хянах;
  • Өвөрмөц- өвөрмөц байдлыг бий болгох боломжийг танд олгоно;
  • ШАЛГАХ- оруулсан мэдээллийн үнэн зөвийг зөвшөөрөх;
  • ӨГӨГДМӨЛ- анхдагч утгыг тохируулах боломжийг танд олгоно;
  • "Командыг ашиглан бүх хязгаарлалтыг арилгаж болно гэдгийг тэмдэглэх нь зүйтэй. ХҮСНЭГТИЙГ ӨӨРЧЛӨХхүснэгтийн нэр DROP CONSTRAINTхязгаарлалтын_нэр ".
Бид мөн индексийн сэдвийг хэсэгчлэн хөндөж, кластерийн ойлголтод дүн шинжилгээ хийсэн ( БӨГЛӨГДСӨН) ба бөөгнөрөлгүй ( БҮГДЭЛГҮЙ) индекс.

Бие даасан индекс үүсгэх

Энд бие даах чадвар гэдэг нь АНХДАГЧ ТҮЛХҮҮР эсвэл ОНЦГОЙ хязгаарлалтад зориулагдаагүй индексүүдийг хэлнэ.

Талбар эсвэл талбарын индексийг дараах тушаалаар үүсгэж болно.

IDX_Amployees_Name ON ажилчдын индексийг үүсгэх (Нэр)
Мөн энд та CLUSTERED, NONCLUSTERED, UNIQUE сонголтуудыг зааж өгөхөөс гадна ASC (анхдагчаар) эсвэл DESC талбар бүрийн ангилах чиглэлийг зааж өгч болно:

Ажилчдад зориулсан UQ_Employees_EmailDesc ДАХЬ ӨНГӨЛӨГӨӨГҮЙ ИНДЕКС ҮҮСГЭЭЧ (И-мэйл DESC)
Бүлэггүй индекс үүсгэх үед БҮГДЭЛГҮЙ сонголтыг гаргаж болно, учир нь Энэ нь өгөгдмөл бөгөөд команд дахь CLUSTERED эсвэл NONCLUSTERED сонголтын байрлалыг зааж өгөхийн тулд энд харуулав.

Та дараах тушаалаар индексийг устгаж болно.

DROP INDEX IDX_Amployees_Name ON Ажилчдын
Хязгаарлалт шиг энгийн индексүүдийг CREATE TABLE командын хүрээнд үүсгэж болно.

Жишээлбэл, хүснэгтийг дахин буулгая:

DROP TABLE Ажилчид
Бид үүнийг нэг CREATE TABLE тушаалаар үүсгэсэн бүх хязгаарлалт, индексүүдээр дахин үүсгэх болно:

ХҮСНЭГТ ҮЗҮҮЛЭХ Ажилтнууд (ID int NOT NULL, Нэр nvarchar (30), Төрсөн өдөр, Имэйл nvarchar (30), PositionID int, DepartmentID int, Ажилд авсан огноо БИШ БИШ ХЯЗГААР DF_Employees_HireDate DEFAULT SYSDATEtYe), DEFAULT Manager SYSTARINT, K бэрхшээл FK_Employees_DepartmentID ГАДААД ҮНДСЭН (DepartmentID) АШИГЛАСАН газар (ID), бэрхшээл FK_Employees_PositionID ГАДААД ҮНДСЭН (PositionID) Ашигласан материал байршил (ID), бэрхшээл FK_Employees_ManagerID ГАДААД ҮНДСЭН (и-мэйл) шалгалт (1000-аас 1999 оны хооронд ID), INDEX IDX_Employees_Name (нэр))
Эцэст нь ажилтнуудаа хүснэгтэд оруулъя.

INSERT ажилчдыг (ID, Нэр, Төрсөн өдөр, Имэйл, Албан тушаалын ID, хэлтсийн ID, Менежерийн ID) ҮНЭ ЦЭНЭ (1000, N "Иванов И.И.", "19550219", " [имэйлээр хамгаалагдсан]", 2,1, NULL), (1001, N" Петров П.П. "," 19831203 "," [имэйлээр хамгаалагдсан]", 3,3,1003), (1002, Н" Сидоров С.С. "," 19760607 "," [имэйлээр хамгаалагдсан]", 1,2,1000), (1003, Н" Андреев А.А. "," 19820417 "," [имэйлээр хамгаалагдсан].tt ", 4,3,1000)
Нэмж дурдахад та INCLUDE хэсэгт утгыг зааж өгснөөр кластергүй индекст оруулах боломжтой гэдгийг тэмдэглэх нь зүйтэй. Тэдгээр. Энэ тохиолдолд INCLUDE индекс нь кластерын индекстэй зарим талаараа төстэй байх болно, зөвхөн одоо индексийг хүснэгтэд бэхлээгүй, харин шаардлагатай утгуудыг индекст бэхэлсэн болно. Иймээс ийм индексүүд нь сонгосон асуулгын (SELECT) гүйцэтгэлийг ихээхэн сайжруулж чадна, хэрэв жагсаалтад байгаа бүх талбарууд индекст байгаа бол хүснэгтэд хандах шаардлагагүй байж магадгүй юм. Гэхдээ энэ нь мэдээжийн хэрэг индексийн хэмжээг нэмэгдүүлдэг жагсаасан талбаруудын утгууд нь индекст давхардсан байна.

MSDN-ээс ишлэл.Индекс үүсгэх ерөнхий командын синтакс

[Өвөрмөц] [БҮГЛЭГДСЭН | БҮЛГЭЭГҮЙ] INDEX индексийн нэр АСААЛТТАЙ (багана [ASC | DESC] [, ... n]) [ОРУУЛАХ (баганын_нэр [, ... n])]

Дүгнэж хэлье

Индексүүд нь өгөгдөл олж авах хурдыг (SELECT) нэмэгдүүлэх боломжтой боловч индексүүд нь хүснэгтийн өгөгдлийг өөрчлөх хурдыг удаашруулдаг. Өөрчлөлт бүрийн дараа систем нь тодорхой хүснэгтийн бүх индексийг дахин бүтээх шаардлагатай болно.

Тухайн тохиолдол бүрт түүвэрлэлтийн гүйцэтгэл болон өгөгдлийн өөрчлөлтийг зохих түвшинд байлгахын тулд хамгийн оновчтой шийдэл буюу алтан дундажийг олохыг зөвлөж байна. Индекс үүсгэх стратеги, тэдгээрийн тоо нь хүснэгтэд байгаа өгөгдөл хэр олон удаа өөрчлөгдөх зэрэг олон хүчин зүйлээс шалтгаална.

DDL-ийн дүгнэлт

Таны харж байгаагаар DDL нь эхлээд харахад тийм ч төвөгтэй биш юм. Энд би зөвхөн гурван хүснэгтийг ашиглан түүний бараг бүх үндсэн бүтцийг харуулж чадсан.

Хамгийн гол нь мөн чанарыг ойлгох, бусад нь дадлага хийх явдал юм.

SQL хэмээх энэ гайхалтай хэлэнд амжилт хүсье.

Миний блог сайтад тавтай морил. Өнөөдөр бид эхлэгчдэд зориулсан sql асуулгын талаар ярих болно. Зарим вэбмастерууд асуулт асууж магадгүй. Яагаад sql сурах хэрэгтэй вэ? Чи чадахгүй гэж үү?

Энэ нь мэргэжлийн интернет төсөл бий болгоход хангалтгүй байх нь харагдаж байна. Sql нь мэдээллийн сантай ажиллах, WordPress программ үүсгэхэд хэрэглэгддэг. Асуултуудыг хэрхэн ашиглах талаар нарийвчлан авч үзье.

Энэ юу вэ

Sql бол бүтэцлэгдсэн хайлтын хэл юм. Өгөгдлийн төрлийг тодорхойлох, түүнд хандах боломжийг олгох, мэдээллийг богино хугацаанд боловсруулахад зориулагдсан. Энэ нь таны интернет төсөл дээр үзэхийг хүссэн бүрэлдэхүүн хэсгүүд эсвэл зарим төрлийн үр дүнг тайлбарладаг.

Энгийнээр хэлбэл, энэхүү програмчлалын хэл нь мэдээллийн санд мэдээлэл нэмэх, өөрчлөх, хайх, харуулах боломжийг олгодог. Mysql-ийн алдартай болсон нь мэдээллийн санд суурилсан динамик интернет төслүүдийг бий болгоход ашигладагтай холбоотой юм. Тиймээс функциональ блог хөгжүүлэхийн тулд та энэ хэлийг сурах хэрэгтэй.

Юу хийж чадах вэ

Sql хэл нь дараахь зүйлийг зөвшөөрдөг.

  • хүснэгт үүсгэх;
  • өөр өөр өгөгдлийг хүлээн авах, хадгалахыг өөрчлөх;
  • мэдээллийг блок болгон нэгтгэх;
  • өгөгдлийг хамгаалах;
  • хандалтад хүсэлт үүсгэх.

Чухал! Sql-тэй харьцсаны дараа та WordPress-д ямар ч төвөгтэй програм бичиж болно.

Ямар бүтэцтэй

Өгөгдлийн сан нь Excel файл хэлбэрээр төлөөлөх боломжтой хүснэгтүүдээс бүрдэнэ.

Тэр нэр, багана, зарим мэдээлэл бүхий мөртэй. Та sql асуулга ашиглан ийм хүснэгт үүсгэж болно.

Та юу мэдэх хэрэгтэй вэ


Sql сурахад онцлох зүйлс

Дээр дурдсанчлан асуулга нь хүснэгтүүдээс бүрдсэн мэдээллийн санд шинэ мэдээллийг боловсруулж, оруулахад ашиглагддаг. Түүний мөр бүр тусдаа оруулга юм. Ингээд мэдээллийн сан үүсгэцгээе. Үүнийг хийхийн тулд дараах тушаалыг бичнэ үү.

"bazaname" мэдээллийн сан үүсгэх

Хашилтанд мэдээллийн сангийн нэрийг латинаар бичнэ. Түүний хувьд утга учиртай нэр олохыг хичээ. "111", "www" гэх мэт суурь үүсгэж болохгүй.

Өгөгдлийн санг үүсгэсний дараа суулгана уу:

'utf-8' НЭРИЙГ ТОХИРУУЛАХ

Энэ нь сайт дээрх агуулгыг зөв харуулахын тулд зайлшгүй шаардлагатай.

Одоо бид хүснэгт үүсгэж байна:

'bazaname' ХҮСНЭГТ ҮЗҮҮЛЭХ. "Хүснэгт" (

id INT (8) АВТО_ӨСЛҮҮЛЭХ АНХДАГЧ ТҮЛХҮҮР БИШ,

log VARCHAR (10),

VARCHAR-ыг нэвтрүүлэх (10),

огноо DATE

Хоёр дахь мөрөнд бид гурван шинж чанарыг бичсэн. Тэд юу гэсэн үг болохыг харцгаая:

  • NOT NULL шинж чанар нь нүд хоосон биш гэсэн үг (энэ талбар шаардлагатай);
  • AUTO_INCREMENT утга - автоматаар бөглөх;
  • PRIMARY KEY бол үндсэн түлхүүр юм.

Мэдээлэл хэрхэн нэмэх вэ

Үүсгэсэн хүснэгтийн талбаруудыг утгуудаар дүүргэхийн тулд INSERT хэллэгийг ашиглана уу. Бид дараах кодын мөрүүдийг бичнэ.

'Хүснэгт' ОРУУЛАХ

(нэвтрэх, нэвтрэх, огноо) VALUES

(‘Васа’, ‘87654321’,‘ 2017-06-21 18:38:44’);

Хаалтанд бид баганын нэрийг, дараагийнх нь утгыг зааж өгнө.

Чухал! Баганын нэр, утгын дарааллыг ажигла.

Мэдээллийг хэрхэн шинэчлэх вэ

Үүнийг хийхийн тулд UPDATE командыг ашиглана уу. Тодорхой хэрэглэгчийн нууц үгийг хэрхэн өөрчлөхийг харцгаая. Бид дараах кодын мөрүүдийг бичнэ.

ШИНЭЧЛЭХ ‘хүснэгт’ SET нэвтрүүлэх = ‘12345678’ WHERE id = ‘1’

Одоо '12345678' нууц үгээ солино уу. "id" = 1 гэсэн мөрөнд өөрчлөлтүүд хийгдсэн. Хэрэв та WHERE командыг бичихгүй бол тодорхой нэг мөр биш бүх мөр өөрчлөгдөнө.

Би танд ном худалдаж авахыг зөвлөж байна " Dummies-д зориулсан SQL ". Үүний тусламжтайгаар та мэдээллийн сантай алхам алхмаар мэргэжлийн түвшинд ажиллах боломжтой болно. Бүх мэдээлэл энгийнээс нарийн төвөгтэй хүртэл бүтэцлэгдсэн бөгөөд сайн хүлээж авах болно.

Бичлэгийг хэрхэн устгах вэ

Хэрэв та буруу зүйл бичсэн бол DELETE командыг ашиглан засаарай. UPDATE-тай адил ажиллана. Бид дараах кодыг бичнэ.

'Хүснэгт'-с УСТГАХ ID = '1'

Мэдээлэл авч байна

Өгөгдлийн сангаас утгыг авахын тулд SELECT командыг ашиглана уу. Бид дараах кодыг бичнэ.

'Хүснэгт'-ээс * СОНГОХ id = '1'

Энэ жишээнд бид хүснэгтэд байгаа бүх талбаруудыг сонгоно. Хэрэв та команд дээр "*" тэмдэг бичвэл энэ нь тохиолддог. Хэрэв та жишээ утгыг сонгох шаардлагатай бол бид дараах байдлаар бичнэ.

СОНГОХ лог, WHERE id = '1' хүснэгтээс дамжуулна уу

Өгөгдлийн сантай ажиллах чадвар хангалтгүй байх болно гэдгийг тэмдэглэх нь зүйтэй. Мэргэжлийн интернет төсөл бий болгохын тулд та мэдээллийн сангаас хуудсууд руу өгөгдлийг хэрхэн нэмэх талаар сурах хэрэгтэй болно. Үүнийг хийхийн тулд php вэб програмчлалын хэлтэй танилцаарай. Энэ нь танд туслах болно Михаил Русаковын ангийн хичээл .


Ширээ унагаж байна

DROP хүсэлтийн үед тохиолддог. Үүнийг хийхийн тулд дараах мөрүүдийг бичнэ үү.

DROP TABLE хүснэгт;

Тодорхой нөхцлийн дагуу хүснэгтээс бичлэг гаргах

Ийм кодыг авч үзье:

Хүснэгтээс id, улс, хотыг СОНГООРОЙ хүмүүс> 150000000

Энэ нь зуун тавин саяас дээш хүн амтай улс орнуудын бүртгэлийг харуулах болно.

Холбоо

Join ашиглан олон хүснэгтийг хооронд нь холбох боломжтой. Энэ нь хэрхэн ажилладаг вэ, энэ видеог илүү дэлгэрэнгүй үзнэ үү:

PHP болон MySQL

Интернет төсөл зохиохдоо лавлагаа авах нь нийтлэг зүйл гэдгийг би дахин онцлон хэлмээр байна. Тэдгээрийг php баримт бичигт ашиглахын тулд дараах процедурыг дагана уу.

  • Бид мэдээллийн санд mysql_connect () командыг ашиглан холбогддог;
  • mysql_select_db () ашиглан шаардлагатай мэдээллийн санг сонгох;
  • Бид хүсэлтийг mysql_fetch_array () ашиглан боловсруулдаг;
  • Бид mysql_close () командын тусламжтайгаар холболтыг хаадаг.

Чухал! Өгөгдлийн сантай ажиллах нь тийм ч хэцүү биш юм. Гол нь хүсэлтээ зөв бичих хэрэгтэй.

Шинэхэн вэбмастерууд бодох болно. Энэ сэдвээр юу унших вэ? Би Мартин Граберын номыг санал болгохыг хүсч байна " Зөвхөн мөнх бус хүмүүст зориулсан SQL ". Эхлэгчдэд бүх зүйл ойлгомжтой байхаар бичсэн байна. Үүнийг лавлах ном болгон ашигла.

Гэхдээ энэ бол онол. Практикт нөхцөл байдал ямар байна вэ? Бодит байдал дээр интернетийн төслийг бий болгохоос гадна Google болон Yandex-ийн ТОП-д хүргэх шаардлагатай. Видео курс " Вэбсайт үүсгэх, сурталчлах ».


Видео заавар

Асуулт хэвээр байна уу? Онлайн видеог илүү дэлгэрэнгүй үзээрэй.

Дүгнэлт

Тиймээс, sql асуулга бичих нь тийм ч хэцүү биш боловч ямар ч вэбмастер үүнийг хийх ёстой. Энэ нь дээр дурдсан видео курсуудад туслах болно. -д бүртгүүлнэ үү миний ВКонтакте групп шинэ сонирхолтой мэдээлэл гарч ирснийг хамгийн түрүүнд мэдэх.

Ихэнх орчин үеийн вэб програмууд мэдээллийн сантай харилцдаг ба ихэвчлэн хэлийг ашигладаг SQL. Бидний аз болоход энэ хэл сурахад маш амархан. Энэ нийтлэлд бид энгийн зүйлийг авч үзэх болно SQL хүсэлт гаргаж, тэдгээрийг хэрхэн ашиглах талаар суралц MySQL мэдээллийн сан.

Чамд юу хэрэгтэй?

SQL (бүтэцлэгдсэн асуулгын хэл) гэх мэт мэдээллийн баазын удирдлагын системтэй харилцах зорилгоор тусгайлан боловсруулсан хэл MySQL, Oracle, Sqlite болон бусад ... Тоглуулах SQL Энэ нийтлэл дэх хүсэлтүүд, би танд суулгахыг зөвлөж байна MySQL локал компьютер руу. Мөн би ашиглахыг зөвлөж байна phpMyAdmin харааны интерфейс болгон.

Энэ бүхэн хүн бүрийн хайртай Денверт байдаг. Энэ нь юу болохыг, хаанаас авахаа хүн бүр мэддэг байх ёстой гэж би бодож байна :). Чадахөөр WAMP эсвэл MAMP ашиглана уу.

Денверт баригдсан байдаг MySQL консол. Бид үүнийг ашиглах болно.

Өгөгдлийн сан үүсгэх:мэдээллийн сан үүсгэх

Энэ бол бидний анхны хүсэлт. Бид цаашдын ажилд зориулж анхны мэдээллийн санг бий болгоно.

Нэгдүгээрт, нээх MySQL консол болон нэвтрэх. Учир нь WAMP өгөгдмөл нууц үг хоосон байна. Энэ бол юу ч биш :). Учир нь MAMP нь "үндэс" юм. Денверийн хувьд үүнийг тодруулах хэрэгтэй.

Нэвтэрсэний дараа дараах мөрийг оруулаад дарна ууОруулна уу:

МЭДЭЭЛЛИЙН САН БҮТЭЭГДЭХ my_first_db;

Бусад хэл дээрхтэй адил асуултын төгсгөлд цэгтэй таслал (;) нэмэгддэг болохыг анхаарна уу.

Мөн SQL дээрх командуудыг үзнэ үү Том жижгээр бичхээс хамаарна. Бид тэдгээрийг том үсгээр бичдэг.

Сонголт зөвхөн: Тэмдэгтийн багцболон Харьцуулах

Хэрэв та суулгахыг хүсвэлтэмдэгтийн багц болон эвсэл байж болно дараах тушаалыг бичнэ үү:

ӨГӨГДЛИЙН САН БҮТЭЭГДЭХ my_first_db өгөгдмөл тэмдэгтийн багц utf8 COLLATE utf8_general_ci;

Дэмжигдсэн тэмдэгтүүдийн жагсаалтыг олно MySQL.

МЭДЭЭЛЛИЙН САНГ ҮЗҮҮЛЭХ:бүх мэдээллийн санг жагсаадаг

Энэ тушаалыг бүх боломжтой мэдээллийн санг харуулахад ашигладаг.

ӨГӨГДӨЛИЙН САН:мэдээллийн санг устгах

Та энэ асуулгыг ашиглан одоо байгаа DB-г устгаж болно.

Энэ тушаал нь анхааруулгагүйгээр ажилладаг тул болгоомжтой байгаарай. Хэрэв таны мэдээллийн санд өгөгдөл байгаа бол бүгдийг нь устгах болно.

ХЭРЭГЛЭЭ:Өгөгдлийн сангийн сонголт

Техникийн хувьд энэ нь асуулга биш, харин оператор бөгөөд төгсгөлд цэг таслал шаарддаггүй.

Энэ нь MySQL-д хэлдэг одоогийн сессийн өгөгдмөл мэдээллийн санг сонгоно уу. Одоо бид мэдээллийн сантай хүснэгт үүсгэх болон бусад зүйлсийг хийхэд бэлэн боллоо.

Өгөгдлийн сангийн хүснэгт гэж юу вэ?

Та DB дахь хүснэгтийг дараах байдлаар төлөөлж болно Excel файл.

Зурган дээрх шиг хүснэгтүүд баганын нэр, мөр, мэдээлэлтэй байна. Via SQL асуулгад бид ийм хүснэгтүүдийг үүсгэж болно. Мөн бид мэдээлэл нэмэх, унших, шинэчлэх, устгах боломжтой.

Хүснэгт үүсгэх: Хүснэгт үүсгэх

C Энэ хүсэлтийг ашиглан бид мэдээллийн санд хүснэгт үүсгэж болно. Уучлаарай, бичиг баримт MySQL Энэ талаар шинэхэн хүмүүст тийм ч тодорхой биш байна. Энэ төрлийн асуулгын бүтэц нь маш төвөгтэй байж болох ч бид хялбараас эхлэх болно.

Дараах асуулга нь 2 баганатай хүснэгт үүсгэх болно.

CREATE TABLE хэрэглэгчид (хэрэглэгчийн нэр VARCHAR (20), үүсгэх_огноо огноо);

Бид асуултуудаа олон мөрөнд болон доголын цонхоор бичиж болно гэдгийг анхаарна уу.

Эхний мөр нь энгийн. Бид зүгээр л "хэрэглэгч" гэсэн хүснэгтийг үүсгэдэг. Дараа нь хаалтанд таслалаар тусгаарлагдсан бүх баганын жагсаалт байна. Баганын нэр бүрийн ард VARCHAR эсвэл DATE гэх мэт мэдээллийн төрлүүд байна.

VARCHAR (20) гэдэг нь багана нь стринг төрлийн бөгөөд хамгийн ихдээ 20 тэмдэгт байж болно гэсэн үг. DATE нь мөн огноог "YYYY - MM-DD" форматаар хадгалахад ашигладаг мэдээллийн төрөл юм.

АНХАН ТҮЛХҮҮР ( үндсэн түлхүүрh)

Дараагийн хайлтыг гүйцэтгэхийн өмнө бид мөн "user_id"-д зориулсан баганыг оруулах шаардлагатай бөгөөд энэ нь бидний үндсэн түлхүүр болно. Та анхдагч түлхүүрийг хүснэгтийн мөр бүрийг тодорхойлоход ашигладаг мэдээлэл гэж ойлгож болно.

CREATE TABLE хэрэглэгчид (хэрэглэгчийн_id INT AUTO_INCREMENT PRIMARY KEY, хэрэглэгчийн нэр VARCHAR (20), үүсгэх_огноо огноо);

INT 32 бит бүхэл тооны төрлийг (тоо гэх мэт) болгодог. AUTO_INCREMENT автоматаар шинэ утгыг үүсгэдэг ID Бид мэдээллийн шинэ мөр нэмэх болгонд. Энэ нь сонголттой боловч бүх үйл явцыг хөнгөвчлөх болно.

Энэ багана нь бүхэл тоо байх албагүй ч хамгийн түгээмэл хэрэглэгддэг. Анхдагч түлхүүр байх нь бас сонголттой боловч өгөгдлийн сангийн архитектур, гүйцэтгэлийн хувьд үүнийг ашиглахыг зөвлөж байна.

Асуулга ажиллуулцгаая:

Хүснэгтүүдийг харуулах:бүх хүснэгтийг харуулах

Энэ асуулга нь мэдээллийн санд байгаа хүснэгтүүдийн жагсаалтыг авах боломжийг танд олгоно.

ТАЙЛБАР:Хүснэгтийн бүтцийг харуулах

Та одоо байгаа хүснэгтийн бүтцийг харуулахын тулд энэ асуулгыг ашиглаж болно.

Баганууд нь бүх шинж чанаруудтай харагдана.

ХҮСНЭГТ:хүснэгтийг устгах

Яг л DROP DATABASES шиг, Энэ асуулга нь хүснэгт болон түүний агуулгыг анхааруулахгүйгээр устгадаг.

ХҮСНЭГТИЙГ ӨӨРЧЛӨХ: хүснэгтийг өөрчлөх

Энэ асуулга нь хүснэгтэд илүү их өөрчлөлт хийх боломжтой тул нарийн төвөгтэй бүтэцтэй байж болно. Зарим жишээг авч үзье.

(хэрэв та хүснэгтийг сүүлчийн алхамд устгасан бол туршилтын зорилгоор дахин үүсгэнэ үү)

БАГА НЭМЖ БАЙНА

ALTER TABLE хэрэглэгчид хэрэглэгчийн нэрийн ДАРАА VARCHAR (100) цахим шуудан НЭМЭХ;

SQL-ийн уншигдах чадвар сайтай учир үүнийг нэг бүрчлэн тайлбарлах нь утгагүй гэж бодож байна. Бид "хэрэглэгчийн нэр"-ийн дараа "имэйл" шинэ багана нэмнэ.

БАГАНА УСТГАХ

Энэ нь бас маш хялбар байсан. Өгөгдлийг сануулгагүйгээр устгах боломжтой тул энэ асуулгыг болгоомжтой ашиглаарай.

Цаашид туршилт хийхийн тулд саяхан устгасан баганаа сэргээнэ үү.

БАГАНА ӨӨРЧЛӨЛТ ХИЙЖ БАЙНА

Заримдаа та баганын шинж чанарт өөрчлөлт оруулахыг хүсч болох бөгөөд үүний тулд үүнийг бүрэн устгах шаардлагагүй болно.

Энэ асуулга нь хэрэглэгчийн баганын нэрийг "хэрэглэгчийн_нэр" болгож, төрлөө VARCHAR (20)-аас VARCHAR (30) болгон өөрчилсөн. Ийм өөрчлөлт нь хүснэгтийн өгөгдлийг өөрчлөх ёсгүй.

ОРУУЛАХ: Хүснэгтэд мэдээлэл нэмэх

Дараах асуулгыг ашиглан хүснэгтэд зарим мэдээллийг оруулъя.

Таны харж байгаагаар VALUES () нь таслалаар тусгаарлагдсан утгуудын жагсаалтыг агуулна. Бүх утгууд нь нэг баганад байна. Мөн утгууд нь хүснэгтийг үүсгэх үед тодорхойлсон баганын дарааллаар байх ёстой.

PRIMARY KEY талбарын эхний NULL утгыг "user_id" гэж нэрлэсэн болохыг анхаарна уу. Багана нь AUTO_INCREMENT шинж чанартай тул бид ID-г автоматаар үүсгэхийн тулд үүнийг хийдэг. Эхний удаа мэдээлэл нэмэхэд ID нь 1 байх болно. Дараагийн мөр нь 2, гэх мэт ...

ХОЛБООТОЙ СОНГОЛТ

Мөр нэмэх өөр нэг асуулгын сонголт бий.

Энэ удаад бид VALUES-ын оронд SET түлхүүр үгийг ашигласан бөгөөд энэ нь хаалтгүй. Хэд хэдэн нюансууд байдаг:

Баганыг алгасаж болно. Жишээлбэл, бид "user_id"-д утгыг өгөөгүй бөгөөд энэ нь өгөгдмөл AUTO_INCREMENT утгаараа байх болно. Хэрэв та VARCHAR баганыг орхивол хоосон мөр нэмэгдэх болно.

Багана бүрийг нэрээр нь дурдах ёстой. Үүнээс болж өмнөх хувилбараас ялгаатай нь тэдгээрийг ямар ч дарааллаар дурдаж болно.

2-р хувилбар

Энд бас нэг сонголт байна.

Дахин хэлэхэд баганын нэрийн лавлагаа байгаа тул та утгыг дурын дарааллаар оруулж болно.

LAST_INSERT_ID ()

Та энэ хүсэлтийг ашиглан одоогийн сешнийн сүүлийн эгнээнд AUTO_INCREMENT байсан ID-г авах боломжтой.

ОДОО ()

Одоо MySQL функцийг асуулгад хэрхэн ашиглаж болохыг харуулах цаг болжээ.

NOW () функц нь одоогийн огноог харуулдаг. Тиймээс та үүнийг ашиглан шинэ мөр оруулахдаа баганын огноог одоогийн огноо руу автоматаар тохируулах боломжтой.

Бид 1 анхааруулга хүлээн авсан гэдгийг анхаарна уу, гэхдээ үүнийг үл тоомсорло. Үүний шалтгаан нь NOW () нь түр зуурын мэдээллийг харуулахад бас ашиглагддаг.

СОНГОХ: Хүснэгтээс өгөгдлийг уншиж байна

Хэрэв бид хүснэгтэд мэдээлэл нэмбэл тэндээс хэрхэн уншиж сурах нь логик юм. Энд SELECT асуулга бидэнд туслах болно.

Дараах нь хүснэгтийг унших боломжтой хамгийн энгийн SELECT асуулга юм.

Энэ тохиолдолд од (*) нь бид хүснэгтээс бүх талбарыг хүссэн гэсэн үг юм. Хэрэв та зөвхөн тодорхой багана авахыг хүсч байвал асуулга иймэрхүү харагдах болно.

Нөхцөл байдалХААНА

Ихэнхдээ бид бүх баганыг сонирхдоггүй, зөвхөн заримыг нь сонирхдог. Жишээлбэл, бид зөвхөн "nettuts" хэрэглэгчийн имэйл хаягийг авахыг хүсч байна гэж бодъё.

WHERE нь асуулгад нөхцөл тохируулах, нарийвчилсан сонголт хийх боломжийг олгоно.

Програмчлалын нэгэн адил хоёр биш харин тэгш байдлын хувьд нэг тэнцүү (=) тэмдгийг ашигладаг болохыг анхаарна уу.

Та мөн харьцуулалтыг ашиглаж болно.

Нөхцөлүүдийг нэгтгэхийн тулд БА эсвэл OR-г ашиглаж болно:

Тоон утгыг иш татах ёсгүй гэдгийг анхаарна уу.

IN ()

Энэ нь олон утгыг түүвэрлэхэд хэрэгтэй.

LIKE

"Зохиолсон тэмдэгт" хүсэлт гаргах боломжийг танд олгоно

% тэмдгийг орлуулагч тэмдэг болгон ашигладаг. Энэ нь юу ч гэсэн байрандаа байж болно гэсэн үг.

Нөхцөл байдалЗАХИАЛАХ

Хэрэв та ямар нэгэн шалгуураар эрэмбэлсэн үр дүнг авахыг хүсвэл

Өгөгдмөл дараалал нь ASC (багаас дээд хүртэл). Үүний эсрэгээр DESC ашигладаг.

ХЯЗГААР ... ОФСЕТ ...

Та олж авсан үр дүнгийн тоог хязгаарлаж болно.

LIMIT 2 нь зөвхөн эхний 2 үр дүнг авдаг. ХЯЗГААР 1 ОФСЕТ 2 нь эхний 2-ын дараа 1 үр дүн авна. ХЯЗГААР 2, 1 гэдэг нь ижил утгатай (зүгээр л анхаарлаа хандуулаарай, эхлээд офсет, дараа нь хязгаарлах).

ШИНЭЧЛЭХ: Хүснэгт дэх мэдээлэлд өөрчлөлт оруулна уу

Энэ асуулга нь хүснэгтийн мэдээллийг өөрчлөхөд ашиглагддаг.

Ихэнх тохиолдолд үүнийг WHERE заалттай хамт ашигладаг, учир нь та тодорхой багануудыг өөрчлөхийг хүсэх болно. Хэрэв WHERE заалт байхгүй бол өөрчлөлтүүд бүх мөрөнд нөлөөлнө.

Та мөн өөрчлөх шаардлагатай мөрийн тоог хязгаарлахын тулд LIMIT-г ашиглаж болно.

УСТГАХ: Хүснэгтээс мэдээллийг устгах

Яг UPDATE шиг энэ асуулга WHERE-д ашиглагддаг:

Хүснэгтийн агуулгыг устгахын тулд та үүнийг дараах байдлаар хийж болно.

Хэрэглэгчдээс УСТГАХ;

Гэхдээ ашиглах нь дээрТАСАХ

Энэ асуулга нь устгахаас гадна утгуудыг дахин тохируулдаг AUTO_INCREMENT мөн дахин мөр нэмэх үед тооллого тэгээс эхэлнэ.УСТГАХ тэгэхгүй, тоолол үргэлжилж байна.

Доод утгууд болон тусгай үгсийг идэвхгүй болгох

Мөрийн утгууд

Зарим тэмдэгтүүдийг идэвхгүй болгох шаардлагатай (зугтах ), эсвэл асуудал гарч болзошгүй.

Үүний тулд урвуу зураасыг ашигладаг.(\).

Тусгай үгс

MySQL-ээс хойш олон тусгай үгс байдаг (СОНГОХ эсвэл ШИНЭЧЛЭХ ), тэдгээрийг ашиглахдаа алдаа гаргахгүйн тулд та хашилтыг ашиглах ёстой. Гэхдээ энгийн ишлэл биш, харин эдгээр(`).

Өөрөөр хэлбэл, та "гэсэн багана нэмэх хэрэгтэй болно.устгах ", үүнийг дараах байдлаар хийх ёстой:

Дүгнэлт

Дуустал нь уншсанд баярлалаа. Энэ нийтлэл танд хэрэгтэй байсан гэж найдаж байна. Энэ хараахан дуусаагүй байна! Үргэлжлэл бий:).

Би та бүхэнд эхлэгчдэд зориулсан SQL нийтлэлийн үнэгүй орчуулгыг толилуулж байна

Илүү орчин үеийн вэб програмууд нь мэдээллийн сантай харилцаж, ихэвчлэн хэлийг ашигладаг SQL... Бидний аз болоход энэ хэлийг сурахад маш амархан. Энэ нийтлэлээс бид SQL асуулгын үндсийг болон тэдгээр нь өгөгдлийн сантай хэрхэн харьцдаг талаар сурах болно. MySQL.

Таньд юу хэрэгтэй вэ

SQL (Structured Query Language) нь харилцааны өгөгдлийн сангийн удирдлагын системүүдтэй (DBMS) харилцахад зориулагдсан хэл юм. MySQL, Oracle, Sqliteмөн бусад. Энэ нийтлэлийн SQL асуулгыг гүйцэтгэхийн тулд та суулгасан гэж бодож байна MySQL... Би бас ашиглахыг зөвлөж байна phpMyAdminвизуал харуулах хэрэгсэл болгон MySQL.

Дараах програмууд нь суулгахад хялбар болгоно MySQLболон phpMyAdminтаны компьютерт:

  • Windows-д зориулсан WAMP
  • Mac-д зориулсан MAMP

Командын мөрөнд асуулга гүйцэтгэж эхэлцгээе. WAMPаль хэдийн консолд үүнийг агуулж байна MySQL... Учир нь MAMP, та үүнийг унших хэрэгтэй байж магадгүй.

Өгөгдлийн сан үүсгэх: Өгөгдлийн сан үүсгэх

Бидний хамгийн анхны хүсэлт. Бид хамтран ажиллах мэдээллийн санг бий болгоно.

Юуны өмнө консолыг нээнэ үү MySQLболон нэвтэрнэ үү. Учир нь WAMP, анхдагчаар хоосон нууц үгийг ашигладаг. Учир нь MAMPнууц үг нь "root" байх ёстой.

Нэвтрэн орсны дараа энэ хүсэлтийг бичээд дарна уу Оруулна уу:

МЭДЭЭЛЛИЙН САН БҮТЭЭГДЭХ my_first_db;

Таны кодын мөрийн төгсгөлд байгаа шиг асуулгын төгсгөлд цэгтэй таслал (;) нэмдэг болохыг анхаарна уу.

Мөн түлхүүр үгс МЭДЭЭЛЛИЙН САН БҮТЭЭГДЭХбүх түлхүүр үгийн адил том жижиг үсгийн мэдрэмжгүй SQL... Гэхдээ илүү сайн уншихын тулд бид тэдгээрийг том үсгээр бичих болно.

Жич: тэмдэгтийн багц ба эвлүүлэг

Хэрэв та өгөгдмөл тэмдэгтийн багц болон эвлүүлэх дарааллыг тохируулахыг хүсвэл ижил төстэй асуулга ашиглана уу:

ӨГӨГДЛИЙН САН БҮТЭЭГДЭХ my_first_db өгөгдмөл тэмдэгтийн багц utf8 COLLATE utf8_general_ci;

Та дэмжигдсэн тэмдэгтүүдийн жагсаалт болон хавсралтын жагсаалтыг эндээс олох болно MySQL.

ӨГӨГДЛИЙН САНГ ҮЗҮҮЛЭХ: Бүх мэдээллийн сангийн жагсаалт

Энэ асуулга нь бүх мэдээллийн санг харуулахад ашиглагддаг.

DROP DATABASE: Өгөгдлийн санг буулгана

Энэ асуулгын тусламжтайгаар та одоо байгаа мэдээллийн санг орхиж болно.

Энэ асуулга нь ямар ч анхааруулга харуулахгүй тул болгоомжтой байгаарай. Таны мэдээллийн санд хүснэгт, өгөгдөл байгаа бол асуулга нь бүгдийг нь агшин зуур устгах болно.

Техникийн хувьд энэ нь хүсэлт биш юм. Энэ нь "оператор" бөгөөд төгсгөлд цэг таслал шаарддаггүй.

Тэр мэдээлж байна MySQLанхдагч мэдээллийн санг сонгоод сесс дуустал түүнтэй ажиллах хэрэгтэй. Бид одоо энэ мэдээллийн санд хүснэгт болон бусад зүйлсийг үүсгэхэд бэлэн боллоо.

Өгөгдлийн сангийн хүснэгт гэж юу вэ?

Та мэдээллийн сан дахь хүснэгтийг ердийн хүснэгт эсвэл бүтэцлэгдсэн өгөгдөл бүхий csv файл гэж ойлгож болно.

Энэ жишээн дээрх шиг хүснэгт нь мөрийн нэр, өгөгдлийн баганатай байна. SQL асуулга ашиглан бид энэ хүснэгтийг үүсгэж болно. Мөн бид өгөгдөл нэмэх, унших, өөрчлөх, устгах боломжтой.

CREATE TABLE: Хүснэгт үүсгэх

Энэ асуулгын тусламжтайгаар бид мэдээллийн санд хүснэгт үүсгэж болно. Уучлаарай, баримт бичиг MySQLшинэ хэрэглэгчдэд тийм ч ээлтэй биш. Энэ асуулгын бүтэц нь маш төвөгтэй байж болох ч бид энгийнээс эхэлнэ.

Дараах асуулга нь хоёр багана бүхий хүснэгтийг үүсгэдэг.

CREATE TABLE хэрэглэгчид (хэрэглэгчийн нэр VARCHAR (20), үүсгэх_огноо огноо);

Бид хэд хэдэн мөрөнд асуулга бичиж, ашиглах боломжтойг анхаарна уу Табдоголын хувьд.

Эхний мөр нь энгийн. Бид нэртэй хүснэгт үүсгэдэг хэрэглэгчид... Цаашилбал, хаалтанд хүснэгтийн багануудыг таслалаар тусгаарлаж жагсаав. Баганын нэр бүрийн араас өгөгдлийн төрлийг оруулна ВАРЧАРэсвэл огноо.

VARCHAR (20)багана нь мөрийн төрлийн бөгөөд 20 тэмдэгтээс илүүгүй урттай байна гэсэн үг. огноо- "YYYY-MM-DD" форматаар огноог хадгалах зориулалттай өгөгдлийн төрөл.

Үндсэн түлхүүр

Энэ асуулгыг гүйцэтгэхийн өмнө бид багана оруулах ёстой хэрэглэгчийн_id, энэ нь АНХАН ТҮЛХҮҮР байх болно. Хэт их дэлгэрэнгүй ярихгүйгээр үндсэн түлхүүрийг хүснэгтийн өгөгдлийн мөр бүрийг таних арга гэж бодож болно.

Хүсэлт нь дараах байдалтай байна.

CREATE TABLE хэрэглэгчид (хэрэглэгчийн_id INT AUTO_INCREMENT PRIMARY KEY, хэрэглэгчийн нэр VARCHAR (20), үүсгэх_огноо огноо);

INT- 32 бит бүхэл тооны төрөл (тоон). AUTO_INCREMENTөгөгдлийн мөр нэмэгдэх бүрд автоматаар шинэ ID дугаар үүсгэдэг. Энэ нь шаардлагагүй, гэхдээ энэ нь илүү тохиромжтой.

Энэ багана нь бүхэл тоо биш байж болох ч энэ нь хамгийн түгээмэл өгөгдлийн төрөл юм. Үндсэн түлхүүр багана нь сонголттой боловч өгөгдлийн сангийн гүйцэтгэл, архитектурыг сайжруулахын тулд үүнийг ашиглахыг зөвлөж байна.

Асуулга ажиллуулцгаая:

ХҮСНЭГТ ҮЗҮҮЛЭХ: Бүх хүснэгтийн жагсаалт

Асуулга нь одоогийн мэдээллийн санд байгаа бүх хүснэгтийн жагсаалтыг авах боломжийг танд олгоно.

ТАЙЛБАР: Хүснэгтийн бүтцийг харуул

Одоо байгаа хүснэгтийн бүтцийг харахын тулд энэ асуулгыг ашиглана уу.

Үүний үр дүнд талбарууд (баганууд) болон тэдгээрийн шинж чанаруудыг харуулав.

DROP TABLE: Хүснэгтийг буулгана

Түүнээс гадна МЭДЭЭЛЛИЙН САНГ УНТАХ, энэ асуулга нь хүснэгт болон түүний агуулгыг ямар ч анхааруулгагүйгээр устгадаг.

ALTER TABLE: Хүснэгтийг өөрчлөх

Ийм асуулга нь хүснэгтэд олон өөрчлөлт хийх боломжтой тул нарийн төвөгтэй байж болно. Хэд хэдэн энгийн жишээг авч үзье.

Унших чадварт баярлалаа SQL, энэ хүсэлт нь өөрөө ойлгомжтой юм.

Устгах нь адилхан амархан. Асуултыг болгоомжтой ашиглаарай, өгөгдлийг анхааруулгагүйгээр устгана.

Талбарыг дахин нэмье имэйл, дараа нь шаардлагатай хэвээр байх болно:

ALTER TABLE хэрэглэгчид хэрэглэгчийн нэрийн ДАРАА VARCHAR (100) цахим шуудан НЭМЭХ;

Заримдаа та баганын шинж чанарыг өөрчлөх шаардлагатай байж магадгүй бөгөөд та үүнийг устгаад дахин үүсгэх шаардлагагүй болно.

Энэ хүсэлт нь талбарын нэрийг өөрчилдөг хэрэглэгчийн нэр v хэрэглэгчийн_нэрболон төрлийг нь өөрчилдөг VARCHAR (20)дээр VARCHAR (30)... Ийм өөрчлөлт нь хүснэгтийн өгөгдөлд нөлөөлөхгүй.

INSERT: Хүснэгтэд өгөгдөл нэмэх

Хүснэгтэнд асуулга ашиглан бичлэг нэмье.

Өөрөө харж байгаа байх, ҮНЭ ЦЭНЭ ()таслалаар тусгаарласан утгуудын жагсаалтыг агуулна. Мөрний утгуудыг дан хашилтанд оруулсан болно. Хүснэгтийг үүсгэх үед утгууд нь заасан дарааллаар байх ёстой.

Эхний утга нь гэдгийг анхаарна уу NULLбидний нэрлэсэн талбарыг үндсэн түлхүүрийн хувьд хэрэглэгчийн_id... Энэ талбар нь гэж тэмдэглэгдсэн учраас л AUTO_INCREMENTмөн id автоматаар үүсгэгддэг. Өгөгдлийн эхний мөрөнд 1 гэсэн id байна. Дараагийн нэмэх мөр нь 2 гэх мэт.

Альтернатив синтакс

Энд мөр оруулах өөр нэг синтакс байна.

Энэ удаад бид түлхүүр үгийг ашигласан SETоронд нь ҮНЭ ЦЭНЭ... Хэд хэдэн зүйлийг тэмдэглэе:

  • Баганыг орхигдуулж болно. Жишээлбэл, бид талбарт үнэ цэнэ өгөөгүй хэрэглэгчийн_idгэж тэмдэглэсэн учраас AUTO_INCREMENT... Хэрэв та төрөлтэй талбарт утга оноохгүй бол ВАРЧАР, дараа нь анхдагчаар энэ нь хоосон мөрийн утгыг авна (хүснэгт үүсгэх үед өөр өгөгдмөл утгыг заагаагүй бол).
  • Багана бүрийг нэрээр нь дурдаж болно. Тиймээс талбарууд нь өмнөх синтаксаас ялгаатай нь ямар ч дарааллаар байж болно.

Альтернатив синтакс дугаар 2

Өөр нэг жишээ энд байна.

Өмнөх шиг та талбаруудыг нэрээр нь дурдаж болно, тэд ямар ч дарааллаар явж болно.

Сүүлд оруулсан мөрийн id-г авахын тулд энэ асуулгыг ашиглана уу.

ОДОО ()

Функцуудыг хэрхэн ашиглахыг танд үзүүлэх цаг болжээ MySQLхүсэлтүүдэд.

Чиг үүрэг ОДОО ()одоогийн огноог буцаана. Тухайн төрлийн талбарт одоогийн огноог автоматаар нэмэхийн тулд үүнийг ашиглана уу огноо.

-аас сэрэмжлүүлэг хүлээн авсныг анхаарна уу MySQLгэхдээ энэ тийм ч чухал биш. Үүний шалтгаан нь функц юм ОДОО ()үнэндээ цаг хугацааны мэдээллийг буцаадаг.

Бид талбай бий болгосон үүсгэх_огнооЭнэ нь зөвхөн огноог агуулж болох ба цаг хугацаа агуулаагүй тул өгөгдлийг таслав. Оронд нь ОДОО ()бид ашиглаж болно CURDATE ()Энэ нь зөвхөн одоогийн огноог буцаадаг боловч эцсийн үр дүн нь ижил байх болно.

SELECT: Хүснэгтээс өгөгдөл авч байна

Бидний бичсэн өгөгдөл уншихаас нааш ашиггүй нь ойлгомжтой. Аврахаар хүсэлт ирдэг СОНГОХ.

Хүсэлт ашиглах хамгийн энгийн жишээ СОНГОХхүснэгтээс өгөгдлийг уншихын тулд:

Одоор (*) нь бид хүснэгтийн бүх баганыг авахыг хүсч байна гэсэн үг юм. Хэрэв та зөвхөн тодорхой багануудыг авах шаардлагатай бол дараах зүйлийг ашиглана уу:

Ихэнхдээ бид бүгдийг биш, зөвхөн тодорхой мөрүүдийг авахыг хүсдэг. Жишээ нь хэрэглэгчийн цахим шуудангийн хаягийг авъя nettuts.

Энэ нь IF нөхцөлтэй төстэй. WHERE нь асуулгад нөхцөл тавьж, хүссэн үр дүнг авах боломжийг олгоно.

Ганц тэмдгийг (=) тэгш байдлын нөхцөлд ашигладаг бөгөөд давхар (==) биш харин програмчлалд ашигладаг.

Та бусад нөхцлийг ашиглаж болно:

БАболон ЭСВЭЛнөхцөлийг нэгтгэхэд ашигладаг:

Тоон утгыг хашилтанд оруулах шаардлагагүй гэдгийг анхаарна уу.

IN ()

Олон утгыг харьцуулахад ашигладаг.

LIKE

Хайлтын загвар тохируулах боломжийг танд олгоно.

Загварыг тодорхойлохын тулд хувийн тэмдгийг (%) ашигладаг.

ORDER BY заалт

Хэрэв та үр дүнг эрэмбэлэхийг хүсвэл энэ нөхцлийг ашиглана уу:

Өгөгдмөл захиалга байна ASC(Өсөх). Нэмэх DESCурвуу дарааллаар эрэмбэлэх.

ХЯЗГААР ... ОФСЕТ ...

Та буцаасан мөрийн тоог хязгаарлаж болно.

ХЯЗГААР 2эхний хоёр мөрийг авдаг. ХЯЗГААР 1 ОФСЕТ 2эхний хоёрын дараа нэг мөр авдаг. ХЯЗГААР 2, 1ижил утгатай, зөвхөн эхний тоо нь офсет, хоёр дахь нь мөрийн тоог хязгаарладаг.

ШИНЭЧЛЭЛТ: Хүснэгт дэх өгөгдлийг шинэчилж байна

Энэ асуулга нь хүснэгтийн өгөгдлийг шинэчлэхэд ашиглагддаг.

Ихэнх тохиолдолд -тай хамт хэрэглэгддэг ХААНАтодорхой мөрүүдийг шинэчлэх. Хэрэв нөхцөл байдал ХААНАзаагаагүй бол өөрчлөлтүүд бүх мөрөнд хэрэгжинэ.

Өөрчлөгдөж болох мөрүүдийг хязгаарлахын тулд та ашиглаж болно ХЯЗГААР.

УСТГАХ: Хүснэгтээс өгөгдлийг устгах

Түүнээс гадна , энэ асуулга нь ихэвчлэн нөхцөлтэй хамт хэрэглэгддэг ХААНА.

Хүснэгтийг таслах

Хүснэгтээс агуулгыг устгахын тулд дараах асуултыг ашиглана уу.

Хэрэглэгчдээс УСТГАХ;

Илүү сайн гүйцэтгэлтэй ашиглахын тулд .

Мөн талбайн тоолуурыг дахин тохируулна AUTO_INCREMENT, тиймээс шинээр нэмсэн мөрүүд id-тэй тэнцүү байх болно 1. Ашиглах үед энэ нь болохгүй бөгөөд тоолуур өссөөр байх болно.

Мөрийн утгууд болон тусгай үгсээс зугтах

Мөрийн утгууд

Зарим тэмдэгтүүдээс зугтах шаардлагатай эсвэл асуудал гарч болзошгүй.

Урвуу зураасыг (\) зугтахад ашигладаг.

Энэ нь аюулгүй байдлын үүднээс маш чухал юм. Өгөгдлийн санд бичихээс өмнө хэрэглэгчийн аливаа мэдээллийг орхих ёстой. В PHP mysql_real_escape_string () функц эсвэл бэлтгэсэн мэдэгдлүүдийг ашиглана уу.

Тусгай үгс

Түүнээс хойш MySQLгэх мэт хадгалагдсан олон үгс СОНГОХэсвэл Төөрөгдөл гаргахгүйн тулд багана болон хүснэгтийн нэрийг хашилтанд оруулна. Түүнээс гадна та энгийн ишлэл биш, харин арын тэмдэг (`) ашиглах хэрэгтэй.

Ямар нэг шалтгааны улмаас та нэртэй багана нэмэхийг хүсч байна гэж бодъё :

Дүгнэлт

Нийтлэлийг уншсанд баярлалаа. Би чамд тэр хэлийг харуулж чадсан гэж найдаж байна SQLмаш ажиллагаатай, сурахад хялбар.