المشاركات

عرض الرسائل ذات التصنيف SQL

7.12 SQL - Clustered, Non-Clustered Index

الفرق بين Clustered و Non-Clustered Index في SQL، Index (الفهرس) يُستخدم لتحسين أداء الاستعلامات عبر تسريع عمليات البحث والفرز. يوجد نوعان رئيسيان من الفهارس: Clustered Index (فهرس مُجمّع) Non-Clustered Index (فهرس غير مُجمّع) 📌 ما هو Clustered Index؟ هو الفهرس الذي يُحدد ترتيب البيانات الفعلي في الجدول. يعني أن الصفوف في الجدول مرتبة فعليًا حسب هذا الفهرس. يمكن أن يكون هناك فقط واحد لكل جدول. عادة يتم إنشاؤه تلقائيًا عندما نحدد PRIMARY KEY . CREATE TABLE Customers ( CustomerID int PRIMARY KEY, Name varchar(100), City varchar(100) ); ⬅ في هذا المثال، سيتم إنشاء Clustered Index تلقائيًا على CustomerID . 📌 ما هو Non-Clustered Index؟ هو فهرس منفصل لا يُغير ترتيب البيانات في الجدول، لكنه يحتوي على مؤشرات (Pointers) إلى الصفوف الفعلية. يمكن أن يكون هناك أكثر من واحد لكل جدول. يستخدم عندما تحتاج إلى فهرسة أعمدة متعددة. CREATE NONCLUSTERED INDEX idx_city ON Customers (City); ⬅ هذا ينشئ Non-Clustered Index على عمود C...

7.11 SQL - Foreign Key Actions

إجراءات المفتاح الأجنبي (ON DELETE / ON UPDATE) في SQL، عند تعريف FOREIGN KEY يمكن تحديد ما يجب أن يحدث للصفوف المرتبطة عند حذف أو تحديث الصفوف في الجدول الأساسي. هذا يتم باستخدام العبارتين: ON DELETE و ON UPDATE . 🔁 الإجراءات الممكنة: الإجراء الوصف CASCADE يُحدث أو يُحذف الصف في الجدول المرتبط أيضًا. SET NULL يعيّن القيمة إلى NULL في الجدول المرتبط. SET DEFAULT يُرجع القيمة إلى القيمة الافتراضية المحددة للعمود. NO ACTION يرفض العملية إذا كان هناك صف مرتبط (مثل RESTRICT ). RESTRICT يمنع الحذف أو التحديث إذا كان هناك صف مرتبط. 🧱 مثال عملي باستخدام CREATE TABLE: CREATE TABLE Orders ( OrderID int PRIMARY KEY, CustomerID int, FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ON DELETE CASCADE ON UPDATE CASCADE ); ⬅ في هذا المثال: إذا تم حذف صف من جدول Customers ، سيتم حذف كل الطلبات المرتبطة في Orders . إذا تم تعديل CustomerID في Customers ، سيتم تحديث القيمة في Orders . 📌 مثال باستخدام...

7.10 SQL - Composite Key

المفتاح المركب (Composite Key) في SQL المفتاح المركب (Composite Key) هو مفتاح أساسي (Primary Key) يتكون من عمودين أو أكثر معًا لتحديد كل صف بشكل فريد داخل الجدول. لا يكفي أي عمود منهم وحده لتحديد الصف، لكن المجموعة الكاملة من الأعمدة تكون فريدة. ✅ متى نستخدم Composite Key؟ نستخدم المفتاح المركب عندما: لا يوجد عمود واحد يمكنه تحديد الصف بشكل فريد. نريد ضمان أن كل مجموعة من الأعمدة معًا لا تتكرر. 🧱 مثال على إنشاء مفتاح مركب داخل CREATE TABLE: CREATE TABLE OrderDetails ( OrderID int, ProductID int, Quantity int, PRIMARY KEY (OrderID, ProductID) ); ⬅ في المثال أعلاه، لا يعتبر OrderID أو ProductID وحده مفتاحًا كافيًا، لكن مجموعهما معًا يحدد كل صف في الجدول بشكل فريد. 🔧 استخدام ALTER TABLE لإضافة مفتاح مركب: ALTER TABLE OrderDetails ADD CONSTRAINT pk_order_product PRIMARY KEY (OrderID, ProductID); ⬅ هذا المثال يضيف مفتاح مركب باستخدام الأمر ALTER TABLE بعد إنشاء الجدول. 💡 ملاحظات مهمة: يمكن أن يتكون المفتاح المركب من...

