Row — relatsion jadvaldagi bitta yozuv bo‘lib, jadval ustunlari uchun qiymatlar to‘plamini saqlaydi. Masalan, users jadvalidagi bir row bitta foydalanuvchining identifikatori, emaili va yaratilgan vaqtini ifodalaydi. Relatsion nazariyada rowga yaqin tushuncha tuple deb ataladi.
Qator identifikatsiyasi
Rowning jadvaldagi fizik joyi barqaror identifikator emas. Data page qayta tashkil etilishi, backupdan tiklanishi yoki replicationda boshqa joyga tushishi mumkin. Qatorni dasturiy aniqlash uchun primary key ishlatiladi. Natural key domenning mavjud qiymatiga, surrogate key esa maxsus yaratilgan identifikatorga tayanadi.
SELECT id, email
FROM users
WHERE id = 42;
Bu so‘rov id primary key bo‘lsa, aynan bitta rowni maqsad qiladi. Primary key yo‘q jadvalda bir xil qiymatli qatorlarni alohida boshqarish qiyinlashadi.
Qiymatlar va NULL
Har row ustun schema talabiga mos qiymat beradi. NOT NULL ustunda qiymat majburiy. NULL nol yoki bo‘sh satr emas; u qiymat noma’lum yoki mavjud emasligini bildiradi. SQLning uch qiymatli mantiqi sabab column = NULL to‘g‘ri tekshiruv emas, IS NULL ishlatiladi.
Default qiymat INSERTda ustun berilmaganda qo‘llanishi mumkin. Bu qiymat oldingi qatorlarga avtomatik tarixiy ma’no bermaydi. Vaqt yoki status defaulti domen qoidasiga mos tanlanadi.
Row-level amallar
INSERT yangi row qo‘shadi, UPDATE mavjud qator qiymatini o‘zgartiradi, DELETE qatorni olib tashlaydi. Har bir amalda WHERE sharti maqsad qatorlarni belgilaydi. UPDATE users SET active = false kabi shartsiz so‘rov butun jadvalni o‘zgartiradi.
Affected rows soni kutilgan natijani tekshirishga yordam beradi. Optimistic locking uchun version ustuni ishlatilsa, update eski version bo‘yicha shart qo‘yadi. Boshqa tranzaksiya qatorni avval o‘zgartirgan bo‘lsa, affected rows nol bo‘ladi va conflict aniqlanadi.
Lock va MVCC
Database row-level lock orqali parallel yozuvlarni muvofiqlashtirishi mumkin. SELECT ... FOR UPDATE tanlangan qatorlarni tranzaksiya davomida yangilash uchun qulflaydi. Locklar turli tartibda olinsa deadlock yuz berishi mumkin.
MVCC qatorning bir nechta versiyasini saqlab, o‘quvchiga tranzaksiya snapshotiga mos holatni ko‘rsatadi. Eski versiyalar faol tranzaksiyalar tugagach tozalanadi. Juda uzoq tranzaksiya ushbu cleanupni kechiktiradi.
Qator hajmi
Keng row bitta pagega kam yozuv sig‘ishiga va I/O ortishiga olib keladi. Katta text yoki binary qiymat database enginega qarab alohida sahifada saqlanishi mumkin. SELECT * kerak bo‘lmagan katta ustunlarni ham uzatadi; aniq ustunlar ro‘yxati tarmoq va memory sarfini kamaytiradi.
Soft delete
Soft delete qatorni fizik o‘chirish o‘rniga deleted_at yoki status bilan faol natijalardan chiqaradi. Bu audit va tiklashni soddalashtirishi mumkin, ammo barcha querylar o‘chirilgan rowni to‘g‘ri filtrlashi kerak. Unique constraint ham soft-deleted qiymatni band deb ko‘rishi mumkin; partial index yoki boshqa model talab etiladi. Foreign key cascade fizik delete kabi avtomatik ishlamaydi, bog‘liq qatorlar siyosati dasturda belgilanadi. Soft delete cheksiz saqlash talabi emas: retention muddati tugagach purge jarayoni qator va shaxsiy ma’lumotni haqiqatan olib tashlaydi.
Row checksum va o‘zgarish
Change data capture transaction logdan row o‘zgarishlarini oqimga chiqarishi mumkin. Consumer insert, update va delete eventlarini idempotent qayta ishlaydi. Faqat timestampga asoslangan polling bir xil vaqtli yozuvni o‘tkazishi mumkin; barqaror cursor uchun timestamp bilan unique key birga ishlatiladi.
Bog‘liq tushunchalar
table, column, tuple, primary key, NULL, MVCC, row-level lock