با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش SQLite را دنبال می کنند. دستور PRAGMA در SQLite دستور ویژه ای است که برای کنترل انواع متغیرهای محیطی و وضعیت های flag ها در محیط SQLite مورد استفاده قرار می گیرد. شما می توانید مقدار دستور PRAGMA را خوانده و آن را بر اساس نیاز در شرایط مختلف به مقدار مورد نظر خود تغییر دهید. برای آشنایی بیشتر با کاربردهای دستور PRAGMA در SQLite و حالات مختلف آن در ادامه ی این مباحث با ما همراه باشید.
در این آموزش شما با سینتکس و ویژگی های مختلف دستور PRAGMA در SQLite آشنا خواهید شد.
همانطور که گفتیم دستور PRAGMA در SQLite ویژگی های مختلفی دارد که در ادامه سینتکس هر یک را بررسی می کنیم.
برای دریافت مقدار جاری PRAGMA از سینکس زیر استفاده می شود :
1 | PRAGMA pragma_name; |
برای تنظیم مقدار جدید در PRAGMA از سینتکس زیر استفاده می شود :
1 | PRAGMA pragma_name = value; |
در تنظیم حالت می توان از نام یا مقدار عددی استفاده کرد، اما در هر حال مقدار بازگشتی همیشه عددی خواهد بود.
auto_vacuum در PRAGMA حالت auto-vacuum را دریافت کرده و یا تنظیم می کند.
سینتکس auto-vacuum در PRAGMA به صورت زیر است :
1 2 | PRAGMA [database.]auto_vacuum; PRAGMA [database.]auto_vacuum = mode; |
mode می تواند شامل حالت های جدول زیر باشد :
ردیف | مقدار Pragma و توضیحات آن |
---|---|
۱ | ۰ or NONE Auto-vacuum غیر فعال است، این یعنی اندازه ی فایل دیتابیس هرگز کوچکتر از اندازه ای که با دستور VACUUM مشخص شده نمی شود. |
۲ | ۱ or FULL حالت Auto-vacuum فعال است. و به صورت کاملا خودکار که اجازه می دهد که یک فایل دیتابیس تا حذف داده ها از دیتابیس، اندازه ی آن را کوچک تر کند. |
۳ | ۲ or INCREMENTAL حالت Auto-vacuum فعال است. اما باید به صورت دستی فعال شود. در این حالت داده های مرجع نگهداری شده و صفحات رایگان لیست می شوند. این صفحات را می توان با استفاده از incremental_vacuum pragma برگرداند. |
cache_size در pragma حداکثر اندازه ی صفحه ی cache در حافظه را گرفته و یا به طور موقت تنظیم می کند.
سینتکس cache_size در pragma به صورت زیر است :
1 2 | PRAGMA [database.]cache_size; PRAGMA [database.]cache_size = pages; |
مقدار pages تعداد صفحات cache را نشان می دهد. در حالت پیش فرض صفحات cache به تعداد ۲۰۰۰ صفحه بوده و حداقل تعداد ۱۰ صفحه است.
case_sensitive_like در pragma حساسیت به حروف را در عبارات LIKE دستکاری می کند.
این pragma در حالت پیش فرض false است، که به این معنی است که عملگر LIKE نسبت به حروف حساس نیست.
سینکس case_sensitive_like به این صورت است :
1 | PRAGMA case_sensitive_like = [true|false]; |
هیچ راهی برای پرس و جو برای وضعیت فعلی این pragma نیست.
count_changes در PRAGMA مقادیر بازگشتی را از دستورات دستکاری داده ها از جمله INSERT, UPDATE و DELETE گرفته یا تنظیم می کند.
سینتکس این pragma به این صورت است :
1 2 | PRAGMA count_changes; PRAGMA count_changes = [true|false]; |
این pragma در حالت پیش فرض false بوده و این دستورات هیچ چیزی را برنمی گردانند.
اگر این pragma روی true تنظیم شود، یک سطر، یک ستون جدول که شامل یک مقدار عددی که سطر را با دستور آن نشان می دهد برمی گرداند.
database_list در PRAGMA برای لیست کردن تمام دیتابیس های attach شده استفاده می شود.
سینتکس database_list در PRAGMA به صورت زیر است :
1 | PRAGMA database_list; |
این PRAGMA یک جدول سه ستونی را با یک سطر در هر باز شده، یا دیتابیس attach شده شماره توالی دیتابیس را می دهد.
این شماره نام دیتایس و فایل های مرتب آن است.
encoding در PRAGMA چگونگی encod و ذخیره ی رشته ها را در دیتابیس کنترل می کند.
سینتکس encoding به صورت زیر است :
1 2 | PRAGMA encoding; PRAGMA encoding = format; |
مقدار format در سینتکس فوق، می تواند یکی از مقادیر UTF-8, UTF-16le یا UTF-16be باشد.
freelist_count در PRAGMA یک عدد را برمی گرداند که نشان می دهد چه تعداد از صفحات دیتابیس در حال حاضر علامت گذاری شده که به طور رایگان در دسترس باشند.
سینتکس freelist_count در PRAGMA به صورت زیر است :
1 | PRAGMA [database.]freelist_count; |
مقدار format در سینتکس فوق، می تواند یکی از مقادیر UTF-8, UTF-16le یا UTF-16be باشد.
index_info در PRAGMA اطلاعاتی را در مورد index دیتابیس برمی گرداند. سینتکس index_info در PRAGMA به صورت زیر است:
1 | PRAGMA [database.]index_info( index_name ); |
مجموعه نتیجه شامل یک ردیف برای هر ستون موجود در توالی ستون، index ستون در جدول و نام ستون است.
index_list در PRAGMA تمام index های مرتبط با یک جدول را لیست می کند.
سینتکس index_list در PRAGMA به صورت زیر است :
1 | PRAGMA [database.]index_list( table_name ); |
مجموعه نتیجه شامل یک ردیف برای هر صفحه ی نخست، فهرست دنباله، فهرست نام و flag را نشان می دهد که index آن منحصر به فرد است یا خیر.
journal_mode در PRAGMA حالت journal را گرفته و یا چگونگی ذخیره و پردازش فایل journal را تنظیم می کند.
سینتکس journal_mode در PRAGMA به صورت زیر است :
1 2 3 4 | PRAGMA journal_mode; PRAGMA journal_mode = mode; PRAGMA database.journal_mode; PRAGMA database.journal_mode = mode; |
۵ حالت journal که پشتیبانی می شود به شرح زیر است :
ردیف | مقدار Pragma و توضیحات آن |
---|---|
۱ | DELETE این حالت پیش فرض است که در نتیجه ی transaction فایل journal حذف می شود. |
۲ | TRUNCATE فایل journal به طول صفر بایت کوتاه می شود. |
۳ | PERSIST فایل journal در محل باقی می ماند، اما header در فایل journal دیگری رونویسی می شود. |
۴ | MEMORY رکورد journal در حافظه نگهداری می شود. |
۵ | OFF رکورد journal نگهداشته نمی شود. |
max_page_count در PRAGMA حداکثر تعداد صفحه ی یک دیتابیس را گرفته و یا تنظیم می کند.
سینتکس max_page_count در PRAGMA :
1 2 | PRAGMA [database.]max_page_count; PRAGMA [database.]max_page_count = max_page; |
در حالت پیش فرض مقدار ۱,۰۷۳,۷۴۱,۸۲۳ که یک صفحه ی گیگا است، به این معنی که اگر اندازه ی پیش فرض صفحه ۱ KB باشد، دیتابیس ها اجازه می دهند که این اندازه، تا ۱ ترابایت بزرگ شود.
page_count در PRAGMA شماره صفحه ی جاری در دیتابیس را برمی گرداند.
سینتکس page_count در PRAGMA :
1 | PRAGMA [database.]page_count; |
page_size در PRAGMA اندازه ی صفحات دیتابیس را گرفته و یا تنظیم می کند، که سینتکس آن به صورت زیر است:
1 2 | PRAGMA [database.]page_size; PRAGMA [database.]page_size = bytes; |
در حالت پیش فرض، اندازه های مجاز ۵۱۲, ۱۰۲۴, ۲۰۴۸, ۴۰۹۶, ۸۱۹۲, ۱۶۳۸۴ و ۳۲۷۶۸ بایت است.
تنها راه تغییر دادن اندازه ی صفحات دیتابیس موجود این است که اندازه ی صفحه را تغییر داده و بلافاصله VACUUM را در دیتابیس اعمال کنید.
parser_trace در PRAGMA چاپ شدن وضعیت خطایابی که به دستورات SQL تحلیل می شود را کنترل می کند.
سینتکس parser_trace در PRAGMA :
1 | PRAGMA parser_trace = [true|false]; |
در حالت پیش فرض، این PRAGMA حالت false دارد،اما زمانیکه با تنظیم به حالت true فعال شود، این وضعیت در تحلیل دستورات SQL چاپ می شود.
recursive_triggers در PRAGMA قابلیت recursive trigger را گرفته و یا تنظیم می کند.
اگر recursive triggers فعال نباشد، یک عمل trigger سایر trigger را تحت ثاثیر قرار نمی دهد.
سینتکس recursive_triggers در PRAGMA به صورت زیر است :
1 2 | PRAGMA recursive_triggers; PRAGMA recursive_triggers = [true|false]; |
schema_version در PRAGMA ارزش نسخه ی طرح کلی را که در header دیتابیس ذخیره شده است را گرفته یا تنظیم می کند.
سینتکس schema_version در PRAGMA به صورت زیر است :
1 2 | PRAGMA [database.]schema_version; PRAGMA [database.]schema_version = number; |
این یک مقدار ۳۲-bit علامتدار است که track تغییرات طرح کلی را نگه می دارد.
هر زمان که یک دستور تغییر طرح کلی اجرا شده باشد، (مانند CREATE یا DROP و…) این مقدار افزایش می یابد.
secure_delete در PRAGMA چگونگی حذف محتوا از دیتابیس را کنترل می کند، که سینکس آن به صورت زیر است :
1 2 3 4 | PRAGMA secure_delete; PRAGMA secure_delete = [true|false]; PRAGMA database.secure_delete; PRAGMA database.secure_delete = [true|false]; |
مقدار پیش فرض برای flag حذف ایمن معمولا off است، اما این مقدار را می توان با گزینه ی SQLITE_SECURE_DELETE تغییر داد.
sql_trace در PRAGMA برای روگرفت نتایج ردیابی SQL به صفحه نمایش استفاده می شود.
سینتکس sql_trace در PRAGMA :
1 2 | PRAGMA sql_trace; PRAGMA sql_trace = [true|false]; |
synchronous در PRAGMA حالت همگام سازی دیسک جاری را گرفته و یا تنظیم می کند.
همچنین چگونگی رایت داده ها را در دیسک فیزیکی را کنترل می کند، که سینتکس آن به صورت زیر است:
1 2 | PRAGMA [database.]synchronous; PRAGMA [database.]synchronous = mode; |
SQLite از حالت های همگام سازی زیر پشتیبانی می کند :
ردیف | مقدار Pragma و توضیحات آن |
---|---|
۱ | ۰ or OFF هیچیک همگام سازی نمی شوند. |
۲ | ۱ or NORMAL پس از هر توالی عملیات بحرانی دیسک، همگام سازی می شود. |
۳ | ۲ or FULL پس از هر عملیات بحرانی دیسک، همگام سازی می شود. |
temp_store در PRAGMA حالت ذخیره برای فایل های دیتابیس موقت را گرفته و یا ذخیره می کند.
سینتکس temp_store در PRAGMA :
1 2 | PRAGMA temp_store; PRAGMA temp_store = mode; |
SQLite از حالت های ذخیره ی زیر پشتیبانی می کند :
ردیف | مقدار Pragma و توضیحات آن |
---|---|
۱ | ۰ or DEFAULT از زمان کامپایل پیش فرض معمولی فایل استفاده می کند. |
۲ | ۱ or FILE استفاده از ذخیره سازی فایل بر اساس… |
۳ | ۲ or MEMORY استفاده از ظرفیت ذخیره سازی حافظه. |
temp_store_directory در PRAGMA محل مورد استفاده برای فایل های دیتابیس موقت را گرفته و یا تنظیم می کند.
سینتکس temp_store_directory در PRAGMA به صورت زیر است :
1 2 | PRAGMA temp_store_directory; PRAGMA temp_store_directory = 'directory_path'; |
user_version در PRAGMA مقدار نسخه ی user-defined را که در header دیتابیس ذخیره شده را گرفته و یا تنظیم می کند.
سینتکس user_version در PRAGMA :
1 2 | PRAGMA [database.]user_version; PRAGMA [database.]user_version = number; |
این یک مقدار علامتدار ۳۲-بیتی است که می تواند توسط برنامه نویس برای نسخهٔ ردیابی هدف، تنظیم شود.
writable_schema در PRAGMA قابلیت مدیریت جداول سیستم را گرفته و یا تنظیم می کند،سینتکس آن به صورت زیر است :
1 2 | PRAGMA writable_schema; PRAGMA writable_schema = [true|false]; |
اگر این pragma تنظیم شود، جداولی که با sqlite_ شروع شده را می توان از جمله جدول sqlite_master را ایجاد کرده و یا تغییر داد.
در هنگام استفاده از این pragma مراقب باشید چراکه می تواند منجر به نابودی دیتابیس شود.
دستور PRAGMA در SQLite دستور ویژه ای است که برای کنترل انواع متغیرهای محیطی و وضعیت فعلی flag ها در محیط SQLite مورد استفاده قرار می گیرد. این دستور اجازه ی دستکاری تنظیمات حساس دیتابیس را به شما می دهد.