1.5 SQL - SQL vs NoSQL

مقارنة بين SQL و NoSQL عند التعامل مع قواعد البيانات، ستسمع كثيرًا عن نوعين رئيسيين: SQL و NoSQL . كلاهما يُستخدم لتخزين البيانات، لكن الفرق بينهما في الهيكل، المرونة، وطريقة التعامل مع البيانات . 🔍 ما هو SQL؟ SQL (Structured Query Language) هو لغة تُستخدم لإدارة قواعد البيانات العلائقية (Relational Databases)، مثل: MySQL SQL Server Oracle PostgreSQL تُخزن البيانات في جداول مترابطة (Rows و Columns). 📦 ما هو NoSQL؟ NoSQL تعني "Not Only SQL"، وهي قواعد بيانات لا تعتمد على الجداول بالضرورة. تُستخدم لتخزين بيانات غير علائقية أو مرنة، مثل: MongoDB CouchDB Cassandra Redis تُخزن البيانات عادة بصيغة JSON ، أو وثائق (Documents) ، أو Key-Value أو Graph . 📊 مقارنة سريعة بين SQL و NoSQL العنصر SQL NoSQL النوع Relational Non-relational الهيكل جداول (Tables) وثائق (Documents)، Key-Value، Graph، Column المرونة غير مرن (يتطلب Schema) مرن (Schema-less) الاستعلام باستخدام SQL بطرق متعددة (Mongo Q...

1.4 SQL - History and Versions

تاريخ SQL والإصدارات (SQL History and Versions) لغة SQL هي اختصار لـ Structured Query Language ، وهي اللغة القياسية للتعامل مع قواعد البيانات العلائقية (Relational Databases). 📜 بداية SQL تم تطوير SQL لأول مرة بواسطة شركة IBM في سبعينات القرن الماضي. النسخة الأولى من اللغة كانت تُعرف باسم SEQUEL وتم استخدامها داخليًا على نظام قواعد البيانات التجريبية المسمى System R . في وقت لاحق، تغير الاسم من SEQUEL إلى SQL بسبب مشاكل حقوق التسمية. 🏢 أول من استخدم SQL تجاريًا شركة Oracle كانت أول شركة تُطلق نظام إدارة قواعد بيانات يستخدم SQL تجاريًا، وذلك سنة 1979. 📘 توحيد SQL كلغة قياسية تم اعتماد SQL كلغة قياسية من قبل هيئات عالمية مثل: ANSI : المعهد القومي الأمريكي للمقاييس ISO : المنظمة الدولية للتوحيد القياسي ومنذ ذلك الحين، ظهرت عدة إصدارات (نسخ) معيارية من SQL. 🧩 إصدارات SQL القياسية (SQL Standards) فيما يلي أهم الإصدارات الرسمية من معيار SQL: SQL-86 : أول إصدار رسمي من ANSI SQL-89 : إضافة تحسينات طفيفة SQL-92 : إصدار رئيسي ي...

8.9 SQL - Operators Introduction

العوامل (Operators) في SQL العوامل (Operators) تُستخدم في SQL لتحديد شروط في الجمل مثل WHERE ، وأيضًا لتنفيذ العمليات على القيم. ✅ أنواع العوامل في SQL في SQL يوجد أنواع مختلفة من العوامل: العوامل الحسابية (Arithmetic Operators) عوامل المقارنة (Comparison Operators) العوامل المنطقية (Logical Operators) عوامل البت (Bitwise Operators) – في بعض الأنظمة 🔸 العوامل الحسابية (Arithmetic Operators) العامل الوصف + الجمع - الطرح * الضرب / القسمة % الباقي (modulus) 🔸 عوامل المقارنة (Comparison Operators) العامل الوصف = يساوي != أو <> لا يساوي > أكبر من < أقل من >= أكبر من أو يساوي <= أقل من أو يساوي BETWEEN بين قيمتين LIKE مطابقة نمط IN ضمن قائمة قيم 🔸 العوامل المنطقية (Logical Operators) العامل الوصف AND ترجع TRUE إذا كان الشرطان صحيحين OR ترجع TRUE إذا كان أحد الشرطين صحيح NOT تعكس نتيجة الشرط 🧪 مثال عملي SELECT * FROM Customers WHERE Country = 'Germany' AND City = 'Berlin';...

1.3 SQL - Comments

التعليقات في SQL (SQL Comments) تُستخدم التعليقات في SQL لكتابة ملاحظات داخل الكود لا يتم تنفيذها. تساعدك على توثيق الكود أو تعطيل جزء معين منه مؤقتًا. 📝 أنواع تعليقات SQL في SQL يوجد نوعان من التعليقات: تعليق أحادي السطر (Single-line comment) تعليق متعدد الأسطر (Multi-line comment) 🔹 التعليق أحادي السطر تبدأ التعليقات ذات السطر الواحد بعلامتين -- . أي شيء بعدها يتم تجاهله. -- هذا تعليق SELECT * FROM Customers; 🔹 التعليق متعدد الأسطر يُستخدم عند الرغبة في كتابة تعليق يمتد لأكثر من سطر. يتم وضعه بين /* و */ . /* هذا تعليق متعدد الأسطر */ SELECT * FROM Customers; 📌 استخدام عملي للتعليقات يمكنك استخدام التعليقات لإخفاء أو تعطيل جزء معين من الكود: SELECT * FROM Customers; /* SELECT * FROM Orders; */ -- هذا السطر لن يتم تنفيذه 💡 ملاحظات إضافية التعليقات لا تؤثر على تنفيذ الاستعلام. من الأفضل استخدامها لتوضيح منطق معقد أو تعطيل أجزاء أثناء الاختبار. بعض أدوات SQL (مثل SSMS و MySQL Workbench) تدعم اختصارات للتعليق على الكود تلقائيًا...

6.10 SQL - Data Types

أنواع البيانات في SQL (SQL Data Types) أنواع البيانات (Data Types) تُستخدم في SQL لتعريف نوع البيانات التي يمكن تخزينها في كل عمود داخل الجدول. 📦 عند إنشاء جدول، يجب تحديد نوع البيانات المناسب لكل عمود لتحديد إذا كان رقمي، نصي، تاريخ، إلخ. 📋 أنواع البيانات في SQL قد تختلف أسماء الأنواع قليلًا بين أنظمة إدارة قواعد البيانات مثل SQL Server وMySQL وOracle، لكن المفهوم العام مشترك. 🔹 أنواع البيانات النصية (String Data Types) النوع الوصف CHAR(n) سلسلة نصية بطول ثابت VARCHAR(n) سلسلة نصية بطول متغير TEXT نص طويل (يستخدم لتخزين كميات كبيرة من النص) 🔹 أنواع البيانات العددية (Numeric Data Types) النوع الوصف INT عدد صحيح (رقم بدون كسور) FLOAT رقم عشري بدقة تقريبية DECIMAL(p,s) رقم عشري بدقة محددة (p: العدد الكلي، s: عدد الأرقام بعد العلامة العشرية) 🔹 أنو...

6.9 SQL - Hosting

استضافة قواعد البيانات (SQL Hosting) 🔵 SQL Hosting تعني أنك بتستخدم خادم (Server) على الإنترنت علشان تخزن عليه قاعدة بيانات SQL وتربطها بموقعك أو تطبيقك. يعني بدل ما يكون عندك قاعدة البيانات على جهازك المحلي، تقدر تحطها على سيرفر بعيد وتتعامل معاها باستخدام الإنترنت. ✅ لماذا نحتاج SQL Hosting؟ تشغيل تطبيقات الويب وقواعد البيانات 24/7 بدون توقف الوصول إلى البيانات من أي مكان في العالم عمل نسخ احتياطية تلقائية وتأمين البيانات توفير الموارد مثل المعالجات والذاكرة بشكل أفضل ⚙️ أنواع SQL Hosting Shared Hosting: قاعدة بياناتك تكون على سيرفر مشترك مع مواقع ثانية. VPS Hosting: خادم افتراضي خاص يعطيك تحكم أكبر. Dedicated Hosting: خادم مخصص بالكامل لموقعك فقط. Cloud Hosting: استضافة مرنة عبر شبكة خوادم سحابية. 📦 أنواع قواعد البيانات المشهورة المدعومة في الاستضافة MySQL – أكثر قاعدة بيانات مفتوحة المصدر استخدامًا في استضافة المواقع SQL Server – من مايكروسوفت وغالبًا مع استضافة Windows PostgreSQL – قاعدة بيانات قوية ومفتو...

6.8 SQL - Injection

هجوم SQL Injection هجوم SQL Injection هو نوع من الهجمات يُستغل فيه ثغرات في استعلامات SQL لسرقة أو تعديل أو تدمير البيانات الموجودة في قاعدة البيانات. 🛑 هذا الهجوم غالبًا يحدث عندما يتم إدخال مدخلات المستخدم مباشرة داخل استعلام SQL بدون أي فلترة أو حماية. 🔍 مثال غير آمن: لنفرض عندنا استعلام يستخدم اسم المستخدم وكلمة المرور كالتالي: SELECT * FROM Users WHERE Username = 'admin' AND Password = '1234'; لو المستخدم كتب التالي في خانة كلمة المرور: ' OR '1'='1 الاستعلام هيبقى كالتالي: SELECT * FROM Users WHERE Username = 'admin' AND Password = '' OR '1'='1'; ⬅ النتيجة؟ يرجع كل الصفوف لأن الشرط '1'='1' دائمًا صحيح! 🔐 كيف نحمي أنفسنا؟ استخدم Parameters : في ADO.NET أو PDO أو غيرها من التقنيات. لا تبني الاستعلامات بسلاسل نصية من مدخلات المستخدم. استخدم Stored Procedures إن أمكن. فلترة مدخلات المستخدم : امنع إدخال أوامر ضارة أو رموز اقتباس. ✅ مثال باستخدام Parameterized Query في C# ...

8.4 SQL - Views

عرض البيانات باستخدام SQL VIEW في SQL، تستخدم VIEW لإنشاء "جدول وهمي" مبني على استعلام (SELECT). هذا الجدول لا يخزن البيانات فعليًا، لكنه يقدم طريقة لعرض البيانات من جداول أخرى بطريقة منظمة ومخصصة. ✅ ما هي الـ VIEW؟ الـ VIEW هي نتيجة استعلام محفوظة يمكننا التعامل معها مثل أي جدول، لكن: لا تحتوي على بيانات فعلية تُحدّث تلقائيًا عند تحديث البيانات في الجداول الأصلية 🧱 الصيغة (Syntax): CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition; ⬅ تنشئ View باسم view_name تعتمد على استعلام SELECT. 🧪 مثال عملي: CREATE VIEW [Brazil Customers] AS SELECT CustomerName, ContactName FROM Customers WHERE Country = 'Brazil'; ⬅ هذا ينشئ View تحتوي فقط على العملاء من البرازيل. 🔍 استخدام View بعد إنشاء الـ View، يمكنك استخدامها مثل الجدول في الاستعلامات: SELECT * FROM [Brazil Customers]; 🧹 حذف View DROP VIEW [Brazil Customers]; ⬅ هذا الأمر يحذف الـ View نهائيًا من قاعدة البيانات. 💡 ملاحظات مهمة: يمكنك استخدام Vi...

6.7 SQL - Dates

العمل مع التواريخ في SQL في SQL، يمكننا استخدام الدوال المخصصة للتعامل مع التواريخ (Dates) ، سواء للتصفية أو التنسيق أو المقارنة. ✅ تنسيق التاريخ في SQL في معظم أنظمة قواعد البيانات (زي MySQL و SQL Server)، يتم تخزين التواريخ بصيغة: YYYY-MM-DD مثال على تاريخ صالح: 2025-04-08 🧪 استخدام WHERE مع التواريخ SELECT * FROM Orders WHERE OrderDate = '2022-12-01'; ⬅ يعرض الطلبات التي تم تنفيذها في 2022-12-01 . 📅 استخدام عوامل المقارنة مع التواريخ SELECT * FROM Orders WHERE OrderDate > '2022-12-01'; ⬅ يعرض كل الطلبات اللي تمت بعد التاريخ المحدد. ⏳ البحث بين تاريخين باستخدام BETWEEN SELECT * FROM Orders WHERE OrderDate BETWEEN '2022-12-01' AND '2022-12-31'; ⬅ يعرض الطلبات اللي تم تنفيذها خلال شهر ديسمبر فقط. 💡 ملاحظات هامة: تأكد من أن التاريخ مكتوب بصيغة صحيحة (يفضل استخدام تنسيق YYYY-MM-DD ) بعض الأنظمة تدعم التواريخ مع الوقت (مثل 2022-12-01 15:30:00 ) يمكن استخدام دوال تواريخ مثل GETDATE() أو NOW() حسب النظام المستخدم

7.9 SQL - AUTO INCREMENT

الخاصية SQL AUTO INCREMENT الخاصية AUTO INCREMENT تُستخدم في SQL لتوليد قيم رقمية تلقائية عند إدخال صف جديد في الجدول. 🟢 تُستخدم عادة مع الأعمدة التي تمثل المعرف الأساسي (Primary Key) . ✅ ما الهدف منها؟ بدلاً من إدخال قيمة المعرف (ID) يدويًا، تقوم قاعدة البيانات تلقائيًا بتحديد القيمة التالية المتاحة. ✅ في SQL Server: CREATE TABLE Persons ( ID int IDENTITY(1,1) PRIMARY KEY, Name varchar(255), Age int ); ⬅ هنا، IDENTITY(1,1) تعني أن أول قيمة ستكون 1، وكل قيمة بعدها ستزيد بمقدار 1. ✅ في MySQL: CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, Name varchar(255), Age int, PRIMARY KEY (ID) ); ⬅ في MySQL، نستخدم AUTO_INCREMENT مباشرة مع العمود. ✅ في MS Access: CREATE TABLE Persons ( ID AUTOINCREMENT PRIMARY KEY, Name varchar(255), Age int ); 💡 ملاحظات مهمة: في معظم قواعد البيانات، يمكن أن يكون هناك عمود واحد فقط يحمل خاصية AUTO INCREMENT . تُستخدم هذه الخاصية لتوليد أرقام تسلسلية فريدة للصفوف تلقائيًا. لا يمكن ا...

