Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment créer une table en SQL - Exemple de requête Postgres et MySQL

Savoir créer des tables en SQL est un concept important et fondamental.

Dans ce tutoriel, je vais vous guider à travers le SQL syntaxe pour le CREATE TABLE déclaration en utilisant des exemples de code pour PostgreSQL et MySQL.

Basique CREATE TABLE Syntaxe

Voici la syntaxe de base pour le CREATE TABLE déclaration :

CREATE TABLE table_name(
	column1 data_type column_constraint,
    column2 data_type column_constraint,
    column3 data_type column_constraint,
    column4 data_type column_constraint,
    ... etc
);

Pour la première partie, vous devez commencer par le CREATE TABLE suivi du nom de la table que vous souhaitez créer.

Si je voulais créer un tableau d'informations sur les enseignants, j'écrirais quelque chose comme ceci :

CREATE TABLE teachers();

À l'intérieur de la parenthèse, vous ajouterez les informations pour créer les colonnes du tableau. Si vous oubliez la parenthèse, vous obtiendrez un message d'erreur.

CREATE TABLE teachers;

Le point-virgule à la fin de la parenthèse indique à l'ordinateur qu'il s'agit de la fin du SQL déclaration. Vous entendrez parfois cela appelé un terminateur d'instruction.

Que sont MySQL moteurs de stockage ?

Selon le MySQL documents :

Les moteurs de stockage sont des composants MySQL qui gèrent les opérations SQL pour différents types de tables.

MySQL utilise ces moteurs de stockage pour effectuer des opérations CRUD (création, lecture, mise à jour et suppression) sur la base de données.

En MySQL , vous avez la possibilité de spécifier le type de moteur de stockage que vous souhaitez utiliser pour votre table. Si vous omettez le ENGINE clause alors la valeur par défaut sera InnoDB.

CREATE TABLE table_name(
	column1 data_type column_constraint,
    column2 data_type column_constraint,
    column3 data_type column_constraint,
    column4 data_type column_constraint,
    ... etc
)ENGINE=storage_engine;

Quel est le IF NOT EXISTS clause ?

Il existe une clause facultative appelée IF NOT EXISTS qui vérifiera si la table que vous souhaitez créer existe déjà dans la base de données. Vous pouvez placer cette clause juste avant le nom de la table.

CREATE TABLE IF NOT EXISTS teachers();

Si la table existe déjà, l'ordinateur ne créera pas de nouvelle table.

Si vous omettez le IF NOT EXISTS clause et essayez de créer une table qui existe déjà dans la base de données, vous obtiendrez un message d'erreur.

Dans cet exemple, j'ai d'abord créé une table appelée enseignants. Mais si j'essaie de créer cette même table dans la commande suivante, je rencontrerai une erreur.

CREATE TABLE IF NOT EXISTS teachers();
CREATE TABLE teachers();

Comment créer des colonnes dans le tableau

Entre parenthèses pour CREATE TABLE , vous allez lister les noms des colonnes que vous souhaitez créer avec leurs types de données et leurs contraintes.

Ceci est un exemple de la façon dont nous pouvons ajouter quatre colonnes de school_id , name , email et age à la table de nos professeurs. Chaque nom de colonne doit être séparé par des virgules.

CREATE TABLE teachers(
	school_id data_type column_constraint, 
	name data_type column_constraint,
    email data_type column_constraint, 
	age data_type column_constraint
);

Selon le MySQL documents :

MySQL a une limite stricte de 4096 colonnes par table, mais le maximum effectif peut être inférieur pour une table donnée. La limite exacte de colonne dépend de plusieurs facteurs.

Si vous travaillez sur MySQL plus petit projets personnels, vous n'aurez probablement pas à vous soucier de dépasser le nombre de colonnes de vos tableaux.

Selon la documentation PostgreSQL, il existe une limite de 1600 colonnes par table. Similaire à MySQL , une limite exacte peut varier en fonction de l'espace disque ou des restrictions de performances.

Types de données en SQL

Lorsque vous créez des colonnes dans la table, vous devez lui attribuer un type de données. Les types de données décrivent le type de valeur à l'intérieur des colonnes.

Voici six catégories populaires de types de données dans SQL :

  1. Numérique (entier, flottant, série, décimal, etc.)
  2. Données et heure (horodatage, données, heure, etc.)
  3. Caractère et chaîne (char, varchar, texte, etc.)
  4. Unicode (ntext, nvarchar, etc.)
  5. Binaire (binaire, etc.)
  6. Divers (xml, tableau, etc.)

Cet article ne passera pas en revue tous les types de données, mais couvrira certains des plus populaires.

Voici la liste complète de PostgreSQL types de données et MySQL Types de données.

Qu'est-ce que SERIAL et AUTO_INCREMENT ?

