SQL
May 28, 2016 | Author: Ondo Tsogzol | Category: N/A
Short Description
Download SQL...
Description
Өгөгдлийн сан удирдах систем
Лекц - 1 SQL Server нь бусад Server-тэй ижилхэн байдлаар зохион байгуулагдсан. SQL нь график интерфэйс сайтай. SQL 9.2 хэлийг бүх өгөгдлийн сан удирдах систем авч ашигладаг. SQL Server
- Standard edition enterprise - Desktop edition
SQL серверийн бүтэц зохион байгуулалт Microsoft SQL Server бол SQL буюу Structured Query Language хэл дээр үндэслэгдсэн, клиент сервер өгөгдлийн сан удирдах системүүдтэй харьцуулахад олон шинж чанараараа давуу байдаг. Үүнд: 1.
2. 3. 4. 5. 6. 7. 8. 9.
MS SQL 7.0 нь ажиллаж байх явцдаа өөрийгөө автоматаар тохируулдаг. Хэрэв сэрвэр их ачаалалтай ажиллаж байвал SQL сервер нь санах ой гэх мэт шаардлагатай нэмэлт нөөцийг динамикаар авна. Хэрэв ачаалал багасвал SQL сервер нь илүүдэл нөөцөө чөлөөлж системд өгнө. Мөн баазад өгөгдөл нэмэгдэх, хасагдахад баазын хэмжээг тохируулан өөрчилж байдаг. SQL сервертэй ажиллах, системийг удирдах тохируулахад зориулсан маш хүчирхэг багажуудтай. SQL өгөгдлийн санд маш олон хэлбэрээр (ADO, OLE DB, ODBC…) хандаж ажиллах боломжтой. Команд бичих, текст бичихэд зориулсан интерактив интерфэйстэй. MS SQL Server нь MS Windows 95/98, Windows NT Workstation, Windows NT Server зэрэг үйлдлийн системүүд дээр ажиллах чадвартай. Өгөгдлийн сан удирдах engine нь хэдэн мянган хэрэглэгчээр зэрэг хандагдах Terabyte хэмжээтэй баазыг удирдах чадвартай. SQL 7.0 хувилбар нь хүсэлтийг боловсруулах хурдийг ихэсгэх шинэ арга хэлбэрүүдийг ашигладаг. Хэрэв систем нэгээс олон процессортой бол SQL сервер нь хүсэлтийг хуваан параллелиар гүйцэтгэх ба энэ нь хүсэлтийг маш хурдан биелүүлэх боломжийг олгодог. MS SQL нь Microsoft Exchange болон бусад mail server-үүдээс захиа уншиж, явуулах боломжтой.
Клиент сервер архитектур MS SQL server нь кпиент сервер өгөгдлийн сан удирдах систем, desktop өгөгдлийн сан удирдах систем гэсэн 2 горимд ажиллах боломжтой. Клиент сервер өгөгдлийн сан удирдах систем Клиент сервер систем нь өгөгдлийн бааз нь сервер компьютер дээр байрлах,олон хэрэглэгч түүнийг клиент сервер програм хангамж ашиглан хамтран эзэмшдэг систем юм. Өгөгдлийн бааз нь нэг байрлалд төвлөрөх нь олон төрлийн ач холбогдолтой. -
Бүх мэдээлэл төвлөрөх тул бүх хэрэглэгчид ижил мэдээлэл, өгөгдөлд хандаж ажиллах Бизнесийн болон хамгаалалтын дүрэм, механизмыг сервер дээр зөвхөн нэг удаа тодорхойлоход л бүх хэрэглэгчдэд ижил үйлчилгээ үзүүлнэ. Хэрэглэгчийн өгсөн хүсэлтийн дагуу зөвхөн түүнд хэрэгтэй мэдээллийг буцаах тул сүлжээгээр дамжих мэдээлэл багасаж, програмын ажиллах хурд нэмэгдэнэ. Клиент компьютеруудад өгөгдөл хадгалагдахгүй учир санах ой шаардлагагүй. Олон хэрэглэгчтэй өгөгдлийн санд нэг өгөгдлийг зэрэг өөрчлөхөд гардаг хүндрэлийг SQL сервер зохион байгуулсан байдаг.
Client computer
Client computer
`
SQL Server client application
`
SQL Server client application
Database computer
SQL Server
-
SQL Server client application
Internet server Server application
-
Internet Information Server
Internet clients
SQL баазын архитектур MS SQL бааз нь 2 болон түүнээс дээш физик файлуудаас тогтоно. Өгөгдлийн баазыг ашиглахдаа хэрэглэгч зөвхөн хүснэгт, процедур гэх мэт логик элементүүдтэй ажиллана. Харин физик зохион байгуулалт нь зөвхөн администраторт л хэрэгтэй. Database XYZ User view Table: abc
Table:def
Physical implementation
Data1.mdf
Data2.ndf
Log1.ldf
MS SQL сервер нь системийн баазтай (master, model, tempdb, msdb).
Table:ghi
Server computer
SQL Server System databases
master
tempdb
msdb
User databases
model
payroll
sales
employees
master Бүх системийн мэдээллийг хадгалдаг бааз юм. Үүнд бүх хэрэглэгчийн бүртгэл, системийн тохиргооны мэдээлэл орно. Мөн энэ баазад системд оршин байгаа бүх хэрэглэгчийн баазуудийн тухай, мөн тэдгээрийн физик файлын тухай мэдээлэл хадгалагдана. tempdb Энэ баазад бүх түр зуурын хүснэгтүүд, процедурууд байдаг. Мөн SQL серверийн үйл ажиллагаанд хэрэгтэй бусад түр зуурын өгөгдлүүдийг хадгалдаг. SQL сервер эхэлж ачаалагдах бүрдээ энэ баазыг хоослон шинэчилж байдаг. model Системд үүсгэгдэх бүх баазын хувьд загвар болон ашиглагддаг бааз юм. CREATE DATABASE команд ажиллан шинэ бааз үүсгэхдээ msdb Энэ бааз нь SQL Server Agent-д ашиглагдах ба төлөвлөгдсөн ажил, мэдээллүүдийг хадгалдаг. SQL server-ийг удирдах SQL server үйлдлийн систем эхдэх бүрт автоматаар ачаалагдаж болно. Үүнийг MS SQL- ийг суурилуулж байх үедээ тохируулна. Энэ нь үйлдлийн системд нэвтэрч ороогүй байсан ч ажиллана гэсэн үг. SQL server ба SQL Server Agent-ууд тусдаа ажилладаг, тусдаа ачаалагддаг. Хоѐул эхлэх, түр зогсох, зогсох гэсэн үйлдлүүдтэй. SQL server ажиллаж байх үед SQL server-т хандах боломжтой. SQL server-ийг эхлүүлэх SQL server-ийг эхлүүлэх дараах аргууд байдаг. 1. SQL Server Enterprise Manager- Бүх үйлдлийг хийх бололцоотой. 2. SQL Server Service Manager- Agent SQL Server хоѐрын эхлэх , түр зогсох, автоматаар эхлүүлэх тохиргоог хийдэг програм. Taskbar дээр орсон байдаг. Байнга ажилладаг. 3. Control Panel-> Administration-> Services – Энд бүх Service-үүд жагсаатай байдаг. Эндээс эхлүүлэх, түр зогсоох боломжтой. 4. CMD-> netstart mssqlserver CMD-> netstart sqlserver CMD-> netstart SQLServerAgent -командуудаар мөн ажиллуулж болно. SQL Server-ийг нэг хэрэглэгчийн горимд эхлүүлэх Зарим онцгой тохиолдолд SQL Server-ийг нэг хэрэглэгчийн горимд эхлүүлэх шаардлага гардаг. Жишээ нь: server-ийн тохиргоог өөрчлөх, эвдэрсэн баазыг засварлах гэх мэт. Ингэхийн тулд –m гэсэн тохируулгыг ашиглана. cmd-> netstart mssqlserver –m SQL Server-ийг нэг хэрэглэгчийн горимд эхлүүлэх үед Зөвхөн нэг л хэрэглэгч серверт холбогдоно. CHECKPOINT процесс ажиллахгүй. Системийн процедур sp_configure нь allow updates тохиргоог зөвшөөрнө.
SQL Server-ийг хамгийн бага нөхцөлтэйгөөр эхлүүлэх Хэрэв серверийн тохиргооны асуудлыг засварлах шаардлагатай бол түүнийг хамгийн бага тохиргоотойгоор эхлүүлэх хэрэгтэй. Ингэхдээ –f гэсэн тохиргоог ашиглана. cmd-> netstart mssqlserver –f Энэ үед сервер автоматаар нэг хэрэглэгчийн горимд ордог. Server хамгийн бага нөхцөлтэйгөөр эхлэх үед: Санах ойг зөвхөн түр хугацаагаар ашиглахаар тохируулна. Мөн серверийн хувьсагчдийн утгыг sp_configure процедур хамгийн бага байхаар тогтоодог. SQL Server нэг хэрэглэгчийн горимд эхлэнэ. Алсын хэрэглэгчийн хандалтыг хориглоно. Сервер эхлэхэд ажилладаг процедурууд ажиллахгүй. Ингэж серверийг хамгийн бага горимд эхлүүлсний дараа, холбогдох хувьсагч, тохируулгуудыг өөрчлөөд серверээ дахин ачаалах шаардлагатай. SQL Server-ийг хамгийн бага горимд эхлүүлэхээсээ өмнө SQL Server Agent service-ийг заавал зогсоосон байх шаардлагатай. Тэгэхгүй бол SQL Server Agent service нь серверт холбогдсон холболт ашиглаж байдаг тул серверийг хамгийн бага горимд эхлүүлэх боломжгүй байдаг. SQL Server-т бүртгүүлж орох буюу log in хийх Серверт холбогдож орохын тулд Enterprise Manager болон бусад график интерфэйсүүдийг ашиглаж болох ба командын мөрөөс osql командыг ашиглана. График интерфэйс ашиглан серверт холбогдох үед серверийн нэр, хэрэглэгчийн ID, нууц үгийг асуусан диалог гарна. SQL server-т windows Authentication ашиглан холбогдож болно. Ингэж серверт холбогдоход ID, нууц үг ашиглах шаардлагагүй. SQL серверийг суурилуулсны дараа эхний удаа холбогдох үед sa (system administrator) гэсэн хэрэглэгчийн нэрийг ашиглана. sa нь эхлээд хоосон нууц үгтэй байна. Server-ийг эхлүүлэх бусад тохиргоо SQL Server-ийг суурилуулах үед суурилулагч нь Windows Registry-д анхдагч тохиргоог хийж өгдөг. Эдгээр тохиргоог ашиглан өөр master баазыг тодорхойлж болно. Анхдагч тохиргоо -d master_file_path -e error_log_path -l master _log_path
Тайлбар master баазын хаяг. (C:\Mssql7\Data\Master.mdf) Алдааны мэдээлэл хадгалах файл. (C:\Mssql7\Log\Errorlog) master баазын бичлэгийн файл. (C:\Mssql7\Data\Mastlog.ldf)
Мөн бусад тохиргоог ашиглан SQL серверийг эхлүүлж болно. Бусад тохиргоо -c -f -m -n -p precision_level -s registry_key -x
Тайлбар SQL серверийн эхлэх хугацааг багасгаж үйлдлийн системээс тусгаарлана. Windows-д service болж ордоггүй. SQL серверийг хамгийн бага горимд эхлүүлнэ. Нэг хэрэглэгчийн горимд эхлүүлнэ. -e-г хамт ашиглах хэрэгтэй.. Decimal ба numeric төрлийн орны тоо, хэмжээг тогтоож өгнө. Анхдагч тохиргоо нь 28 байна. Авч болох утга нь 1-38 байна Серверийг эхлүүлнэ. Энэ тохиргоо нь командын мөрөөс л ажиллана. Ажиллах явцын статистик үзүүлэлтүүдийг бэлтгэхгүй.
Лекц - 2 Өгөгдлийн сан буюу бааз үүсгэх, зохион байгуулах SQL Server-ийн бааз нь хүснэгт, индекс, процедур, триггер зэрэг обьектуудаас тогтоно. Өгөгдлийн санг төлөвлөх 1. Мэдээлэл цуглуулах 2. Обьектуудыг тодорхойлох 3. Обьектуудыг загварчлах 4. Обьект бүрийн хувьд агуулах мэдээллийн төрлийг тодорхойлох 5. Обьектуудын хоорондох хамаарлыг тодорхойлох Мэдээлэл цуглуулах Бааз үүсгэхэд шаардлагатай бүх мэдээллийг цуглуулах алхам юм. Хэрэв хуучин систем нь цаас ашиглан бүртгэл гүйцэтгэдэг байсан бол эндээс системийн тухай мэдээлэл цуглуулна. Мөн системд хамаарах бүх нэгжээс тэдний хэрэгцээ шаардлагыг судалж, мэдээлэл цуглуулах нь чухал. Обьектуудыг тодорхойлох Мэдээлэл цуглуулах явцдаа тухайн баазад хадгалагдах үндсэн обьектуудыг тодорхойлно. Обьект нь хүн, бараа материал гэх мэт биет зүйлс, бизнесийн ажил гүйлгээ, салбар нэгжийн бүртгэл, тайлангийн үе гэх мэт биет бус зүйлс байж болно. Ер нь системд цөөн тооны үндсэн обьект, харин түүнтэй холбоотой бусад обьектууд байдаг. Обьектуудыг загварчлах Систем дэх обьектуудаа тодорхойлсны дараа тэдгээрийн шинж чанарыг тодорхойлж загварчлах шаардлагатай байдаг. Үунийг гүйцэтгэхийн тулд урьд нь өгөгдлийн сан зохион байгуулагчид үзэг, цаас ашиглан төлөвлөх, эсвэл тусгай програм ашиглан гүйцэтгэдэг байсан. Харин SQL Enterprise Manager програм нь өөртөө энэ зорилгоор ашиглагдах визуаль багажтай байдаг. Обьект бүрийн хувьд агуулах мэдээллийн төрлийг тодорхойлох Өгөгдлийн сан дахь үндсэн обьектуудыг тодорхойлон хүснэгт үүсгээд тэдгээрийн агуулах мэдээллийг тогтооно. Энэ нь хүснэгтийн багануудыг тодорхойлно гэсэн үг юм. Обьектуудын хоорондох хамаарлыг тодорхойлох Обьектуудын хоорондох хамаарлыг тогтоохын тулд хүснэгтүүдийн хоорондох логик холбоог тодорхойлох хэрэгтэй. Анхааруулга: master бааз дотор хэрэглэгчийн ямар ч обьект үүсгэж болохгүй. Учир нь бааз системийн эзэмшилд ашиглагддаг. Өгөгдлийн сан үүсгэх Өгөгдлийн сан үүсгэхийн тулд өгөгдлийн сангын нэр, түүний эзэмшигч буюу өгөгдлийн санг үүсгэгч, хэмжээ зэрэг өгөгдөл шаардлагатай. 1. Өгөгдлйин сангийн анхдагч өгөгдлүүдийг үүсгэх, өөрчлөх эрхийг sysadmin ба dbcreator хэрэглэгчдэд олгох хэрэгтэй. 2. Өгөгдлийн санг үүсгэсэн хэрэглэгч тухайн баазын эзэмшигч болно. 3. Хамгийн ихдээ нэг серверт 32,767 ширхэг өгөгдлийн сан үүсгэх боломжтой. 4. Өгөгдлийн сангийн нэр нь идентификаторын шаардлагыг хангаж байх ѐстой. Өгөгдлийн санг хадгалахын тулд дараах төрлийн файлууд ашиглагддаг. 1. Үндсэн файл – Өгөгдлийн сангийн тухай үндсэн мэдээлэл болон өгөгдөл хадгална. Өгөгдлийн сан бүрт нэг үндсэн файл байна. 2. Нэмэлт файл - Үндсэн файлд багтаагүй бусад өгөгдлийг хадгална. Хэрэв үндсэн файл нь том хэмжээтэй бөгөөд бүх мэдээллийг хадгалах багтаамжтай бол нэмэлт файл шаардлагагүй.
Зарим баазууд маш том хэмжээтэй зохион байгуулагддаг учир хэд хэдэн нэмэлт файл шаарддаг. Эсвэл хэд хэдэн диск дээр өгөгдлөө хувааж байрлуулдаг. 3. Бичлэгийн файл – Өгөгдлийн санг сэргээхэд шаардлагатай үйл явдлын бичлэгийг хадгалдаг файл. Өгөгдлийн сан бүрт ядаж нэг бичлэгийн файл байх ѐстой. Энэ файлын хамгийн бага хэмжээ 512KB байна. Анхааруулга: MSSQL Server системийн өгөгдлийн болон бичлэгийн файлууд нь шахагдсан файлын систем дээр эсвэл алсын компьютерийн диск дээр байрлах ѐсгүй. Өгөгдлийн сан үүсгэж байхдаа файлын хамгийн их хэмжээг тогтоож өгөх ёстой. Ингэх нь файлын хэмжээ өсч диск дүүргэхээс сэргийлнэ. Хамгийн их хэмжээг зааж өгөхдөө CREATE DATABASE командын MAXSIZE параметрийг ашиглана. Эсвэл SQL Server Enterprise Manager-ийн Restrict filegrowth (MB) –ийг ашиглана. Бааз үүсгэсний дараа та master баазыг архивлаж авах шаардлагатай. Partition ашиглан бааз үүсгэх SQL server нь partition ашиглан бааз үүсгэх боломжтой. Partition нь NTFS, FAT гэх мэт аль нэг үйлдлийн системээр форматлагдаагүй байх шаардлагатай. Зарим тохиолдолд ингэж бааз үүсгэх нь ажиллагааны хувьд сайн байдаг боловч ихэнх тохиолдолдбаазыг файлуудаар үүсгэдэг. Partition ашиглаж бааз үүсгэхэд хэд хэдэн дутагдалтай тал байдаг. 1. Нэг partition дээр зөвхөн нэг бааз үүсгэх боломжтой. Учир нь файлын систем байхгүй. 2. Файлын систем дээр хийгддэг copy, move, delete үйлдлүүд хийгдэхгүй. 3. Windows Backup програмаар баазыг архивлах боломжгүй. Гэхдээ SQL Server-ийн архивлалтыг хийж болно. 4. Partition дээр үүсгэсэн учраас баазын файлыг автоматаар тэлэх боломжгүй. 5. Файлын систем дээр хийгддэг эвдэрхий блокуудыг зөөх гэх мэт үйлдлүүд хийгдэх боломжгүй. CREATE DATABASE команд (T-SQL) Энэ командаар шинээр өгөгдлийн сан үүсгэнэ. Бичигдэх хэлбэр: CREATE DATABASE баазын нэр [ ON [PRIMARY] [ [,…n] ] [,[,…n] ] ] [LOG ON { [,…n]} ] [ FOR LOAD | FOR ATTACH ] ::= ( [ NAME = логик_файлын_нэр,] FILENAME=‟ҮС_файлын_нэр‟ [, SIZE = Хэмжээ ] [,MAXSIZE={max_хэмжээ| UNLIMITED} ] [, FILEGROWTH= нэмэгдэх_хэмжээ] )[,…n] ::= FILEGROUP Файлгруппын_нэр[,…n] Аргументууд Баазын нэр Шинээр үүсгэж байгаа баазын нэр юм. Баазын нэр нь давхцаж болохгүй мөн идентификаторын дүрмээр нэрлэгдсэн байх шаардлагатай. Баазын нэр нь 128 хүртэлх тэмдэгтийн урттай байж болно. Хэрэв баазын нэрийг зааж өгөөгүй тохиолдолд SQL Server нь автоматаар нэр өгдөг.
ON Өгөгдөл хадгалах диск файлуудыг зааж өгнө. Энэ үгийн ард - д таслалаар зааглан файлуудыг зааж өгнө. PRIMARY -уудын жагсаалт нь үндсэн файлыг тодорхойлно. Үндсэн файлын групп нь бүх системийн хүснэгтүүд болон хэрэглэгчийн файл группт хамаараагүй обьектуудыг агуулна. Хэрэв PRIMARY нь тодорхойлогдоогүй бол CREATE DATABASE командад жагсаагдсан эхний файл нь үндсэн файл болно. [,…n] Олон файл тодорхойлогдсон гэдгийг үзүүлсэн тэмдэглэгээ. LOG ON Бичлэгийн файлуудыг зааж өгнө. Хэрэв LOG ON-д файл зааж өгөөгүй бол бичлэгийн нэг файлыг систем автоматаар үүсгэх ба хэмжээ нь өгөгдлийн сангийн хэмжээний 25%-тай тэнцэх хэмжээтэйгээр үүсгэгдэнэ. FOR LOAD Өмнөх хувилбаруудтай зохицуулах үүднээс ашиглагддаг. Өмнөх хувилбарууд дээр dbo use only тохиргоотойгоор үүсгэгдсэн баазыг 7.0 хувилбар дээр ашиглахдаа хэрэглэнэ. FOR ATTACH Бааз нь өмнө байсан системээс холбогдсоныг зааж өгнө. CREATE DATABASE FOR ATTACH-ыг шууд ашигласнаас sp_attach_db процедурыг ашигласан нь дээр байдаг. Хэрэв 16-аас их файл тодорхойлох гэж байгаа тохиолдолд л CREATE DATABASE FOR ATTACH-ыг ашиглана. NAME -д заасан файлуудад логик нэр зааж өгнө. FOR ATTACH-ыг хэрэглэсэн үед NAME параметр хэрэглэгдэхгүй. логик_файлын_нэр Үүсгэгдэх баазын логик нэрийг зааж өгнө. Иймд нэр нь идентификаторын шаардлагыг хангасан байх ѐстой, мөн давхцахгүй нэр байх ѐстой. FILENAME -д заасан файлуудын үйлдлийн систем дэхь файлын нэрийг тодорхойлно. ‘ҮС_файлын_нэр’ -д заасан файлуудын үйлдлийн систем дэхь физик файлын нэр юм. Хэрэв баазыг partition дээр үүсгэсэн бол, „ҮС_файлын_нэр‟-д дискийн нэр буюу үсгийг зааж өгнө. Хэрэв ингэж дискийг зааж өгсөн тохиолдолд MAXSIZE, FILEGROWTH параметрууд ашиглагдахгүй. SIZE -д заасан файлын хэмжээг зааж өгнө. Хэрэв SIZE параметр заагдаагүй тохиолдолд SQL Server нь хэмжээг 1MB-аар авна. хэмжээ KB ба MB –уудыг ашиглан kilobyte, megabyte-ыг зааж өгнө. Default нь MB байна. Зааж өгөх хамгийн бага хэмжээ нь 512KB байна. Хэрэв хэмжээ нь заагдаагүй бол 1MB-аа авна. MAXSIZE -д заасан файлын хэмжээний хамгийн их хэмжээг тодорхойлно. UNLIMITED -д заасан файлын хэмжээ диск дүүртэл нэмэгдэнэ гэдгийг зааж өгнө.
FILEGROWTH -д заасан файлын хэмжээ яаж нэмэгдэхийг зааж өгнө. Энэ зааж өгөх хэмжээ нь MAXSIZE тохиргооноос хэтэрч болохгүй. нэмэгдэх хэмжээ Шинээр зай хэрэгтэй болох үед ямар хэмжээгээр баазыг тэлэхийг тодорхойлно. Хэрэв 0 байвал нэмэгдэхгүй гэсэн үг. Нэмэгдэх утгыг MB, KB эсвэл %-аар зааж өгнө. %-аар тодорхойлсон тохиолдолд файлын хэмжээний хувиар нэмэгдүүлнэ. Хэрэв FILEGROWTH-ийг заагаагүй тохиолдолд хэмжээ нь 10%-аар нэмэгдэнэ гэсэн анхдагч тохиргоотой байна. Энэ хэмжээ нь хамгийн багадаа 64 KB байна. Тодруулга CREATE DATABASE командыг ашиглан бааз үүсгэх ба баазын өгөгдөл хадгалах файлуудыг зааж өгнө. SQL server нь CREATE DATABASE командыг ажиллуулахдаа 2 бүлэг үйлдлийг хийдэг. 1. SQL Server нь model бааз, түүний бүтцийг хуулан шинэ бааз үүсгэхэд ашиглана. 2. SQL Server дараа нь үүсгэж буй баазын бусад хэсгийг хоосноор дүүргэнэ. Model баазад байрлах бүх хэрэглэгчийн обьектууд нь шинэ бааз үүсгэхэд хамт хуулагдана. Хэрэв үүсгэж байгаа бүх бааздаа зарим обьектыг байлгахыг хүсвэл тэдгээр обьектоо model бааз дээр нэмж өгч болно. Өгөгдлийн санг хадгалахын тулд үндсэн файл, нэмэлт файл, бичлэгийн файл 3 ашиглагддаг. Бүх өгөгдлийн санд ядаж үндсэн файл болон бичлэгийн файлууд байх ѐстой. Эдгээр файлууд нь дараах өргөтгөлтэй байдаг. Баазын үндсэн файл Нэмэлт файл Бичлэгийн файл
.mdf .ndf .ldf
Өгөгдлийн сан бүр өөрийн эзэмшигчтэй байна. Баазыг үүсгэсэн хэрэглэгч нь эзэмшигч болно. Өгөгдлийн сангийн эзэмшигчийг sp_changedbowner процедураар сольж болно. SQL server дээрх бүх баазын тухай мэдээллийг авахыг хүсвэл sp_helpdb процедурыг, баазад ашиглагдаж байгаа зайг мэдэхийг хүсвэл sp_spaceused, бааз дахь файлуудын группын мэдээллийг sp_helpfilegroup, баазад ашиглагдаж байгаа файлуудын тухай мэдээллийг sp_helpfile процедурыг ашиглана. SQL server-ийн өмнөх хувилбаруудад DISK INIT командыг ашиглан CREATE DATABASE командаас өмнө тухайн баазад ашиглагдах баазаа үүсгэдэг байсан. Тэгэхээр өмнөх хувилбаруудтай зохицохын тулд CREATE DATABASE команд нь мөн DISK INIT-ээр үүсгэсэн файлыг ашиглан бааз үүсгэдэг. Жишээ: А. Өгөгдлийн файл болон бичлэгийн файлыг зааж өгч бааз үүсгэх Энэ жишээ нь Sales баазыг үүсгэж байна. PRIMARY түлхүүр үг ашиглагдаагүй учир эхний файл нь (Sales_dat) үндсэн файл болно. Хэмжээг нь зааж өгөхдөө MB ба KB-г ашиглаагүй учир анхдагч тохиргоогоор 10MB гэж сервер ойлгоно. Харин Sales_log файлыг тодорхойлохдоо файлын хэмжээг megabyte-аар зааж өгсөн байна. USE master GO CREATE DATABASE Sales ON ( NAME = Sales_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO B. Олон өгөгдлийн файл, бичлэгийн олон файл ашиглан бааз үүсгэх Энэ жишээнд Archive нэртэй 3 ширхэг 100MB хэмжээтэй өгөгдлийн файл ба 2 ширхэг 100MB-ийн бичлэгийн файлаас бүрдэх баазыг үүсгэж байна. Үндсэн файлыг PRIMARY түлхүүр үгээр зааж өгсөн байна. Бичлэгийн файлыг LOG ON түлхүүр үгээр тодорхойлсон байна. USE master GO CREATE DATABASE Archive ON PRIMARY ( NAME = Arch1, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat1.mdf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = Arch2, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat2.ndf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = Arch3, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat3.ndf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20) LOG ON ( NAME = Archlog1, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog1.ldf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = Archlog2, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog2.ldf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20) GO C. Энгийн бааз үүсгэх Энэ жишээнд Products нэртэй бааз үүсгэж, зөвхөн нэг файл тодорхойлжээ. Иймд 1MB хэмжээтэй бичлэгийн файлыг автоматаар үүсгэжээ. Бичлэгийн файлын MAX хэмжээг зааж өгөгүй тул бичлэгийн файлын хэмжээ диск дүүртэл ихэсч болно. USE master GO CREATE DATABASE Products ON ( NAME = prods_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods.mdf', SIZE = 4, MAXSIZE = 10, FILEGROWTH = 1 ) GO
D. Файл зааж өгөлгүйгээр бааз үүсгэх Энэ жишээнд mytest нэртэй баазыг үүсгэж байна. Баазуудын хэмжээг зааж өгөөгүй учир model баазын хэмжээгээр файлуудыг үүсгэнэ. CREATE DATABASE mytest E. SIZE –ыг тодорхойлж өгөлгүйгээр бааз үүсгэх Жишээнд products2 баазыг үүсгэж байна. prods2_dat файлын хэмжээ нь model баазын үндсэн файлын хэмжээгээр үүсгэгдэнэ. Бичлэгийн файл нь автоматаар үүсгэгдэх ба хэмжээ нь үндсэн файлын хэмжээний 25% ба 512КВ хоѐрын аль ихээр үүсгэгдэнэ. USE master GO CREATE DATABASE Products2 ON ( NAME = prods2_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods2.mdf' ) GO F. Файл групптэй бааз үүсгэх Энэ жишээнд sales нэртэй баазыг 3н файл групптэй үүснэж байна. • Үндсэн файл групп нь Spri1_dat, Spri2_dat файлуудтай. FILEGROWTH буюу тэлэх хэмжээ нь 15% байна. • SalesGroup1 нэртэй групп нь SGrp1Fi1, SGrp1Fi2 файлуудтай. • SalesGroup2 нэртэй групп нь SGrp2Fi1, SGrp2Fi2 файлуудтай. CREATE DATABASE Sales ON PRIMARY ( NAME = SPri1_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SPri1dat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ), ( NAME = SPri2_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SPri2dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ), FILEGROUP SalesGroup1 ( NAME = SGrp1Fi1_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG1Fi1dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), ( NAME = SGrp1Fi2_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG1Fi2dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), FILEGROUP SalesGroup2 ( NAME = SGrp2Fi1_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi1dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), ( NAME = SGrp2Fi2_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi2dt.ndf',
SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO G. Баазыг холбох Энэ жишээнд Archive дараах физик файлуудтай бааз үүсгэж байна. c:\program files\microsoft sql server\mssql\data\archdat1.mdf c:\program files\microsoft sql server\mssql\data\archdat2.ndf c:\program files\microsoft sql server\mssql\data\archdat3.ndf c:\program files\microsoft sql server\mssql\data\archlog1.ldf c:\program files\microsoft sql server\mssql\data\archlog2.ldf sp_detach_db дроцедурыг ашиглан баазыг салгаж, CREATE DATABASE командыг FOR ATTACH тохиргоотойгоор ашиглан холбож болно. sp_detach_db Archive GO CREATE DATABASE Archive ON PRIMARY (FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat1.mdf') FOR ATTACH GO H. partition ашиглан бааз үүсгэх Жишээнд энэ аргыг ашиглан Employees баазыг үүсгэж байна. USE master GO CREATE DATABASE Employees ON ( NAME = Empl_dat, FILENAME = 'f:', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'g:', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO Лекц 3 - Хүснэгт үүсгэх Өгөгдлийн сангийн өгөгдөл хадгалдаг үндсэн обьект нь хүснэгт юм. Хүснэгт нь багануудын олонлогоос тогтоно. Хүснэгт үүсгэхийн тулд эхлээд тухайн хүснэгтэд ямар төрлийн обьектууд хадгалахыг тодорхойлох хэрэгтэй. SQL Server нь олон төрлийн өгөгдлийн төрлүүдтэй байдаг. Мөн хэрэглэгч системийн төрлүүд дээр үндэслэсэн хэрэглэгчийн төрөл тодорхойлох боломжтой.
Үндсэн өгөгдлийн төрлүүд Өгөгдлийн төрлүүд Хоѐртын
Системийн өгөгдлийн төрлүүд binary[(n)] varbnary[(n)] char[(n)] varchar[(n)]
Хэмжээ
Unicode тэмдэгтэн Он сар
nchar[(n)] nvarchar[(n)] datetime, smalldatetime
2-8000 (1-4000 тэмдэгт) 8,4
Бодит тоон
decimal(p[,s]) float[(n)], real uniqueidentifier
5-17, 4-8, 4 16
Бүхэл тоон
int, smallint, tipyint
4, 2, 1
Мөнгөний
money, smallmoney
8, 4
Тусгай төрөл
bit, cursor, sysname, 1, 0-8 timestamp
Текст, график
text, image
0-2GB
Unicode текст
ntext
0-2GB
Тэмдэгтэн
Глобаль идентификатор
Тайлбар
1-8000 1-8000 (8000 тэмдэгт)
datetime нь 1753-1-1-ээс 9999-12-31, smalldatetime нь 1900-1-1-ээс 2079-6-6 утга хадгална
Давтагдашгүй тоон дугаарлалтыг автоматаар хийдэг
Хэрэглэгчийн өгөгдлийн төрөл үүсгэх SQL Server дээр үндсэн өгөгдлүүдийн төрлүүд дээр үндэслэн хэрэглэгчийн төрөл үүсгэх бололцоотой байдаг. sp_addtype системийн процедурын тусламжтайгаар хэрэглэгчийн төрлийг үүсгэдэг. Бичлэгийн хэлбэр: sp_addtype нэр, системийн өгөгдлийн төрөл [,’NULL’|’NOT NULL’] Жишээ: EXEC sp_addtype isbn, ‘smallint’ , ‘NOT NULL’ EXEC sp_addtype zipcode, ‘char(10)’, ‘NULL’ EXEC sp_addtype longstring, ‘varchar(63)’, ‘NULL’ Хэрэглэгчийн төрлийг устгах sp_droptype системийн процедурыг ашиглан хэрэглэгчийн төрлийг системийн systypes таблицаас устгана. Хэрэв тухайн хэрэглэгчийн төрөл нь ямар нэгэн хүснэгт эсвэл өгөгдлийн обьектод ашиглагдаж байвал түүнийг устгаж болохгүй. Бичлэгийн хэлбэр: sp_droptype төрөл Дараах жишээнд isbn гэсэн хэрэглэгчийн төрлийг устгаж байна.
EXEC sp_droptype isbn Системийн процедур sp_help-ыг ажиллуулах эсвэл information_schama.domains –аас тухайн баазын хэрэглэгчийн төрлүүдийг уншиж болно. Хүснэгт үүсгэх Хүснэгт үүсгэхийн тулд эхлээд хүснэгтийн нэр, талбарын нэрүүд, талбарын өгөгдлийн төрлүүдийг тодорхойлох шаардлагатай. Талбарын нэр нь тухайн хүснэгт дотроо давтагдашгүй байх ѐстой. SQL өгөгдлийн сан нь 2 миллиард хүртэл хүснэгт агуулах чадвартай. Мөн хүснэгт нь 1024 хүртэл талбартай байж болно. CREATE TABLE [ Баазын_нэр.[Эзэмшигч]. | Эзэмшигч. ] хүснэгтийн_нэр ( { |Баганын_нэр AS Тооцоологдсон_багана | } [,…n] ) [ON {файлгрупп |DEFAULT} ] [TEXTIMAGE_ON {файлгрупп |DEFAUL}] ::={Баганын_нэр өгөгдлийн_төрөл} [ [DEFAULT тогтмол_илэрхийлэл ] |[ IDENTITY [(анхны_утга, нэмэгдүүлэлт )[NOT FOR REPLICATION ] ] ] ] [ ROWGUIDCOL ] [ < Баганын_нэмэлт_тодорхойлолт >] [,…n] < Баганын_нэмэлт_тодорхойлолт >:: =[CONSTRAINT Тодорхойлолтын_нэр] { [ NULL | NOT NULL] | [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] [ WITH FILLFACTOR = дүүргэлт ] [ON { файлгрупп | DEFAULT } ] ] ] | [ [ FOREIGN KEY] REFERENCES Хүснэгт [ (Багана )] [ NOT FOR FEPLICATION ] ] | CHECK [ NOT FOR REPLICATION ] (логик_илэрхийлэл) } ::=[CONSTRAINT Тодорхойлолтын_нэр] { [ { PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ] {( Багана [,…n] )} [ WITH FILLFACTOR=дүүргэлт ] [ON { файлгрупп | DEFAULT } ] ] | FOREIGN KEY [ ( Багана[,…n] )]
REFERENCES Хүснэгт [( Багана[,…n] ) ] [NOT FOR REPLICATION] | CHECK [NOT FOR REPLICATION] (Хайх нөхцөл) } Аргументууд Баазын_нэр Хүснэгт үүсгэх баазын нэр юм. Хэрэв үүнийг зааж өгөөгүй тохиолдолд идэвхитэй баазад үүсгэнэ. Эзэмшигч Тухайн баазыг үүсгэсэн эзэмшигчийн нэр. Хэрэв тухайн баазыг үүсгэгч нь sysadmin –ий гишүүн бол хэрэглэгчийн нэр нь dbo байдаг ба үүсгэсэн бааз нь ч dbo эзэмшигчтэй байна. Харин бусад хэрэглэгчид үүсгэсэн баазынхаа эзэмшигч болно. Хүснэгтийн_нэр Үүсгэх гэж байгаа хүснэгтийн нэр. Эзэмшигч.Хүснэгтийн_нэр нь тухайн бааз дотор давтагдашгүй байх ѐстой. Хүснэгтийн_нэр нь 128 хүртэлх тэмдэгтээс бүрдэнэ. Харин түр зуурын хүснэгтийн нэр нь (# тэмдэгтээр эхэлдэг) 116 тэмдэгтээс хэтрэх ѐсгүй. Баганын_нэр Хэрэв багана нь timestamp төрөлтэй байвал баганын нэрийг тавихгүй байж болно. Хэрэв нэрийг нь тавьж өгөөгүй тохиолдолд автоматаар timestamp болдог. Тооцоологдсон_багана Тооцоологдсон багана гэдэг нь бодитойгоор хүснэгтэд оршин байдаггүй, виртуал багана юм. Бусад баганууд үйлдэл хийн энэ баганыг үүсгэдэг. Жишээ нь: cost AS price * qty ийм байдлаар cost гэсэн шинэ баганыг үүсгэнэ. Энэ илэрхийлэл нь баганын нэр, тогтмол, функц, хувьсагчаас бүрдэж болно. Харин илэрхийлэл нь дэд-хүснэгт байж болохгүй. Энэ багана нь SELECT-д, WHERE-д, ORDER BY –д болон бусад илэрхийлэлд ашиглагдаж болно. Гэхдээ дараах болзлуудтай: Энэ багана нь индекс түлхүүр багана байж болохгүй. Мөн PRIMARY KEY, UNIQUE, FOREIGN KEY, DEFAULT тодорхойлолтуудад оролцож болохгүй. Мөн INSERT болон UPDATE командад ашиглагдахгүй. ON {файлгрупп | DEFAULT } Хүснэгтийг хадгалах файлгруппыг зааж өгнө. Хэрэв DEFAULT-ыг зааж өгсөн, эсвэл ON-ыг зааж өгөөгүй тохиолдолд default файл групп ашиглагдана. ON {файлгрупп| DEFAULT } нь PRIMARY KEY болон UNIQUE зэрэг индекс үүсгэдэг тодорхойлолтод ашиглагдаж болно. TEXTIMAGE_ON text, ntext, image баганууд нь тухайн файл группт хадгалагдахыг тодорхойлно. Хэрэв тухайн хүснэгтэд text, ntext, image баганууд байхгүй бол TEXTIMAGE ON –ийг хэрэглэхийг зөвшөөрөхгүй. өгөгдлийн_ төрөл Системийн болон хэрэглэгчийн тодорхойлсон төрлүүдийг ашиглаж болно. Хэрэглэгчийн төрлийг хүснэгт үүсгэхээсээ өмнө тодорхойлсон байх шаардлагатай. CREATE TABLE командад хэрэглэгчийн төрлийн хэмжээг дахин тодорхойлж болохгүй. DEFAULT Тухайн баганад утга зааж өгөөгүй тохиолдолд авах утга. DEFAULT тодорхойлолтыг timestamp –аас бусад талбарт хэрэглэнэ. Мөн IDENTITY–г ашигласан үед хэрэглэх боломжгүй. Тухайн хүснэгтийг
устгасан үед DEFAULT тодорхойлолт мөн устана. Зөвхөн тогтмол утга, системийн зарим функц мөн NULL-ийг энэ тодорхойлолтод ашиглана.
IDENTITY Шинэ бичлэг хүснэгтэд нэмэгдэх бүрд сервер нь энэ талбарт давтагдашгүй, нэмэгдсэн утгыг олгоно. Identity багана нь PRIMARY KEY тодорхойлолттой хослон ихээр хэрэглэгддэг. IDENTITY нь зөвхөн tinyint, smallint, int, decimal(p,0), or numeric (p,0) төрөлтэй багануудад л хэрэглэгдэнэ. Нэг хүснэгтэд зөвхөн нэг identity багана л байх ѐстой. Анхны_утга, нэмэгдүүлэлт Тухайн баганын утга анх ямар байх мөн яаж нэмэгдэхийг тодорхойлно. NOT FOR REPLICATION Sqlrepl зэрэг хэрэглэгчид хүснэгт рүү өгөгдөл оруулж байхад IDENTITY тодорхойлолтыг хэрэгсэхгүй гэснийг тодорхойлно.Хуулагдаж байгаа бичлэгүүд нь анх баазд орохдоо ямар түлхүүр утга авсан түүнийгээ хадгалж үлдэнэ. Харин бусад хэрэглэгчид оруулсан шинэ бичлэгүүдэд ердийн журмаар түлхүүр талбаруудад утга олгогдоно. ROWGUIDCOL Шинэ багана нь глобаль идентификатор багана гэдгийг тодорхойлно.Нэг хүснэгтэд зөвхөн нэг л uniqueidentifier багана л ROWGUIDCOL – аар жнтодорхойлогдоно. ROWGUIDCOL тодорхойлолт нь зөвхөн uniqueidentifier баганад л тодорхойлогдоно. ROWGUIDCOL тодорхойлолттой багана нь давтагдашгүй утгуудыг авдаггүй.Мөн шинэ мөр үүсэхэд автоматаар утга авдаггүй.Иймд давтагдашгүй утгууд үүсгэхийн тулд INSERT командад NEWID функцыг ашиглах, эсвэл NEWID-г баганын default утга тодорхойлохдоо ашиглах хэрэгтэй. CONSTRAINT PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY, CHECK тодорхойлолтууд эхэлж байгааг тодорхойлсон үг. NULL | NOT NULL Тухайн баганад NULL утга хадгалагдах эсэхийг тодорхойлсон түлхүүр үг. PRIMARY KEY Тухайн баганыг гол түлхүүр талбар хэмээн тодорхойлдог түлхүүр үг. Тухайн хүснэгтэд зөвхөн нэг PRIMARY KEY байх ѐстой. UNIQUE Тухайн баганын өгөгдөл давтагдашгүй шинж чанартай байх ѐстойг тодорхойлно. Хүснэгтэд олон UNIQQUE тодорхойлолт хэрэглэж болно. CLUSTERED | NONCLUTERED PRIMARY KEY болон UNIQUE тодорхойлолтууд нь кластер төрлийн индекс ашиглах эсэхийг тодорхойлно. [WITH FILLFACTOR= fillfactor] Индекс өгөгдөл хадгалах индекс хуудсыг хэрхэн зохион байгуулахыг тодорхойлно. 1-ээс 100 хүртлэх утгуудыг авах ба анхдагч утга нь 0 байна. Энэ утга нь бага байх тусам шинэ индекс үүсгэхдээ их хэмжээтэйгээр авна. FOREIGN KEY… REFERENCES Гадаад түлхүүрээр холбоно. Холбогдох хүснэгт ба түүний холбогдох багана.Тэр багана нь тухайн хүснэгтдээ PRIMARY KEY эсвэл UNIQUE байх ѐстой. Багана нь олон багана байж болно. CHECK - Тухайн баганад орох утгыг шалгах тодорхойлолт.
NOT FOR REPLICATION REPLICATION хийх үед CHECK-ийг шалгах уу? Гэсэн үг. Хүснэгтийн нэмэлт тодорхойлолт Олон баганыг өөр хүснэгтийн олон багана руу зааглана. Хайх нөхцөл Хүснэгт дээр шалгахдаа хайна.
CREATE TABLE jobs ( job_id smallint IDENTITY(1,1) PRIMARY KEY CLUSTERED, job_desc varchar(50) NOT NULL DEFAULT 'New Position - title not formalized yet', min_lvl tinyint NOT NULL CHECK (min_lvl >= 10), max_lvl tinyint NOT NULL CHECK (max_lvl = 15 AND cost=10) and CHECK (max_lvl(их) (их биш)
Харьцуулах үйлдлийн үр дүн нь дараах 3 утгын аль нэг нь байна. Үүнд : TRUE, FALSE мөн UNKNOWN.Хэрэв SET ANSI_NULLS нь ON тохиргоотой байвал, NULL утга дээр хийгдсэн харьцуулах үйлдэл нь UNKNOWN утгатай байна. Харин SET ANSI_NULLS нь OFF байвал адилхан дүрэмтэй байх ба нэг л тохиолдолд буюу хоѐр NULL –г тэнцүү эсэхийг шалгасан үед л TRUE утга буцаана. DECLARE @ MyProduct int SET @ MyProduct = 10 IF (@MyProduct0) SELECT * FROM Products WHERE ProductID = @MyProduct GO Логик үйлдлүүд SQL хэл нь дараах логик үйлдлүүдтэй. Үйлдэл ALL AND ANY BETWEEN EXISTS IN LIKE NOT OR SOME
Тайлбар Хэрэв бүх шалгалтууд үнэн бол TRUE байна. Хоѐр илэрхийлэлд хоѐул үнэн бол TRUE байна. Хэрэв шалгалтуудын аль нэг нь үнэн бол TRUE. Хэрэв тухайн утга тодорхой завсарт байгаа бол TRUE байна. Хэрэв дэд хүсэлт нь ядаж нэг мөр буцааж байвал TRUE байна. Хэрэв утга нь илэрхийллийн жагсаалтад байгаа бол TRUE байна. Хэрэв утга нь тухайн нөхцөл, шүүлтүүрийг хангаж байвал TRUE байна. Boolean утгыг эсрэгээр тогтооно. Хэрэв 2 илэрхийллийн ядаж нэг нь үнэн бол TRUE байна. Хэрэв шалгалтуудын зарим нь үнэн бол TRUE байна.
USE pubs GO SELECT phone FROM authors WHERE phone LIKE „415 %‟ ORDER by au_lname GO IF(„UB‟ !=ALL(SELECT city FROM authors)) SELECT „Улаанбаатар хотоос зохиогч байхгүй‟ ELSE SELECT „Улаанбаатар хотоос ядаж нэг зохиогч байна‟ IF („UB‟!=ANY (SELECT city FROM authors)) SELECT „Улаанбаатар хотоос ядаж нэг зохиогч байна‟ ELSE SELECT „Улаанбаатар хотоос зохиогч байхгүй‟
Тэмдэгт мөр залгах үйлдэл Тэмдэгт мөрүүдийг залгахдаа + үйлдлийг ашигладаг.Харин тэмдэгт мөртэй холбоотой бусад бүх үйлдлүүд нь SUBSTRING гэх мэт функцүүдийн тусламжтайгаар гүйцэтгэдэг. Үйлдлүүдийн зэрэглэл Хэрэв илэрхийлэлд олон үйлдэл оролцсон байвал тухайн үйлдлүүд ямар дарааллаар бодогдохыг тэдгээрийн зэрэглэл тодорхойлно. SQL хэлийн үйлдлүүд зэрэглэлээр дараах байдлаар жагсаагддаг. Унар үйлдлүүд : +, -, ~, (Бит үгүйсгэл) *, /, % =, >, =, , !< ^ (Бит XOR), & (Бит AND), | (Бит OR) NOT AND ALL, ANY, BETWEEN, IN, LIKE, OR, SOME = WHILE давталт Бичлэгийн хэлбэр нь : WHILE Boolean_илэрхийлэл {нэг буюу бүлэг командууд} [BREAK] { нэг буюу бүлэг командууд } [CONTINUE] Жишээ : CREATE TABLE # Test (Counter int, DateCreated datetime) GO DECLARE @ counter int SET @counter =1 WHILE @counter8 BEGIN PRINT “Inserted more than 8 rows” BREAK END SET @counter=@counter+1 END CASE КОМАНД Энэ команд нь олон сонголтыг гүйцэтгэдэг команд юм. CASE нь 2 үндсэн форматтай : Энгийн CASE команд нь илэрхийллийг тооцоолж олон сонголтыг сонгодог. Харин нөгөө формат нь үр дүнг гаргахын тулд олон илэрхийллийг тооцоолдог. Бичлэгийн хэлбэр CASE оролтын илэрхийлэл WHEN илэрхийлэл THEN үр дүнгийн илэрхийлэл
[…n] [ ELSE үр дүнгийн илэрхийлэл ] END Оролтын илэрхийллийг тооцоолоод оролтын_илэрхийлэл=илэрхийлэл шалгалтыг хийж сонголт хийнэ. --------------------------------------------------------------------CASE WHEN ШалгахИлэрхийлэл THEN Үр дүнгийн илэрхийлэл […n] [ ELSE Үр дүнгийн илэрхийлэл ] END Дарааллын дагуу Шалгах илэрхийллүүдийг тооцоолон анхны үнэн утга буцаасан сонголтыг хийнэ. SELECT GETDATA(), CASE DATEPART(dw, GETDATE()) WHEN 1 THEN “Даваа” WHEN 2 THEN “Мягмар” WHEN 3 THEN “Лхагва” WHEN 4 THEN “Пүрэв” WHEN 5 THEN “Баасан” WHEN 6 THEN “Бямба” WHEN 7 THEN “Ням” DECLARE @Var1 smalldatetime, @ Var2 int SET @Var1=‟13 aug 1978‟ SET @Var@=DATEDIFF (yy, @Var1, GetDate())/ 365 SELECT @Var2, Case WHEN @Var2$10 AND CompanyName Like N‟F%‟ Нийлмэл хүсэлтийг боловсруулахдаа SQL Server нь дараах логик дарааллыг баримталдаг: From хэсэг дэх холболтын нөхцлийг боловсруулна. WHERE хэсэг дэх холболтын нөхцөл болон хайлтын нөхцлийг боловсруулна. HAVING хэсэг дэх хайлтын нөхцлийг боловсруулна. Холболтын нөхцөлд оролцох баганууд нь ижил нэртэй байж болохгүй, мөн ижил төрөлтэй байх ѐстой. Холболт ашиглаж хийсэн нийлмэл хүсэлтүүдийг ихэнх тохиолдолд Дэд хүсэлт ашиглан хийж болдог. Мөн ихэнх дэд хүсэлт ашигласан хүсэлтүүдийг нийлмэл хүсэлт ашиглан хийж болдог. Хэдийгээр холболтын нөхцлийг FROM болон WHERE хэсэгт хоѐуланд нь зааж өгч болох боловч, FROM-д зааж өгөх нь дээр байдаг. Холболтын дараах төрлүүд байдаг. Дотоод холболт 2 хүснэгтийн ерөнхий багануудын утгууд дээр харьцуулах үйлдэл ашиглан гадаад холболтыг хийдэг ба тухайн харьцуулах нөхцлийг хангасан утгууд л сонгогдоно. SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city = p.city ORDER BY a.au_Iname DESC
Гадаад холболт. Гадаад холболт нь зүүн, баруун, бүтэн гэсэн 3 төрөл байдаг. Дотоод холболт хийсэн үед тухайн нөхцлийг хангаагүй мөрүүдийг буцаадаггүй. Харин гадаад холболт хийсэн үед тухайн 2 хүснэгтийн ядаж аль нэгнийх нь бүх бичлэгүүдийг буцаадаг. LEFT JOIN or LEFT OUTER JOIN Зүүн гадаад холболтын үр дүнд LEFT OUTER хэсэгт заасан зүүн хүснэгтээс зөвхөн тухайн нөхлийг хангасан мөрүүдийг биш, бүх мөрүүдийг татна. Хэрэв зүүн хүснэгтийн мөрийн утга нь баруун хүснэгтэд байхгүй тохиолдолд баруун хүснэгтээс авч буй бүх талбарууд NULL утгатай болдог. RIGHT JOIN or RIGHT OUTER JOIN. Баруун хүснэгтээс бүх мөрүүдийг татна. Хэрэв баруун хүснэгтийн утга нь зүүн хүснэгтэд байхгүй бол зүүн хүснэгтийн талбаруудад NULL утгууд буцаагдана. FULL JOIN or FULL OUTER JOIN. Бүтэн холболт нь зүүн ба баруун хүснэгтээс бүх мөрүүдийг буцаана. нэг хүснэгт дэх утга нь нөгөөдөхдөө байхгүй байх тохиолдол бүрд нөгөө хүснэгтийн талбарууд нь NULL утгатай буцаагдана.
Хөндлөн холболт Хөндлөн холболтын үед зүүн хүснэгтээс бүх мөрүүд буцаагдах ба зүүн хүснэгтийн мөр бүр нь баруун хүснэгтийн бүх мөрүүдтэй нэгтгэсэн байдлаар буцаагдана.
SQL Server нь SQL-92 стандартын дагуу WHERE хэсэгт *= ба =* үйлдлүүдийг ашиглан гадаад холболтыг хийх боломжтой байдаг.
Зүүн гадаад холболтыг ашиглах Дараах жишээнд хэвлэлийн газар нь байрладаг хотдоо амьдардаг зохиолчдыг үзүүлжээ. Жишээнд бүх зохиолчдыг үзүүлэхийн тулд зүүн гадаад холболтыг ашиглажээ. SELECT a.au_fname, a.au_Iname, p.pub_name FROM authors a LEFT OUTER JOIN publishers p ON a.city = p.city ORDER BY p.pub)name ASC, a.au_Iname ASC, a.au_fname ASC LEFT OUTER JOIN нь authors хүснэгтээс бүх бичлэгийг publishers хүснэгтэд тухайн зохиолчийг хот байгаа эсэхээс үл хамааран татна. Хэрэв тухайн хот байхгүй бол pub_name талбар NULL утга авна. Баруун гадаад холболтыг ашиглах Дараах жишээнд тухайн хэвлэлийн газрын байрладаг хотод амьдардаг зохиолчдыг үзүүлжээ. Гэхдээ баруун холболт ашигласан учир бүх хэвлэлийн газарүр дүнд буцах ба харин тухайн хэвлэлийн газар байрладаг хотод амьдардаг зохиолч байхгүй бол харгалзах талбарууд NULL утга авна. SELECT a.au_fname, a.au_Iname, p.pub_name FROM authors AS a RIGHT OUTER JOIN publishers AS p ON a.city = p.city ORDER BY p.pub_name ASC, a.au_Iname, a.au_fname ASC Бүтэн гадаад холболтыг ашиглах Хэрэв бүх хэвлэлийн газар болон бүх зохиолчдын мэдээллийг авахыг хүсвэл бүтэн холболт ашиглана. SELECT a.au_fname, a.au_Iname, p.pub_name FROM authors a FULL OUTER JOIN publishers p ON a.city = p.city ORDER BY p.pub_name ASC, a.au_Iname ASC, a.au_fname ASC Хөндлөн холболт ашиглах Өмнөх жишээн дээр CROSS JOIN ашиглавал нийт 184 бичлэг буцааж байна. Authors хүснэгт 23 бичлэг, харин publishers нь 8 бичлэгтэй бөгөөд үр дүн нь 8*23=184 болно. SELECT au_fname, au_Iname, pub_name FROM authors CROSS JOIN publishers ORDER BY au_Iname DESC Хэрэв WHERE хэсгийг CROSS JOIN дээр хийвэл энэ нь дотоод холболттой адил болно. SELECT au_fname, au_Iname, pub_name FROM authors CROSS JOIN publishers WHERE authors.city = publishers.city ORDER BY au_Iname DESC -- Эсвэл SELECT au_fname, au_Iname, pub_nam FROM authors INNER JOIN publishers ON authors.city = publishers.city ORDER BY au_Iname DESC WHERE хэсэгт холболтыг хийх : Эцсийн үр дүнд нөлөөлөхгүйгээр дотоод холболтыг FROM эсвэл WHERE-д зааж өгч болно. Харин гадаад холболтын хувьд тэд FROM эсвэл WHERE-д хийгдсэн
эсэхээсээ шалтгаалан ялгаатай ажиллаж болно. Дараах жишээнд WHERE хэсэгт холболтыг хийсэн мөн шүүлт хийсэн байна: SELECT t.title_id, t.title, s.qty FROM titles AS t, sales AS s WHERE t.title_id *= s.title_id AND s.stor_id = „7066‟ Жишээнд stor_id = „7066‟ нь холболтын нөхцөлтэй цуг бодогдоно. Нийлмэл хүсэлт нь 18 мөр буцаана. Харин холболтыг FROM хэсэгт хийвэл: SELECT t.title_id, t.title, s.qty FROM titles AS t LEFT OUTER JOIN sales AS s ON t.title_id = s.title_id WHERE s.stor_id = „7066‟ Энэ хүсэлт ердөө 2 мөр буцаана. Учир нь эхлээд зүүн холболт хийсний дараа stor_id = „7066‟ шүүлт хийгдэнэ. Хүсэлт нь stor_id талбартаа NULL утга бүхий бичлэгүүдийг хасаад дараа нь шүүлт хийнэ. Харин өмнөх жишээтэй адил үр дүн буцаахыг хүсвэл WHERE хэсгийг авч хаяж болно: SELECT t.title_id, t.title, s.qty FROM titles AS t LEFT OUTER JOIN sales AS s ON t.title_id = s.title_id AND s.stor_id = „7066‟ Лекц 10. - SELECT, INSERT, UPDATE, DELETE UNION ашиглан хүснэгтүүдийг нэгтгэх UNION үйлдлийг ашиглан олон SELECT хүснэгтүүдийн үр дүнг нэг хүснэгтэд нэгтгэдэг. Нэгтгэгдэх хүснэгтүүд нь бүгд ижил бүтэцтэй байх ѐстой. Энэ нь ижил тооны багануудтай, мөн баганууд нь харгалзан ижил төрөлтэй байх ѐстой. Бичлэгийн хэлбэр: Select_statement UNION [ALL] select_statement Жишээ: Table1 ColumnA Char(4) …….. abc def ghi
ColumnB int …. 1 2 3
Table2 ColumnC char(4) ……… ghi jkl mno
ColumnD int …. 3 4 5
SELECT * FROM Table1 UNION SELECT * FROM Table2 Үр дүнд нь : abc def ghi jkl mno
1 2 3 4 5
Нэгдсэн хүснэгтийн багануудын нэр нь эхний хүснэгтээс сонгогдоно. Эхний хүснэгтийн нэрийг өөрчлөхөд нэгдсэн хүснэгтийн нэрүүд өөрчлөгдөнө. UNION үйлдэл нь үр дүнгийн хүснэгтээс
давтагдсан мөрүүдийг хасдаг. Харин ALL-ийг хамт ашигласан тохиолдолд давтагдсан мөрүүдийг хасахгүйгээр бүх мөрүүдийг буцаадаг. Хэдэн ч тооны хүснэгтүүдийг UNION ашиглан нэгтгэж болдог: SELECT * FROM TableA UNION SELECT * FROM TableB UNOIN SELECT * FROM TableC UNION SELECT * FROM TableD UNOIN ашиглан нэгтгэж байх үед, нэгж SELECT хүснэгтүүд нь ORDER BY эсвэл COMPUTE ашиглаж болохгүй. Харин сүүлийн SELECT хүснэгтийн ард л ORDER BY, COMPUTE –ыг ашиглаж болно. Өөрөөр хэлбэл тэдгээрийн нэгдсэн хүсэлтэд л ашиглана. GROUP BY, HAVING нь нэгдсэн хүсэлтэд биш, харин нэгж SELECT хүсэлтэд л ашиглагдана. Дэд хүсэлт тодорхойлох, ашиглах Дэд хүсэлт гэдэг SELECT, INSERT, UPDATE, DELETE командуудад ашиглагдаж болох SELECT хүсэлт юм. Илэрхийлэл ашиглах боломжтой бүх газар дэд хүсэлтийг ашиглаж болно. SELECT Ord.OrderID, Ord.OrderDate, (SELECT MAX(OrdDet.UnitPrice) FROM Northwind.dbo.[Order Details] AS OrdDet WHERE Ord.OrderID = OrdDet.OrderID) AS MaxUnitPrice FROM Northwind.dbo.Orders AS Ord Ихэнх дэд хүсэлт ашигласан хүсэлтүүдийг нийлмэл хүсэлт ашиглан бичиж болдог. Дараах жишээнд дэд хүсэлт болон нийлмэл хүсэлт ашиглах аргуудаар тухайн даалгаврыг гүйцэтгэжээ: /* Дэд хүсэлт ашиглавал */ SELECT ProductName FROM Northwind.dbo.Products WHERE UnitPrice = (SELECT UnitPrice FROM Northwind.dbo.Products WHERE ProductName = „Sir Rodney‟‟s Scones‟ ) /* Нийлмэл хүсэлт ашиглавал */ SELECT Prd1.ProductName FROM Northwind.dbo.Products AS Prd1 JION Northwind.dbo.Products AS Prd2 ON ( Prd1.UnitPrice = Prd2.UnitPrice) WHERE Prd2.ProductName = „Sir Rodney‟‟s Scones‟ Дэд хүсэлт нь үргэлж хаалтаар хашигдаж байдаг. Дэд хүсэлтэд COMPUTE, FOR BROWSE-ийг ашиглаж болохгүй. Дэд хүсэлтийг 32 хүртэл давхраар ашиглаж болно. USE pubs SELECT au_lname, au_fname FROM authors WHERE au_id IN (SELECT au_id FROM titleauthor WHERE title_id IN (SELECT title_id FROM titles WHERE type = „popular_comp‟ ) )
Дэд хүсэлт ашигласан хүсэлт нь ихэвчлэн дараах форматаар ашиглагддаг. WHERE expression [NOT] IN (subquery) WHERE expression comparison_operator [ANY | ALL] (subquery) WHERE [NOT] EXISTS (subquery) Дэд хүсэлт нь зөвхөн нэг утга буцаадаг бол түүнийг илэрхийлэл дотор ашиглаж болно. SELECT title, price, (SELECT AVG(price) FROM titles) AS difference FROM titles WHERE type = „popular_comp‟ INSERT команд Хүснэгтэд шинэ мөрүүд нэмэхийн тулд INSERT командыг ашигладаг. INSERT [INTO] Хүснэгт [(Багануудын_жагсаалт)] Шинээр_оруулах_утгууд Багануудын_жагсаалт нь өгөгдөл оруулах багануудыг таслалаар зааглан оруулж өгсөн дараалал юм. Хэрэв Багануудын_жагсаалт-ыг зааж өгөөгүй бол тухайн хүснэгт дэхь бүх багануудад утга авахыг тодорхойлно. Хэрэв хүснэгтэд өгөгдөл оруулахдаа зарим баганыг зааж өгөөгүй бол Багануудын_жагсаалт-д заагдаагүй багануудад NULL утга (эсвэл default утга) олгогдоно. Иимд тэдгээр багануудад нь эсвэл NULL утгыг зөвшөөрдөг байх ѐстой эсвэл анхдагч утгатай байх ѐстой. INSERT командыг ашиглан өгөгдөл оруулахдаа дараах төрлийн багануудыг зааж өгч болохгүй. IDENTITY тодорхойлолттой бөгөөд автоматаар утгаа авдаг баганууд Default тодорхойлолтод нь NEWID функцыг ашигласан баганууд Тооцоологдсон баганууд Жишээ нь дараах байдлаар үүсгэгдсэн ColC багана: CREATE TABLE TestTable (ColA INT PRIMARY KEY, ColB INT NOT NULL, ColC AS (ColA + ColB) * 2 ) Тухайн хүснэгтэд оруулахаар зааж өгч байгаа утгууд нь тэдгээр утгыг авахаар тодорхойлогдсон багануудтай ижил төрөлтэй, тэнцүү тоотой байх шаардлагатай. Хүснэгтэд оруулах утгуудыг зааж өгөх арга байдаг. VALUES хэсгийг ашиглан утгуудыг тоочиж өгөх Энэ аргаар зөвхөн нэг бичлэгийн утгуудыг зааж өгнө. Хэрэв багануудын жагсаалтыг зааж өгөөгүй бол утгуудыг оруулж өгөгхдөө хүснэгтийг үүсгэсэн форматын даруу дараалал баримтална. INSERT INTO MyTable (PriKey, Description) VALUES (123, „A description of part 123.‟ )
Дэд хүсэлт ашиглан нэгээс олон бичлэгийг баазад оруулах үйлдлийг хийдэг. Мөн дэд хүсэлт ашиглан өгөгдөл оруулах бас нэг хэрэглээ нь гадаад баазаас өгөгдөл оруулах юм.
SELECT INTO ашиглан өгөгдөл оруулах SELECT INTO командыг ашиглан шинэ хүснэгт үүсгэн түүнд өгөгдөл оруулдаг. Шинээр үүсгэх хүснэгтийн бүтэц нь хүсэлтийн жагсаалт дахь илэрхийллийн бүтэц аттрибутаар тодорхойлогдоно. SELECT INTO команд нь хэд хэдэн хүснэгтээс нийлмэл хүсэлтээр сонгогдох өгөгдлийг нэг хүснэгтэд нэгтгэхэд ашиглагдана. SELECT Shippers.*, Link.Address, Link.City, Link.Region, Link.PostalCode INTO NewShippers
FROM Shippers JOIN LinkServe.DB.dbo.Shippers AS Link ON (Shippers.ShipperID = Link.ShipperID) Лекц 11 - UPDATE, DELETE, VIEW Хүснэгт дэхь өгөгдлийг өөрчлөх Хүснэгтийг үүсгэж өгөгдөл оруулсны дараа өгөгдлийг өөрчлөх үйл ажиллагаа нь өдөр тутмын үйл ажиллагаа болдог. SQL server нь хүснэгт дэхь өгөгдлийг өөрчлөх дөрөөх арга механизмуудтай. UPDATE команд Хүснэгт дэхь тодорхой шаардлага хангасан мөрүүдийг өөрчлөхөд хэрэглэгдэнэ. API функцууд ашиглах Хүснэгтийн идэвхитэй бичлэгийг өөрчлөхөд ашиглагдана. UPDATETEXT команд ntext, text, image төрөлтэй утгуудыг өөрчлөхөд энэ командыг хэрэглэнэ. UPDATE ашиглан өгөгдлийг өөрчлөх UPDATE команд нь зөвхөн нэг бичлэгийг эсвэл хэсэг бүлэг бичлэгийг мөн бүх бичлэгийг өөрчлөхөд ашиглагдана. Мөн OPENROWSET, OPENQUERY функцуудыг ашиглан холбосон алсын сервер дээрх бичлэгүүдийг өөрчлөхөд ашиглагдана. UPDATE команд нь дараах үндсэн 3 хэсэгтэй. SET Багануудын утгыг өөрчлөх (Багана = Илэрхийлэл) илэрхийллүүдийг таслалаар зааглан жагсаасан дарааллыг зааж өгөх хэсэг юм. Тухайн багануудад олгож өгөх утгууд нь тогтмол утга эсвэл өөр хүснэгтийн баганын утга эсвэл илэрхийллээс бодогдох утга байж болно. FROM SET хэсэгт талбарууд нь ашиглагдах хүснэгтүүдийг тодорхойлох хэсэг юм. WHERE Хүснэгтүүдээс тодрхой шаардлага хангах бичлэгүүдийг шүүх хэсэг юм. Жишээ: UPDATE Northwind.dbo.Products SET UnitPrice = UnitPrice*1.1 WHERE CategoryID = 2 Хэрэв WHERE хэсэг заагдаагүй бол тухайн UPDATE нь бүх бичлэгийн утгыг өөрчилнө. UPDATE publishers SET city = „Atlanta‟, state = „Georgia‟ SET хэсэгт баганын утгыг тооцоолсон утгаар тодорхойлж болно. UPDATE OrderSummary SET Last30Days = (SELECT SUM(OrdDet.UnitPrice * OrdDet.Quantity) FROM [Order Details] AS OrdDet JOIN Orders AS Ord ON (OrdDet.OrderID = Ord.OrderID AND Ord.OrderDate > DATEADD (dd,-30,GETDATE() ) ) ) ntext, text, image төрөлтэй талбарыг өөрчлөх Эдгээр төрөлтэй талбаруудын утгыг дараах аргуудаар өөрчилж болно. Хэрэв бага хэмжээний утга олгож өгөх гэж буй бол UPDATE командаар өөрчилнө. WRITETEXT командыг ашиглан өөрчилж болно.
Тухайн талбарын утгын зарим нэг хэсгийг өөрчлөх гэвэл UPDATETEXT командыг ашиглана.
Жишээ: CREATE TABLE TextParts (ColA INT PRIMARY KEY, ColB TEXT) GO INSERT INTO TextParts VALUES (1, „Sample string START TAG Text to go END TAG Trailing text.‟) GO DECLARE @PtrVar BINARY(16) DECLARE @InsertPos INT DECLARE @DeleteLen INT SELECT @PtrVar = TEXTPTR(ColB), @InsertPos = (PATINDEX(„%START TAG%‟, ColB) + 9 ), @DeleteLen = (PATINDEX(„%END TAG%‟, ColB) – ( PATINDEX(„%START TAG%‟, ColB) + 9 + 2 /* allow for blanks */ ) FROM TextParts WHERE ColA = 1 UPDATETEXT TextParts.ColB @PtrVar @InsertPos @DeleteLen WITH LOG „The new text‟ GO SELECT * FROM TextParts Үр дүн нь: ColA ColB ------------ --------------------------------------------------------------------------1 Sample string START TAG The new text END TAG Trailing text. Өгөгдлийг устгах SQL Server нь хүснэгт дэхь өгөгдлийг устгах дараах аргуудыг ашигладаг. DELETE команд Хүснэгт дэхь идэвхтэй бичлэгийг устгаах TRUNCATE TABLE команд DELETE команд DELETE команд нэг болон хэд хэдэн бичлэгүүдийг устгахад хэрэглэгдэнэ. DELETE table FROM table_sources WHERE search_condition Хэрэв WHERE хэсгийг заагаагүй бол тухайн хүснэгтийн бүх бичлэгийг устгана. FROM хэсэгт туханй WHERE хэсэгт заагдах нөхцөлд ашиглагдах хүснэгтийг зааж өгөхөд л хэрэглэнэ. Харин FROM хэсэгт заагдсан хүснэгтээс өгөгдөл устгагдахгүй. Харин DELETE хэсэгт заагдсан хүснэгтээс өгөгдөл устгагдана. DELETE [Order Details] FROM Supplies, Products WHERE Products.SupplierID = Supplies.SupplierID AND Suppliers.CompanyName = „Lyngbysild‟ AND [Order details].ProductID = Products.ProductID
TRUNCATE TABLE команд Энэ команд нь хүснэгт дэх бүх мөрүүдийг устгадаг маш хурдан арга юм. DELETE командыг нөхцөл зааж өгөлгүйгээр ашиглан бүх мөрүүдийг устгаснаас TRUNCATE TABLE командыг ашиглах нь илүү хурдан байдаг. Жишээ нь: TRUNCATE TABLE authors Проекц үүсгэх, ашиглах Проекц гэдэг нь тодорхой хүсэлтээр агуулга нь тодорхойлогдох виртуаль хүснэгт юм. Хүснэгт нь хэдийгээр логик бүтцын хувьд бодит хүснэгттэй ижил боловч хүснэгт шиг бодитойгоор өгөгдлийн санд хадгалагддаггүй. Харин тухайн проекцд хандах үед динамикаар түүний өгөгдлүүдийг үүсгэдэг. Нэг болон хэд хэдэн хүснэгт эсвэл өөр проекц дээр үндэслэсэн хүсэлтээр проекцыг тодорхойлж болно. Проекц ашиглан өгөгдөлд өөрчлөлт хийхэд тодорхой хязгаарлалт бий. Синтакс: CREATE VIEW view_name [(column [,…n])] [WITH ENCRYPTION] AS select_statement [WITH CHECK OPTION] Жишээ : CREATE VIEW dbo.TitleView AS SELECT title, author FROM title Дараа нь үүсгэсэн проекцоо ашиглахдаа: SELECT * FROM TitleView Проекц үүсгэх хүсэлтдээ функц ашиглаж болох ба ингэсэн тохиолдолд тухайн баганыг зайлшгүй нэрлэх шаардлагатай. IF EXISTS (SELECT TABLE_NAME WHERE TABLE_NAME = „categories‟) DROP VIEW categories GO CREATE VEAW categories (category, average_price) AS SELECT tipe, AVG(price) FROM titles GROUP BY type GO
FROM
INFORMATION_SCHEMA>VIEWS
Нэгэнт үүсгэсэн проекцийг өөрчлөхдөө ALTER VIEW командыг ашиглана. ALTER VIEW dbo.TitleView AS SELECT title, author, synopsis FROM title
Лекц 14 - PROCEDURE Transact SQL хэлийг ашиглан дараах 2 үндсэн аргаар өгөгдлийн санг удирдах програмчлалыг хийдэг. Нэг арга нь хэрэглэгчийн програмаас Transact SQL командуудыг илгээж тухайн командууд ажиллан өгөгдлийн санг удирдах, нөгөө нь Transact SQL командуудыг процедур хэлбэрээр өгөгдлийн санд хадгалан, харин хэрэглэгчийн програм нь тухайн процедурыг дуудаж өгөгдлийн санг удирдах аргууд юм. SQL Server-ийн процедур нь бусад програмчлалын хэлүүдэд байдаг процедуртай ижил шинж чанартай юм. Жишээ нь:
SQL серверийн процедур нь аргумент авдаг. Утга буцаадаг процедур юм. Процедур дотор өгөгдлийн санг удирдах дурын Transact SQL командуудыг ашиглаж болох ба өөр процедурыг ч дуудсан үйлдэл байж болно. Тухайн процедур нь амжилттай эсвэл алдаатай биелэгдсэн эсэх мэдээллийг буцаах боломжтой.
Гэхдээ SQL-ийн процедур нь функцээс ялгаатай юм. Процедур нь дуудсан газраа утга буцаадаггүй учир илэрхийлэлд шууд ашиглах боломжгүй. Хэрэглэгчийн програмаас SQL командаар хүсэлт тавихаас процедур бичиж ашиглах арга нь олон талын давуу талуудтай:
Модуль програмчлалын боломжийг бүрдүүлнэ: Процедурыг нэг удаа үүсгэн баазад хадгалаад л дараа нь хичнээн ч удаа, хэзээ ч дуудаж ашиглаж болно. Процедур ашигласан тохиолдолд тухайн ямар нэг даалгавар, шаардлага өөрчлөгдөх үед зөвхөн процедурт л засвар хийгдэх буюу хэрэглээний програмаа дахин засварлах шаардлагагүй. Биелэгдэх хурдны хувьд давуу боломжтой: Хэрэв олон тооны командуудаас бүрдэх нүсэр ажил байгаа тохиолдолд түүнийг процедур ашиглан гүйцэтгэвэл илүү хурдан гүйцэтгэлтэй байх болно. Учир нь багц ажлын команд бүр тус тусдаа боловсруулагдах ба командыг биелүүлэх үйлдэл нь хэд хэдэн дамжлагаар гүйцэтгэгддэг. Тиймээс сервер лүү давтан илгээсэн багц ажил бүр тусдаа боловсруулалт хийгдэнэ. Харин процедур ашигласан тохиолдолд процедурыг үүсгэх үед зарим боломжтой үйлдлүүдийг урьдчилан хийсэн байдаг. Сүлжээний ачааллыг багасгана: Багц үйл ажиллагаагаа процедур болгон бичих нь маш олон командуудыг хэрэглэгчийн програмаас серверт илгээж сүлжээний ачааллыг ихэсгэхээс сэргиилнэ. Процедур ашиглах нь хамгаалалтын механизм болж өгнө: Хэрэглэгчдэд зөвхөн процедур дуудаж ажиллуулах эрх тавьж өгөх ба процедур дотор хандагдаж буй обьектуудад хандах эрхгүй болгосноор нэгэн төрлийн хамгаалалтын механизм хэрэгжүүлж болно.
Процедур үүсгэхийн тулд CREATE PROCEDURE командыг ашиглана. CREATE PROC[EDURE]procedure_name [;number] [{@parameter data_tupe} [VARYING] [=default] [OUTPUT]] [,…n] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION} ] [FOR REPLICATION] AS sql_statement [...n] Аргументуудын тайлбар VARYING Зөвхөн курсор төрлийн параметрт хэрэглэгдэх бөгөөд процедураас хүснэгт буцааж болохыг зааж өгнө. default Параметрийн анхдагч утгыг зааж өгөхөд хэрэглэгдэнэ. OUTPUT Тухайн параметрийг буцах утга авахыг тодорхойлно. Ө.х процедураас үр дүн буцаахад хэрэглэгдэнэ. { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION }
RECOMPILE нь SQL Server тухайн процедурын ажлын төлөвлөгөөг кэшлэхгүй буюу урьдчилан боловсруулалт хийхгүй гэдгийг тодорхойлно. Процедур биелэгдэх бүрдээ компиляци хийгдэх болно. ENCRYPTION нь SQL Server нь тухайн процедурын source код хадгалагдах syscomments хүснэгтэд кодчилол хийх эсэхийг тодорхойлно. Жиш: CREATE PROCEDURE au_ info @ lastname varchar(40), @ firstname varchar(20) AS SELECT au_lname, au_fname, title, pub_name FROM authors a INNER JOIN titleauthor ta ON a.au_id = ta.au_id INNER JOIN titles t ON t.title_id = ta.title_id INNER JOIN publishers p ON t.pub_id = p.pub_id WHERE au_fname = @firstname AND au_lname = @lastname OUTPUT параметрийг ашиглах Процедур дотроос тогтоосон хувьсагчийн утгыг ашиглахын тулд OUTPUT параметрийг ашиглана. CREATE PROCEDURE titles_sum @@TITLE varchar(40) = „%‟, @@SUM money OUTPUT AS SELECT „Title Name‟ = title FROM titles WHERE title LIKE @@TITLE SELECT @@SUM = SUM (price) FROM titles WHERE title LIKE @@TITLE GO Дээрх процедурыг дуудаж ашигласан жишээ: DECLARE @@TOTALCOST money EXECUTE titles_sum „The%‟, @@TOTALCOST OUTPUT IF @@TOTALCOST < 200 BEGIN PRINT „ „ PRINT „All of these titles can be purchased for less than $200. „ END ELSE SELECT.„The total cost of these titles is $ „ +RTRIM(CAST(@@ TOTALCOST AS varchar(20))) Here is the result set: Title Name ------------------------------------------------------The Busy Executive‟s Database Guide The Gourmet Microwave The Psychology of Computer Cooking (3 row(s) affected)
Түр зуурын процедур SQL Server нь глобаль ба локаль гэсэн 2 төрлийн түр зуурын процедуртай. Локаль түр зуурын процедур нь зөвхөн тухай холболтод л харагдана. Харин глобаль түр зуурын процедур нь бүх холболтын үед харагдана. Түр зуурын хүснэгтийг үүсгэхийн тулд нэрийн өмнө нь # ба ## гэсэн префикс ашиглана. Локаль түр зуурын хүснэгтийг үүсгэсэн хэрэглэгч нь л ашиглаж чадна. Харин глобалийг нь бүх хэрэглэгч ашиглаж болно. Триггер Триггер гэдэг бол хүснэгт дээр оруулах, өөрчлөх, устгах үйлдэл хийгдэх үед автоматаар биелэхээр тодорхойлж өгсөн тусгай зориулалтын процедур юм. Өгөгдөл өөрчлөгдөх үед автоматаар дүрэм, шаардлагуудыг шалгаж байх зорилгоор триггерийг ашигладаг. Нэг хүснэгт дээр хэд хэдэн триггер тодорхойлогдож болно. CREATE TRIGGER командыг ашиглан триггерийг үүсгэж болно. Триггер нь тухайн шалгалт хийгдэх гэж байгаа үйлдэл нь биелэгдсэний дараа ажилладаг.Харин үйлдэл нь алдаатай биелэгдсэн тохиолдолд триггер ажилладаггүй. Өгөгдөл дээр ямар өөрчлөлт хийж байгаагаас хамаарч 3 төрлийн триггерийг тодорхойлж болдог. INSERT TRIGGER UPDATE TRIGGER DELETE TRIGGER Syntax CREATE TRIGGER trigger_name ON table [WITH ENCRYPTION] { { FOR {[DELETE] [,] [INSERT] [,] [UPDATE] } [WITH APPEND] [NOT FOR REPLICATION] AS sql_statement [,...n] } I {FOR { [INSERT] [,] [UPDATE] } [WITN APPEND] [NOT FOR REPLICATION] AS { IF UPDATE (column) [{AND |.OR} UPDATE(column)] [...n] | IF (COLUMNS_UPDATED() {bitwise_operator} updated_bitmask) { comparison_operator} column_bitmask [...n] } sql_statement [...n] } } Arquments IF UPDATE (column) INSERT, UPDATE үйлдлүүд тухайн багана дээр хийгдсэн эсэхийг шалгана.Харин DELETE шалгалтын үед ашиглагдахгүй. Нэгээс олон баганыг зааж өгч болно. Мөн UPDATE(column) шалгалтыг триггерийн аль хэсэгт ашиглаж болно. IF (COLUMNS_UPDATED()) Оруулах болон өөрчлөх үйлдлүүд баганууд дээр хийгдсэн эсэхийг шалгана. Энэ функц нь Varbinary төрлийн утга буцаах бөгөөд энэ утгын битүүд нь хүснэгтийн ямар багануудад өөрчлөлт орсныг тодорхойлно.
Жишээ: CREATE TRIGGER reminder ON employee FOR INSERT, UPDATE AS RAISERROR (50009, 16, 10) GO CREATE TRIGGER employee_insupd ON employee FOR INSERT, UPDATE AS /* Get the range of level for this job type from the jobs table. */ DECLARE @min_lvl tinyint, @max_lvl tinyint, @emp_lvl tinyint, @job_id=i.job_id FROM employee e INNER JOIN inserted i ON e.emp_id=i.emp_id JOIN jobs j ON j.job_id = i.job_id IF (@job_id = 1 ) and (@emp_lvl 10) BEGIN RAISERROR („Job id 1 expect the default level of 10.‟, 16, 1) ROLLBACK TRANSACTION END ELSE IF NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl) BEGIN RAISERROR („The level for job_id:%d should be between %d and %d.‟, 16, 1, @job_id, @min_lvl, @max_lvl) ROLLBACK TRANSACTION END
View more...
Comments