7.8 SQL - CREATE INDEX

أمر SQL CREATE INDEX يُستخدم الأمر CREATE INDEX لإنشاء فهرس (Index) على واحد أو أكثر من أعمدة الجدول. الفهرس يُسرّع من عمليات البحث والاستعلام داخل الجدول. ✅ لماذا نستخدم الفهرسة؟ الفهرسة تساعد على: تسريع استعلامات SELECT تحسين أداء قواعد البيانات الكبيرة الوصول السريع للسجلات باستخدام الأعمدة المفهرسة 📌 ملاحظة: الفهارس تُبطئ عمليات INSERT و UPDATE و DELETE لأن النظام يُحدّث الفهرس عند أي تعديل. 🔹 الصيغة العامة (Syntax): CREATE INDEX index_name ON table_name (column1, column2, ...); 🧪 مثال: CREATE INDEX idx_customer_name ON Customers (CustomerName); ⬅ هذا المثال يُنشئ فهرسًا باسم idx_customer_name على العمود CustomerName من جدول Customers . 🧱 فهرسة متعددة الأعمدة (Composite Index): CREATE INDEX idx_name_postal ON Customers (CustomerName, PostalCode); ⬅ هذا المثال يُسرّع عمليات البحث عندما يكون الاستعلام يحتوي على CustomerName و PostalCode معًا. 📝 ملاحظات مهمة: اسم الفهرس index_name يجب أن يكون فريدًا داخل قاعدة البيا...

