دورة MySQL للمبتدئين

3: أنواع البيانات – دورة MySQL

السلام عليكم و رحمة الله و بركاته

في الدرس السابق، ذكرنا وجود عدة أنواع للسمات أو Attributes الخاصة بكل جدول بيانات (Entity). لذا، ففي درسنا الثالث من دورة MySQL، سنتعرف على هذه الأنواع المختلفة.

ولكن، في هذا الدرس، لن نتطرق لجميع أنواع البيانات، بل سنناقش البعض فقط، و البعض الآخر سيتم طرحه في موضوع آخر مع تقدمنا في الدورة. و ندعوكم إلى البحث المتوازن في مصادر أخرى لإغناء التجربة التعلمية لديكم.

أنواع البيانات النصية

من أجل إدخال النصوص، يوجد نوعين من أنواع البيانات التي تقوم بهذه المهمة، إلا أن هناك اختلاف بسيط بينهما:

1 – CHAR(n)

النوع CHAR(n) يستوعب النصوص Strings ، و n هو عدد الحروف التي نحددها عند بناء جدول ما (و ذلك من أجل حفظ المساحة و تقليل حجم قاعدة البيانات، فلا يمكن أن نعطي مساحة كبيرة لنص يتكون من 4 أحرف فقط).

مثلا:

CHAR(10) – إذا ما أدخلنا كلمة “MySQL” داخل متغير يحمل هذا النوع، فإن القيمة التي سيتم تخزينها داخل المتغير هي : ” MySQL” ، أي أنه تم تخزين المساحة الفارغة أيضا و التي تعبر عن الخمسة أحرف المتبقية من 10.

2 – VARCHAR(n)

و لكن، إذا رغبنا في إدخال نصوص في متغيرات قابلة للتكيف مع حجم النص تحت حد معين، يمكننا استعمال النوع VARCHAR(n) .

مثلا:

عوض حفظ المساحة الفارغة في حال تم إدخال نص أصغر حجما من رقم الأحرف المطلوب، فإن أدخلنا الكلمة “MySQL” في متغير يحمل نوع VARCHAR(10)، فإن النص الذي سيتم تخزينه هو “MySQL” فقط دون اعتبار للمساحة الفارغة.

أنواع البيانات الخاصة بالتواريخ

هذه الأنواع التالية تخص كل ما يتعلق بالوقت و التاريخ:

1 – DATE

يُستعمل هذا المتغير من أجل إدخال قيم التاريخ فقط دون إضافة التوقيت.

مثلا “02-03-2020”.

2 – DATETIME

يُستعمل هذا المتغير من أجل إدخال قيم التاريخ و التوقيت معا.

مثلا ” 00:21:03 02-03-2020″.

3 – TIMESTAMP

القيم التي يتم إدخالها في متغير يحمل هذا النوع، يتم تحويلها عند تخزينها إلى الوحدة الزمنية UTC، أما عند استرجاعها، فيتم تحويلها مجددا من UTC إلى الوحدة الزمنية الأصلية.

4 – YEAR

يمثل هذا النوع السنوات. إذ يقبل بإدخال القيم على شكل نص ‘2003’ أو على شكل رقم 2003. كما يمكن أن يحتوي على 4 أرقام (YEAR(4))، أو رقمين فقط (YEAR(2))، و ذلك كالتالي:

عند كتابة رقمين فقط، سواء على شكل نص أو رقم، فإن المتغير سيعتبر الأرقام من 0 إلى 69 ترمز إلى ما بعد 2000 ميلادية (أي من 2000 إلى 2069) ، و الأرقام من 70 إلى 99 يتم إدراجها إذا من 1970 إلى 1999، بعبارة أخرى، الحد أو المجال يمتد من 1970 إلى 2069.

أما عند إدخال 4 أرقام، فإن الحد أو المجال هو من 1901 إلى 2155.

5 – TIME

هذا النوع مخصص لتخزين القيم الزمنية، على الصيغ التالية: “HH:MM:SS” أو “HHH:MM:SS”، فمجال تخزين هذا النوع يمتد من: ‘-838:59:59’ إلى ‘838:59:59’، و ذلك لأنه لا يقوم بتخزين التوقيت اليومي فقط و المحدود في 24 ساعة، بل يمكنه أيضا حساب الفارق الزمني بين حدثين.

أنواع البيانات الرقمية

1 – INTEGER

هذا النوع يخص طبعا القيم العددية الصحيحة. و لكن، توجد عدة أنواع حسب حجم هذه القيم، و نخلص ذلك في الجدول التالي:

النوعالطول (Bytes)القيمة الدنيا (عدد نسبي)القيمة القصوى (عدد نسبي)القيمة الدنيا (عدد صحيح)القيمة القصوى (عدد صحيح)
TINYINT 1 128- 127 0 255
SMALLINT 2 32768- 32767 0 65535
MEDIUMINT 38388608- 8388607 0 16777215
INT 42147483648- 2147483647 0 4294967295
BIGINT 89223372036854775808- 92233720368
54775807
0 184467440737
09551615

2 – FIXED POINT TYPES

DECIMAL:

هذا النوع خاص بالأعداد العشرية، حيث يُخَزن قيم عددية ثابتة تحت الشكل ، DECIMAL(M,N)، حيث:

  • M : تعني عدد الأرقام التي تم تحديدها للمتغير، فمثلا DECIMAL(5) تعني أن العدد لا يجب أن يتجاوز أرقامه 5 أرقام؛
  • N : تعني عدد الأرقام التي تتواجد بعد الفاصلة العشرية، مثلا النوع DECIMAL(4,3) يُخزن العدد 1435 كَـ 1.435 ، أي أنه هناك 4 أرقام في مجموع، و 3 أرقام خلف الفاصلة.

القيمة الافتراضية (defualt value) لعدد الأرقام M هي 10، و إذا لم يتم إضافة عدد الأرقام بعد الفواصل N فيتم اعتبار N = 0. و بالتالي:

  • DECIMAL = DECIMAL(M,0)
  • DECIMAL(M,0) = DECIMAL(M)

مجال أو حدود هذا النوع تمتد من 999.99- إلى 999.99. كما أن العدد الأقصى للأرقام في المجمل هي 65 رقما.

3 – FLOAT POINT TYPES

FLOAT و DOUBLE :

كلا من float و double يخصان القيم العددية الحقيقية. و لكن الفرق هو أن الدقة مزدوجة عند النوع double كما يبين ذلك الإسم (double-precision). أما فيما يخص النوع float، فكلا من دقته و حجمه أقل من النوع الآخر (single-precision)، و ذلك موضح في الجدول التالي:

النوعالطول (Bytes)القيمة الدنيا (موجبة و سالبة)القيمة القصوى (موجبة و سالبة)القيمة الدنيا (موجبة)القيمة القصوى (موجبة)
FLOAT43.402823466E+38-1.175494351E-38- 1.175494351E-38 3.402823466E+38
DOUBLE8
1.7976931348623-
157E+ 308
2.22507385850720-
14E- 308
0 و 2.2250738585072014E- 308 1.797693134862315
7E+ 308

بعض الخصائص

NULL / NOT NULL

NULL تعني أنه مسموح بترك الحقل فارغا دون إضافة بيانات ما.

أما NOT NULL فهي تعني العكس، أي لا بد من إضافة محتوى في الحقل المحدد و إلا سيظهر خطأ ما. و هذا يستعمل غالبا مع المفاتيح الرئيسية للجداول و بعض الأعمدة المهمة.

AUTO_INCREMENT

يتم إضافة هذه الكلمة المفتاحية خلف البيانات التي تحمل النوع INT أو الأنواع الأخرى (SMALLINT, BIGINT…)، و التي تقوم بإدراج الأرقام بشكل تزايدي و أوتوماتيكي انطلاقا من 1، و غالبا ما يستعمل في حقل المفتاح الرئيسي الخاص بجدول ما من أجل تسهيل إدخال الأرقام كل مرة يدويا.

مثال:

CREATE TABLE number_table ( numbers INT PRIMARY KEY AUTO_INCREMENT, letter 	VARCHAR(1));

INSERT INTO number_table (letter)
VALUES ('A'),('B'),('C'),('D'),('E');

SELECT * FROM number_table;

عندما أدخلنا البيانات في الجدول، فإننا لم نكتب اسم العمود numbers ، لأنه سيتم تعبئته بشكل أوتوماتيكي، بحيث إذا تمت كتابته في أمر الإدخال سيظهر خطأ. لذا نكتب فقط أسماء الأعمدة الأخرى.

النتيجة هي:

+---------+--------+
| numbers | letter |
+---------+--------+
|       1 | A      |
|       2 | B      |
|       3 | C      |
|       4 | D      |
|       5 | E      |
+---------+--------+

نهاية الدرس الأول

و هنا نبلغ نهاية أول درس حول أنواع البيانات، نرحب بتساؤلاتكم و اقتراحاتكم في كل وقت.

السابق
2: لمحة حول Entity Relationship Diagram – دورة MySQL
التالي
4: بناء أول قاعدة بيانات – دورة MySQL