الرئيسية › الدروس › قواعد البيانات: نصنعو الـ tables
قواعد البيانات MySQL: إنشاء الجداول والمفاتيح والقيود
نظّم المعطيات في tables مربوطين ببعضهم: champs، types، clé primaire، clé étrangère، contraintes، وبعد عمّر وبدّل الـ tables بالـ SQL.
دروس هذا الفصل
- الـ tables، الـ champs والـ types
- الـ clés étrangères والـ contraintes
- نعمّرو ونبدّلو table
الدرس 27.1 : الـ tables، الـ champs والـ types
الـ base de données ترتّب المعلومات في tables. الـ table تشبه لجدول: كل عمود هو champ (اللقب، الاسم، المعدّل…) وكل سطر هو enregistrement (تلميذ واحد).
الـ clé primaire
الـ clé primaire هي الـ champ اللي يعرّف كل سطر: زوز أسطر عمرهم ما عندهم نفس القيمة، وعمرها ما تكون فارغة. في الـ schéma متاع الـ table نحطّو تحتها خط (هوني بالـ gras): eleve (id, nom, prenom, moyenne).
الـ types متاع MySQL
INT: عدد صحيح (عمر، كمية).DECIMAL(5,2): عدد بفاصل، 5 أرقام منهم 2 بعد الفاصل (123.45).VARCHAR(30): نص فيه 30 حرف على الأكثر.CHAR(8): 8 حروف بالضبط.TEXT: نص طويل.DATE: تاريخ يتكتب'2026-10-09'(عام-شهر-نهار).TIME: ساعة'14:30:00'.DATETIME: الزوز.
نصنعو الـ base و table
CREATE DATABASE ecole;
USE ecole;
CREATE TABLE eleve (
id INT PRIMARY KEY,
nom VARCHAR(30) NOT NULL,
prenom VARCHAR(30) NOT NULL,
moyenne DECIMAL(4,2)
);
NOT NULL يفرض إنّو الـ champ يتعمّر. الأمر DESCRIBE eleve; يورّي هيكل الـ table: الـ champs متاعها، الـ types، والمفتاح.
انتبه : فاصلة تفرّق بين الـ champs، أما ما فماش بعد الأخير. والـ VARCHAR ديما معاه الطول متاعو: VARCHAR(30)، عمرو ما يكون VARCHAR وحدو.
بـ SQL
خدّم السكريبت واقرا النتيجة متاع DESCRIBE. وبعد زيد champ ville VARCHAR(20) للـ table وعاود خدّم.
CREATE DATABASE ecole;
USE ecole;
CREATE TABLE eleve (
id INT PRIMARY KEY,
nom VARCHAR(30) NOT NULL,
prenom VARCHAR(30) NOT NULL,
moyenne DECIMAL(4,2)
);
DESCRIBE eleve;
الدرس 27.2 : الـ clés étrangères والـ contraintes
الـ tables متاع base مربوطين ببعضهم. القسم فيه برشا تلامذة، والتلميذ في قسم واحد برك: هذي علاقة واحد لبرشا (1:n). نمثّلوها بـ clé étrangère: الـ table eleve تخبّي الـ code متاع القسم متاعو.
في الـ schéma، الـ clé étrangère قدّامها #: classe (code, niveau) و eleve (id, nom, #code_classe).
CREATE TABLE classe (
code VARCHAR(5) PRIMARY KEY,
niveau VARCHAR(20) NOT NULL
);
CREATE TABLE eleve (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(30) NOT NULL,
code_classe VARCHAR(5),
FOREIGN KEY (code_classe) REFERENCES classe(code)
);
الـ contraintes d'intégrité
- Entité: الـ clé primaire فريدة وعمرها ما تكون فارغة.
- Domaine: كل قيمة تحترم الـ type والقواعد متاعها:
NOT NULL،UNIQUE(ما فماش تكرار)،DEFAULT 'Tunis'(القيمة كان ما عطيت شي)،CHECK (moyenne BETWEEN 0 AND 20). - Référentielle: الـ clé étrangère فيها قيمة موجودة في الـ table الأخرى. MySQL يرفض تلميذ في قسم موش معروف (غلطة #1452)، ويرفض يفسخ قسم مازال فيه تلامذة (#1451).
نصيحة : AUTO_INCREMENT يعطي الأرقام وحدو: كي تزيد سطر ما تعطيش الـ id، MySQL يحطّ 1، 2، 3…
علاقة برشا لبرشا (n:m)، مثلاً تلامذة مسجّلين في برشا clubs، تتعمل بـ table زايدة فيها الزوز clés étrangères؛ والـ clé primaire متاعها مصنوعة من الزوز champs: PRIMARY KEY (id_eleve, code_club).
بـ SQL
خدّم السكريبت. وبعد نحّي الـ -- اللي قدّام السطر الأخير وعاود خدّم: الـ INSERT هذا يترفض (غلطة #1452)، خاطر القسم 9Z موش موجود.
CREATE TABLE classe (
code VARCHAR(5) PRIMARY KEY,
niveau VARCHAR(20) NOT NULL
);
CREATE TABLE eleve (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(30) NOT NULL,
code_classe VARCHAR(5),
FOREIGN KEY (code_classe) REFERENCES classe(code)
);
INSERT INTO classe VALUES ('3SI1', '3ème SI');
INSERT INTO eleve (nom, code_classe) VALUES ('Trabelsi', '3SI1');
SELECT * FROM eleve;
-- INSERT INTO eleve (nom, code_classe) VALUES ('Jaziri', '9Z');
الدرس 27.3 : نعمّرو ونبدّلو table
نزيدو أسطر: INSERT INTO
INSERT INTO eleve VALUES (1, 'Ben Salah', 'Amine', 12.50);
INSERT INTO eleve (id, nom, prenom) VALUES (2, 'Trabelsi', 'Sarra');
INSERT INTO eleve (id, nom, prenom, moyenne) VALUES
(3, 'Jaziri', 'Yassine', 9.75),
(4, 'Mansour', 'Rim', 14.00);
- من غير قائمة champs، تعطي القيم الكل، بالترتيب متاع الـ table.
- بقائمة، الـ champs اللي ما ذكرتهمش ياخذو الـ
DEFAULTمتاعهم، ولاNULL. - النصوص والتواريخ بين apostrophes:
'Sousse'،'2009-03-15'. الأعداد لا، والفاصل العشري نقطة:12.5.
نبدّلو الهيكل: ALTER TABLE
ALTER TABLE eleve ADD tel VARCHAR(8);
ALTER TABLE eleve MODIFY nom VARCHAR(40) NOT NULL;
ALTER TABLE eleve DROP COLUMN tel;
ADD يزيد champ، MODIFY يبدّل الـ type ولا القواعد متاعو، DROP COLUMN يفسخو. DROP TABLE eleve; يفسخ الـ table الكل، بالأسطر متاعها.
انتبه : التاريخ ديما يتكتب 'AAAA-MM-JJ': '15/06/2009' يترفض (غلطة #1292).
بـ SQL
خدّم، وبعد زيد تلميذ خامس بـ INSERT واحد وشوف النتيجة متاع الـ SELECT.
CREATE TABLE eleve (
id INT PRIMARY KEY,
nom VARCHAR(30) NOT NULL,
prenom VARCHAR(30) NOT NULL,
moyenne DECIMAL(4,2)
);
INSERT INTO eleve VALUES (1, 'Ben Salah', 'Amine', 12.50);
INSERT INTO eleve (id, nom, prenom) VALUES (2, 'Trabelsi', 'Sarra');
ALTER TABLE eleve ADD ville VARCHAR(20) DEFAULT 'Tunis';
SELECT * FROM eleve;
تدرّب مجانًا
كل درس فيه 3 تمارين مجانية مع تلميحات باش تطبّق الفصل هذا مع هنّيبوت.
← الفصل اللي قبل : JavaScript والصفحة · الفصل اللي بعد : استعلامات SQL بسيطة →
كل الفصول · شوف فروض 2 تكنولوجيا المصلّحة
الدروس كتبناها لـ Mission Carthage على أساس البرنامج الرسمي. الأستاذ متاعك يبقى المرجع.