7.7 - SQL DEFAULT

القيد SQL DEFAULT القيد DEFAULT يُستخدم لتحديد قيمة افتراضية لعمود في جدول، بحيث إذا لم يُدخل المستخدم أي قيمة، تُستخدم هذه القيمة تلقائيًا. ✅ لماذا نستخدم DEFAULT؟ نستخدم DEFAULT لتوفير قيمة تلقائية دون الحاجة لإدخالها يدويًا، مما يساعد على: توفير الوقت أثناء الإدخال ضمان وجود قيمة للعمود توحيد البيانات المفقودة 🧱 مثال باستخدام CREATE TABLE: CREATE TABLE Products ( ID int NOT NULL, ProductName varchar(255) NOT NULL, City varchar(255) DEFAULT 'Cairo' ); ⬅ العمود City سيأخذ القيمة "Cairo" إذا لم يتم تحديد قيمة له أثناء الإدخال. 🔧 استخدام ALTER TABLE لإضافة DEFAULT: ALTER TABLE Products ADD CONSTRAINT df_city DEFAULT 'Cairo' FOR City; 📝 إدخال بيانات بدون تحديد قيمة: INSERT INTO Products (ID, ProductName) VALUES (1, 'Laptop'); ⬅ سيتم إدخال 'Cairo' تلقائيًا في عمود City لأنه يحتوي على DEFAULT . 📝 ملاحظات مهمة: يمكنك استخدام DEFAULT مع أنواع البيانات النصية أو الرقمية. يمكنك استخدا...

