SQL تخزين قيم موحدة في العمود
- مفهوم القيم الموحدة
- القيد UNIQUE
- تجهيز قاعدة البيانات التي سنطبق عليها
- إنشاء عمود لا يقبل قيم مكررة
- تجربة إدخال قيم في عمود نوعه UNIQUE
مفهوم القيم الموحدة
في المشاريع الحقيقية، يستطيع المستخدم تسجيل دخوله بواسطة إسم المستخدم ( Username ) أو البريد الإلكتروني ( Email ) الخاص به.
في هذه الحالة يتم جعل القيم التي يمكن إدخالها في حقل إسم المستخدم و حقل البريد الإلكتروني موحدة ( Unique ) لضمان أن لا يكون هناك أكثر من مستخدم عندهم نفس إسم المستخدم أو البريد الإلكتروني.
كمثال بسيط، في هرمش ممنوع استعمال mhamad كإسم مستخدم جديد لأنه يوجد حساب يستعمله كإسم مستخدم، و إذا حاولت فعل ذلك فإنه سيظهر لك تنبيه يخبرك بأنه غير متاح كما يلي.
القيد UNIQUE
في حال أردت جعل العمود لا يقبل أن يتم تخزين نفس القيمة فيه أكثر من مرة يمكنك إضافة القيد UNIQUE إليه أثناء إنشاء الجدول أو في وقت لاحق.
العمود الذي يتم تعريفه كمفتاح أساسي ( Primary Key ) يستعمل هذا القيد بشكل تلقائي و لهذا ممنوع أن يتم وضع قيم مكررة فيه.
طريقة استخدامه
طريقة استخدام هذا القيد تختلف من قاعدة بيانات لأخرى و لكنه يستعمل لنفس الغرض في جميع قواعد البيانات.
في قواعد بيانات SQL Server و قواعد بيانات Oracle قواعد بيانات Access نستخدمه كما يلي.
في قواعد بيانات MySQL و قواعد بيانات SQLite نستخدمه كما يلي.
مكان الكلمة column_name
نكتب إسم العمود الذي نريده أن لا يحتوي على قيم مكررة.
في هذه الدورة سنعتمد أسلوب قواعد بيانات MySQL في إنشاء أعمدة قيمها موحدة.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
.
مثال
إنشاء عمود لا يقبل قيم مكررة
الإستعلام التالي ينشئ جدول إسمه users
يتكون من 4 أعمدة:
id
و هو المتفاح الأساسي و فيه يتم إعطاء رقم تعرفة تلقائي لكل مستخدم.username
و فيه يتم تخزين إسم المستخدم و الذي يجب أن تكون قيمته موحدة.country
و فيه يتم تخزين إسم بلد المستخدم.
username
لأننا لا نريد أن يكون هناك مستخدمين عندهم نفس إسم المستخدم.
مثال
يمكن أيضاً تعريف الجدول و من ثم تعديله لإضافة القيد على الحقل كما يلي.
النتيجة
النتيجة تعني أنه تم إنشاء الجدول و إضافة القيد فيه بنجاح.
إذا قمت باستعراض بيانات الجدول users
فإنه سيكون فارغاً كما يلي لأننا لم نقم بإضافة أي بيانات فيه بعد.
id | username | country |
---|---|---|
تجربة إدخال قيم في عمود نوعه UNIQUE
الإستعلام التالي يضيف 5 مستخدمين في الجدول users
.
ملاحظة: لم نحاول إضافة نفس إسم المستخدم أكثر من مرة لأن هذا الأمر غير مسموح.
المثال الأول
النتيجة
1 row(s) affected
1 row(s) affected
1 row(s) affected
1 row(s) affected
النتيجة تعني أنه تم إضافة 5 مستخدمين بنجاح.
إذا قمت بعرض جميع البيانات الموجودة في الجدول users
فإنها ستبدو كالتالي.
id | username | country |
---|---|---|
1 | rami | Lebanon |
2 | ahmad | Syria |
3 | hanan | KSA |
4 | saly | Lebanon |
5 | samir | Egypt |
الإستعلام التالي يحاول إضافة مستخدم جديد و إعطائه إسم مستخدم يملكه شخص آخر.
المثال الثاني
النتيجة
معنى هذا الخطأ أنه يوجد في الأساس مستخدم عنده username
يساوي 'rami'
لهذا لا يمكن إضافة المستخدم الجديد.
لإضافة المستخدم السابق، ستكون مجبر على تغيير إسم المستخدم سواء تغييره بالكامل أو التعديل عليه.
ما فعلناه لحل مشكلة Duplicate entry هو تغيير قيمة الحقل username
إلى 'rami2' لأنه لا يوجد مستخدم آخر يملك نفس هذه القيمة.
المثال الثاني
النتيجة
النتيجة تعني أنه تم إضافة المستخدم بنجاح في الجدول.
إذا قمت بعرض جميع البيانات الموجودة في الجدول users
فإنها ستبدو كالتالي.
id | username | country |
---|---|---|
1 | rami | Lebanon |
2 | ahmad | Syria |
3 | hanan | KSA |
4 | saly | Lebanon |
5 | samir | Egypt |
6 | rami2 | Oman |