Dans PostgreSQL , un SERIAL Le type de données est un entier qui s'incrémentera automatiquement de un pour chaque nouvelle ligne créée.

Nous pouvons ajouter SERIAL juste après le school_id colonne dans notre tableau des enseignants.

school_id SERIAL

En MySQL , vous utiliseriez AUTO_INCREMENT au lieu de SERIAL . Dans cet exemple, le INT type de données est utilisé qui représente un entier.

school_id INT AUTO_INCREMENT

Si nous ajoutions cinq lignes à notre table d'enseignants, la sortie afficherait les nombres de 1, 2, 3, 4, 5 pour le school_id car l'entier s'incrémente automatiquement de un à chaque nouvelle ligne.

Qu'est-ce que le VARCHAR Type de données?

Un VARCHAR Le type de données est une longueur de chaîne variable dans laquelle vous pouvez définir une longueur de caractère maximale.

Ceci est un exemple d'utilisation du VARCHAR type de données pour le name et email colonnes dans notre tableau des enseignants. Le nombre 30 est la longueur maximale des caractères.

name VARCHAR(30) column_constraint,
email VARCHAR(30) column_constraint,

Contraintes de colonne en SQL

Ce sont des règles qui sont appliquées aux données à l'intérieur des colonnes du tableau.

Voici une liste de certaines des contraintes de colonne les plus courantes :

  • CLÉ PRIMAIRE - cette clé sert d'identifiant unique pour la table
  • CLÉ ÉTRANGÈRE - cette clé garantit que les valeurs d'une colonne sont également présentes dans une autre table. Cela sert de lien entre les tables.
  • UNIQUE - toutes les valeurs de la colonne doivent être uniques
  • NOT NULL - les valeurs ne peuvent pas être NULL. NULL est l'absence de valeur
  • CHECK - teste une valeur par rapport à une expression booléenne

Exemples de PRIMARY et FOREIGN clés

Dans notre tableau des enseignants, nous pouvons ajouter une PRIMARY KEY au school_id colonne.

Voici à quoi ressemblerait le code dans PostgreSQL :

 school_id SERIAL PRIMARY KEY

Voici à quoi ressemblerait le code dans MySQL :

school_id INT AUTO_INCREMENT PRIMARY KEY

Si vous vouliez avoir plus d'une colonne pour la PRIMARY KEY , vous l'ajouteriez juste après la création de vos colonnes.

CREATE TABLE table_name(
	column1 data_type column_constraint,
    column2 data_type column_constraint,
    column3 data_type column_constraint,
    column4 data_type column_constraint,
    ... etc
    PRIMARY KEY (column1, column2)
);

Si vous souhaitez lier une table à une autre, vous pouvez utiliser une FOREIGN KEY .

Disons que nous avions une table appelée district_employees avec une clé primaire de district_id . Voici à quoi ressemblerait le code dans PostgreSQL :

CREATE TABLE district_employees(
   district_id SERIAL PRIMARY KEY,
   employee_name VARCHAR(30) NOT NULL,
   PRIMARY KEY(district_id)
);

Dans notre table des enseignants, nous pouvons utiliser une clé étrangère et référencer la table district_employees.

district_id INT REFERENCES district_employees(district_id),
CREATE TABLE teachers(
    school_id SERIAL PRIMARY KEY,
    district_id INT REFERENCES district_employees(district_id),
    column1 data_type column_constraint,
    column2 data_type column_constraint,
    column3 data_type column_constraint,
    column4 data_type column_constraint,
    ... etc 
);

Exemples de NOT NULL , CHECK et UNIQUE

Si nous voulons nous assurer que nous n'avons aucune valeur nulle, nous pouvons utiliser le NOT NULL contrainte.

name VARCHAR(30) NOT NULL

Nous pouvons utiliser le CHECK contrainte de s'assurer que tous nos enseignants ont 18 ans et plus. Le CHECK contrainte teste une valeur par rapport à une expression booléenne.

age INT CHECK(age >= 18)

Si l'une de nos valeurs ne remplit pas cette condition, nous recevrons un message d'erreur.

Nous pouvons utiliser le UNIQUE contrainte pour s'assurer que tous les e-mails sont uniques.

email VARCHAR(30) UNIQUE

Voici le résultat final pour la table des enseignants :

Voici à quoi ressemblerait le code dans PostgreSQL :

CREATE TABLE teachers(
	school_id SERIAL PRIMARY KEY,
	name VARCHAR(30) NOT NULL,
    email VARCHAR(30) UNIQUE,
	age INT CHECK(age >= 18)      
);

Voici à quoi ressemblerait le code dans MySQL :

CREATE TABLE teachers(
	school_id INT AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(30) NOT NULL,
    email VARCHAR(30) UNIQUE,
	age INT CHECK(age >= 18)      
);

J'espère que vous avez apprécié cet article et bonne chance dans votre parcours SQL.