مدیریت مقادیر NULL در MySQL – راهنمای جامع


در بخشهای قبلی این راهنما ملاحظه کردیم که دستور SELECT در SQL همراه با بند WHERE برای دریافت دادهها از یک جدول MySQL استفاده میشود؛ اما وقتی تلاش میکنید یک شرط بدین منظور تعیین کنید که مقدار فیلد یا ستون را به NULL تغییر دهد، به درستی کار نمیکند.
برای مدیریت چنین موقعیتی، MySQL سه عملگر ارائه کرده است:
- IS NULL – این عملگر در صورتی مقدار true باز میگرداند که مقدار ستون NULL باشد.
- IS NOT NULL – این عملگر در صورتی مقدار NULL باز میگرداند که مقدار ستون NULL نباشد.
- <=> - این عملگر مقادیر را مقایسه میکنید اما بر خلاف عملگر =؛ حتی در مواردی که دو طرف NULL باشند مقدار true باز میگرداند.
موقعیتهایی که شامل مقادیر NULL هستند، همیشه موقعیتهای ویژهای محسوب میشوند، چون نمیتوان از = NULL یا!= NULL برای بررسی مقادیر NULL در ستونها استفاده کرد. چنین مقایسههایی همواره شکست میخورند زیرا نمیتوان تعیین کرد که مقدار آن true یا false است. برخی اوقات حتی مقایسه NULL = NULL نیز عمل نمیکند.
برای این که ببینیم ستونی NULL است یا نیست از عبارتهای IS NULL یا IS NOT NULL استفاده میکنیم.
استفاده از مقادیر NULL در اعلان فرمان
فرض کنید جدولی به نام tcount_tbl در پایگاه داده TUTORIALS داریم و این جدول شامل دو ستون به نامهای tutorial_author و tutorial_count است که یک مقدار NULL به نام tutorial_count تعیین میکند مقدار نامشخصی وجود دارند.
مثال
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> create table tcount_tbl -> ( -> tutorial_author varchar(40) NOT NULL, -> tutorial_count INT -> ); Query OK, 0 rows affected (0.05 sec) mysql> INSERT INTO tcount_tbl -> (tutorial_author, tutorial_count) values ('mahran', 20); mysql> INSERT INTO tcount_tbl -> (tutorial_author, tutorial_count) values ('mahnaz', NULL); mysql> INSERT INTO tcount_tbl -> (tutorial_author, tutorial_count) values ('Jen', NULL); mysql> INSERT INTO tcount_tbl -> (tutorial_author, tutorial_count) values ('Gill', 20); mysql> SELECT * from tcount_tbl; +-----------------+----------------+ | tutorial_author | tutorial_count | +-----------------+----------------+ | mahran | 20 | | mahnaz | NULL | | Jen | NULL | | Gill | 20 | +-----------------+----------------+ 4 rows in set (0.00 sec) mysql>
میتوان دید که = و =! با مقادیر NULL به صورت زیر عمل نمیکنند:
mysql> SELECT * FROM tcount_tbl WHERE tutorial_count = NULL; Empty set (0.00 sec) mysql> SELECT * FROM tcount_tbl WHERE tutorial_count!= NULL; Empty set (0.01 sec)
برای یافتن رکوردهایی که ستون tutorial_count به صورت NULL یا غیر NULL باشد، کوئریها باید به صورتی که در زیر نشان داده شدهاند، نوشته شوند:
mysql> SELECT * FROM tcount_tbl -> WHERE tutorial_count IS NULL; +-----------------+----------------+ | tutorial_author | tutorial_count | +-----------------+----------------+ | mahnaz | NULL | | Jen | NULL | +-----------------+----------------+ 2 rows in set (0.00 sec) mysql> SELECT * from tcount_tbl -> WHERE tutorial_count IS NOT NULL; +-----------------+----------------+ | tutorial_author | tutorial_count | +-----------------+----------------+ | mahran | 20 | | Gill | 20 | +-----------------+----------------+ 2 rows in set (0.00 sec)
مدیریت مقادیر NULL در اسکریپت PHP
میتوان از شرط if … else برای آمادهسازی یک کوئری بر مبنای مقدار NULL استفاده کرد.
مثال
در نمونه کد زیر مقدار tutorial_count را از بیرون میگیریم و سپس آن را با مقدار موجود در جدول مقایسه میکنیم.
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } if( isset($tutorial_count )) { $sql = 'SELECT tutorial_author, tutorial_count FROM tcount_tbl WHERE tutorial_count = $tutorial_count'; } else { $sql = 'SELECT tutorial_author, tutorial_count FROM tcount_tbl WHERE tutorial_count IS $tutorial_count'; } mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Author:{$row['tutorial_author']} <br> ". "Count: {$row['tutorial_count']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای مهندسی نرم افزار
- نصب MySQL — راهنمای گام به گام
- مجموعه آموزشهای پایگاه داده و سیستم های مدیریت اطلاعات
- مدیریت اجرا یا توقف در پایگاه داده MySQL — راهنمای جامع
- Null چیست ؟ — تهی در برنامه نویسی به زبان ساده
- چگونه دیتابیس MySQL را بر روی ویندوز نصب کنیم؟
- ایجاد و حذف جدول در پایگاه داده MySQL — به زبان ساده
- مفاهیم مقدماتی MySQL — راهنمای جامع
- آموزش SQL Server Management Studio | کامل، رایگان و گام به گام
==