SQL haqida va buyruqlar
Tuzilami So'rovlar Tili(ing - Structured Query Language=SQL) - Nisbiy ma'lumotlar bazasida(Relational DBMS, qisqartmasi RDBMS) ma'lumotni boshqarish va saqlash uchun ishlatiladigan baza so'rovlar tili hisoblanadi. SQL E.F Codd-ning ma'lumotlar bazasining Relational model-i uchun birinchi taqdim etilgan tijoriy tildir. Bugun deyarli barcha RDMBS-lar(MySql, Oracle, Infomix, Sybase, MS Access) standart baza so'rovlar tili sifatida SQL-ni ishlatadilar. SQL - RDMBS-larda barcha ma'lumot turlari bo'yicha operatsiyalarni amalga oshirish uchun ishlatiladi.
SQL buyruqlar
SQL RDBMS-da saqlanadigan ma'lumotni boshqarish uchun quyidagi usullarni belgilaydi.
DDL: Data Definition Language
Bunga jadvalning tuzilishi, jadvalni o'zgartirish, jadvalni o'chirish va boshqalar kabi jadvalning tuzilishidagi o'zgarishlar kiradi.
Barcha DDL buyruqlari avtomatik bajariladi. Bu barcha o'zgarishlarni ma'lumotlar bazasida doimiy ravishda saqlashini anglatadi.
Buyrug' Ta'rifi
create yangi baza yoki ro'yhat yaratish
alter o'zgartirish
truncate ro'yhatdan ma'lumotni o'chirish
drop ro'yhatni tashash
rename ro'yhatni qayta nomlash
DML: Ma'lumotni boshqarish tili
DML buyruqlari jadvalning o'zida emas, balki jadvalda saqlanadigan ma'lumotni boshqarish uchun ishlatiladi. DML buyruqlari avtomatik bajarilmaydi. Bu ma'lumotlar bazasida doimiy emasligini va ularni orqaga qaytarish mumkinligini anglatadi.
Buyruq Ta'rifi
insert yangi qator qo'shish uchun
update mavjud qatorni yangilash
delete qatorni o'chirish
merge ikkita qatorni yoki ikkita jadvalni birlashtirish
TCL: Tranzaktsiyalarni boshqarish tili
Ushbu buyruqlar boshqa buyruqlar va ularning ma'lumotlar bazasiga ta'sirini tekshirishni o'z ichiga oladi. Ushbu buyruqlar boshqa buyruqlar tomonidan kiritilgan o'zgarishlarni ma'lumotlarni asl holatiga qaytarish orqali bekor qilishi mumkin. Har qanday vaqtinchalik o'zgarishni doimiy holga keltirishi mumkin.
Buyruq Ta'rifi
commit doimiy saqlash
rollback o'zgarishni ortga qaytarish
savepoint vaqtinchalik saqlash
DCL: Ma'lumotlarni boshqarish tili
Ma'lumotni boshqarish tili - bu ma'lumotlar bazasining har qanday foydalanuvchisidan vakolat berish va qaytarib olish buyruqlari.
Buyruq Ta'rifi
grant ruxsat berish
revoke ruxsatni qaytaib olish
DQL: Ma'lumotlar so'rovi tili
Ma'lumotlar so'rovi tili biz osonlikcha qo'llashimiz mumkin bo'lgan shartlarga asoslanib jadvallardan ma'lumotlarni olish uchun ishlatiladi.
MySQL ga kirish
PHP - foydalanuvchi ma'lumotlarini ma'lumotlar omboriga saqlash imkoni mavjud bo'lgan va veb-app(application) larni yaratishda ko'p ishlatiladigan skriptlash tili hisoblanadi.
Bu darsda biz ma'lumotlar ombori bilan masofadan turib bog'lash va ro'yhat(table) lar ustida SQL so'rovlarni bajarishni o'rganamiz.
Agar SQL so'rovlarni yozishni bilmasangiz, keyingi darslarimiz MySQL darslari bo'lib, o'sha darslarimizda bemalol o'rganishga imkoningiz bo'ladi.
Biz MySQL bilan PHP-dan foydalanish uchun mysqli yoki PDO-dan foydalanishimiz mumkin. Bu darsimizda biz 12 tilni va shuningdek, SQL inyeksiyani oldini olish uchun prepared statements(oldindan tayyorlangan buyruqlar)-ni qo'llab-quvvatlaganligi sababli PDO-ni ko'proq yoritamiz.
PDO-ni o'rnatish
Quyidagi ko'rsatmalarga amal qiling: http://php.net/manual/en/pdo.installation.php
MySQL serverga ulash
Har qanday so'rovni bajarishdan oldin biz birinchi MySQL serveriga ulashimiz kerak.
Quyidagi kod PDO orqali MySQL serveriga ulanish uchun:
// server ma'lumotlar
$servername = "localhost";
$username = "username";
$password = "password";
try
{
$conn = new PDO("mysql:host=$servername; dbname=myDB", $username, $password);
// istisno holatida PDO xato rejimini o'rnatish
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Muvaffaqiyatli bog'landi";
}
catch(PDOException $e)
{
echo "Ulanishda xatolik: " . $e->getMessage();
}
?>
Yuqoridagi kodda, siz username va password ma'lumotlarni o'zingizni server ma'lumotlaringiz bo'yicha o'zgartirishingiz kerak bo'ladi.
Bog'lanishni to'xtatish
Biz o'zimizga bog'liq ishni bajarib bo'lganimizdan keyin MySQL serveridan aloqani uzish ya'ni to'xtatish bu yaxshi amaliyot. Bu juda oson, shunchaki ulanish obyektimizni null-ga tenglab qo'ysak bo'lgani, quyidagidek:
// MySQL server aloqasini uzish
$conn = null;
?>
Ma'lumot omborini yaratish
Ma'lumot ombori ma'lumot saqlanadigan joyda bir yoki undan ko'p ro'yhat(table)-larni o'z ichiga oladi.
Biz MySQL-da PDO orqali PHP-dan foydalanib, ma'lumot omborini yaratish uchun CREATE sql so'rovini yozishimiz kifoya.
Quyidagi kod:
// MySQL serverga ulash
$servername = "localhost";
$username = "username";
$password = "password";
try
{
$conn = new PDO("mysql:host=$servername", $username, $password);
// istisno holatida PDO xato rejimini o'rnatish
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// ma'lumot ombori yaratish uchun sql so'rov
$sql = "CREATE DATABASE myDBPDO";
// exec() dan foydalaning, chunki hech qanday natija qaytmaydi
$conn->exec($sql);
echo "Ma'lumot ombori yaratildi!
";
}
catch(PDOException $e)
{
echo $sql . "
" . $e->getMessage();
}
// MySQL serverdan uzish
$conn = null;
?>
PHP da exception handling mavjud bo'lib, ma'lumotlar omborida SQL so'rovlar bajarish paytida istisnolar duch kelishi ehtimoli yuqori bo'lganligi sababli exception handling, mysqli dan ko'ra yaxshiroq.
Xuddi yuqoridagi kodga o'xshab, $sql o'zgaruvchimizda xohlagan SQL so'rovimizni kiritishimiz va exec() funksiyasi orqali so'rovni bajarishimiz mumkin bo'ladi.
Ro'yhat(table) yaratish
Xuddi yuqoridagi kodimizdagidek, biz ro'yhat ham yaratishimiz mumkin, shunchaki biz $sql o'zgaruvchimizdagi so'rovni CREATE TABLE so'roviga almashtirishimiz kifoya.
Quyida User ro'yhatini yaratish va uning ustunlari userid, email, password va fullname-ga namuna mavjud:
// ro'yhatni yaratish uchun sql so'rov
$sql = "CREATE TABLE User (
userid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
fullname VARCHAR(50)
)";
Bu yerda ma'lumot uchun to'liq kod:
// MySQL serverga ulash
$servername = "localhost";
$username = "username";
$password = "password";
try
{
$conn = new PDO("mysql:host=$servername", $username, $password);
// istisno holatida PDO xato rejimini o'rnatish
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// ro'yhatni yaratish uchun sql so'rov
$sql = "CREATE TABLE User (
userid INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
fullname VARCHAR(50)
)";
// exec() dan foydalaning, chunki hech qanday natija qaytmaydi
$conn->exec($sql);
echo "Jadval muvaffaqiyatli yaratildi
";
}
catch(PDOException $e)
{
echo $sql . "
" . $e->getMessage();
}
// MySQL serverdan uzish
$conn = null;
?>
Ma'lumotni ro'yhatga kiritish
Ro'yhat yaratilishi bilanoq, keyingi qadam uni ichiga ma'lumot kiritish bo'ladi. Ro'yhatga ma'lumot kiritish uchun biz quyidagi maxsus qoidalarga rioya qilishimiz kerak:
Agar kiritiladigan qiymat satr bo'lsa, u holda biz uni qo'shtirnoqqa olishimiz kerak bo'ladi.
Sonli qiymat qo'shtirnoqqa olinmaydi.
NULL qo'shtirnoqqa olinmaydi.
Agar jadvaldagi ustun AUTO_INCREMENT bo'lsa, unda biz ushbu jadvalga ma'lumotlarni kiritishimiz shart emas, u avtomatik ravishda jadvalga kiritiladi.
SQL so'rov shunday bo'ladi:
// ro'yhatga ma'lumot kiritish uchun sql so'rov
$sql = "INSERT INTO User (email, password, fullname)
VALUES ('john@studytonight.com', 'IKilledBoogieMan', 'John Wick')";
Biz qiladigan ish yuqoridagi so'rovga $sql o'zgaruvchisining qiymatini almashtirish va qolgan kod shundayligicha qoladi, xuddi baza va ro'yhat yaratish kabi.
Ro'yhatdan ma'lumotni o'chirish
Yuqorida insert SQL buyrug'ini bajarganimizdek, biz ro'yhatdan ma'lumotni delete SQL buyru'gi orqali o'chirishimiz ham mumkin:
// ro'yhat ichidagi ma'lumotni o'chirish
$sql = "DELETE FROM User WHERE userid=1";
Qolgan to'liq kod qanday bo'lsa shunday qoladi.
Ro'yhatdan ma'lumotni tanlash
Ro'yhatdan ma'lumotni tanlash boshqa jarayonlarga qaraganda ozgina farq qiladi. Agar biz ro'yhatdan bir necha ma'lumotlar qatorini tanlashimiz kerak bo'lsa, unda biz siklda fetch() metodini ishlatishimiz kerak.
Keling, User table-dagi ma'lumotlarni qaytarishimiz uchun namuna ko'ramiz:
// User table-da ma'lumotni tanlash uchun sql so'rov
$stmt = $conn->prepare("SELECT userid, email, fullname FROM User");
// ma'lumotni saqlash uchun massiv e'lon qilish
$data = array();
// sql buyrug'ini bajarish
$stmt->execute();
// barcha qatorlarni olish uchun siklga qo'ydik
while($row = $stmt->fetch(PDO::FETCH_OBJ))
{
$data[] = $row;
}
// aloqani yopish
$conn = null;
// ma'lumotni qaytarish
return $data;
Do'stlaringiz bilan baham: |