7.6 SQL - CHECK

القيد SQL CHECK القيد CHECK يُستخدم لتحديد شرط منطقي يجب أن تتحقق قيم العمود بناءً عليه. يعني ببساطة: القيم التي يتم إدخالها في العمود يجب أن تُطابق الشرط المُعرّف في CHECK . ✅ أمثلة على استخدام CHECK 🔸 عند إنشاء جدول: CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, Age int CHECK (Age >= 18) ); ⬅ هذا المثال يضمن أن قيمة Age لا تقل عن 18. 🔸 CHECK على أكثر من عمود: CREATE TABLE Orders ( ID int NOT NULL, Quantity int, Price int, CHECK (Quantity > 0 AND Price > 0) ); ⬅ يتم التحقق من أن Quantity و Price أكبر من صفر. 🔧 استخدام ALTER TABLE لإضافة CHECK ALTER TABLE Persons ADD CHECK (Age >= 18); 🔸 بتسمية القيد: ALTER TABLE Persons ADD CONSTRAINT chk_age CHECK (Age >= 18); ❌ حذف قيد CHECK: ALTER TABLE Persons DROP CONSTRAINT chk_age; 📝 ملاحظات مهمة: قيد CHECK يُستخدم لضمان إدخال بيانات صحيحة ومنطقية. يمكن استخدام شروط منطقية مثل > , < , = , AND , OR داخل CHECK. يمكنك تسمية...

7.5 SQL - FOREIGN KEY

القيد SQL FOREIGN KEY القيد FOREIGN KEY يُستخدم لربط جدولين معًا . القيد FOREIGN KEY في جدول يُشير إلى PRIMARY KEY في جدول آخر، لضمان التكامل المرجعي (referential integrity). ✅ لماذا نستخدم FOREIGN KEY؟ لضمان أن القيم في العمود المُشار إليه في الجدول الثاني تكون قائمة فعلاً في الجدول الرئيسي (المصدر). ✅ الصيغة (Syntax): 🔸 عند إنشاء جدول جديد: CREATE TABLE Orders ( OrderID int NOT NULL, OrderNumber int NOT NULL, CustomerID int, FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ); 🔸 أو بتسمية القيد: CREATE TABLE Orders ( OrderID int NOT NULL, OrderNumber int NOT NULL, CustomerID int, CONSTRAINT fk_customer FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ); 🔧 إضافة FOREIGN KEY باستخدام ALTER TABLE: ALTER TABLE Orders ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID); أو مع تسمية القيد: ALTER TABLE Orders ADD CONSTRAINT fk_customer FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID); ❌ حذف قيد FOR...

7.4 SQL - PRIMARY KEY

القيد SQL PRIMARY KEY القيد PRIMARY KEY يُستخدم لتحديد كل صف داخل الجدول بشكل فريد . بمعنى إن كل قيمة في العمود المحدد كمفتاح أساسي لازم تكون: فريدة (UNIQUE) وليست NULL (يعني NOT NULL) ✅ خصائص المفتاح الأساسي: لا يمكن أن يحتوي على قيم مكررة لا يمكن أن يحتوي على NULL يمكن تعيين مفتاح أساسي واحد فقط لكل جدول ✅ الصيغة (Syntax): 🔸 داخل CREATE TABLE: CREATE TABLE table_name ( column1 datatype PRIMARY KEY, column2 datatype ); 🔸 باستخدام CONSTRAINT (تسمية القيد): CREATE TABLE table_name ( column1 datatype, column2 datatype, CONSTRAINT constraint_name PRIMARY KEY (column1) ); 🔸 على أكثر من عمود (مفتاح مركب): CREATE TABLE Orders ( OrderID int, ProductID int, Quantity int, PRIMARY KEY (OrderID, ProductID) ); 🛠 إضافة PRIMARY KEY باستخدام ALTER TABLE 🔸 على عمود واحد: ALTER TABLE table_name ADD PRIMARY KEY (column_name); 🔸 على أكثر من عمود: ALTER TABLE table_name ADD PRIMARY KEY (column1, column2); ❌ حذف الق...

7.3 SQL - UNIQUE

القيد SQL UNIQUE القيد UNIQUE يُستخدم في SQL لضمان عدم تكرار القيم في عمود (أو مجموعة أعمدة) داخل الجدول. كل قيمة في العمود يجب أن تكون فريدة . ✅ الفرق بين UNIQUE و PRIMARY KEY الـ PRIMARY KEY يحتوي ضمنيًا على قيد UNIQUE و NOT NULL . يمكن أن يحتوي الجدول على قيد UNIQUE أكثر من مرة ، لكن مفتاح أساسي واحد فقط . ✅ الصيغة (Syntax): 🔸 عند إنشاء الجدول: CREATE TABLE Persons ( ID int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int ); 🔸 قيد UNIQUE على أكثر من عمود: CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CONSTRAINT UC_Person UNIQUE (ID, LastName) ); 🔧 باستخدام ALTER TABLE: ALTER TABLE Persons ADD UNIQUE (ID); ALTER TABLE Persons ADD CONSTRAINT UC_Person UNIQUE (ID, LastName); 🗑 حذف قيد UNIQUE حسب نظام إدارة قاعدة البيانات: MySQL: ALTER TABLE Persons DROP INDEX UC_Person; SQL Server / Oracle / MS Access: ALTER TABLE P...

7.2 SQL - NOT NULL

القيد SQL NOT NULL القيد NOT NULL يُستخدم في SQL لمنع تخزين القيم الفارغة (NULL) في عمود معين. بمعنى: هذا العمود يجب أن يحتوي دائمًا على قيمة . ✅ متى نستخدم NOT NULL؟ نستخدم NOT NULL لما نكون متأكدين إن العمود لازم يكون فيه قيمة دائمًا، زي: اسم العميل تاريخ الإنشاء معرف أساسي (ID) ✅ الصيغة (Syntax): 🔸 عند إنشاء الجدول: CREATE TABLE table_name ( column1 datatype NOT NULL, column2 datatype, ... ); 🧪 مثال: CREATE TABLE Customers ( ID int NOT NULL, CustomerName varchar(255) NOT NULL, ContactName varchar(255), Country varchar(100) ); ⬅ في المثال ده: العمود ID و CustomerName لا يمكن أن يكونا NULL بينما ContactName و Country ممكن يكونوا فارغين 🔸 باستخدام ALTER TABLE لإضافة NOT NULL: ALTER TABLE Customers MODIFY COLUMN CustomerName varchar(255) NOT NULL; في بعض قواعد البيانات مثل SQL Server: ALTER TABLE Customers ALTER COLUMN CustomerName varchar(255) NOT NULL; 📝 ملاحظات مهمة: NOT NULL هو القيد ا...