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

۳۵۸ بازدید
آخرین به‌روزرسانی: ۲۶ شهریور ۱۴۰۲
زمان مطالعه: ۳ دقیقه
مدیریت مقادیر NULL در MySQL — راهنمای جامع

در بخش‌های قبلی این راهنما ملاحظه کردیم که دستور SELECT در SQL همراه با بند WHERE برای دریافت داده‌ها از یک جدول MySQL استفاده می‌شود؛ اما وقتی تلاش می‌کنید یک شرط بدین منظور تعیین کنید که مقدار فیلد یا ستون را به NULL تغییر دهد، به درستی کار نمی‌کند.

997696

برای مدیریت چنین موقعیتی، 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);
?>

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
tutorialspoint
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *