Maison > base de données > tutoriel mysql > le corps du texte

Paramètres de clé étrangère MySQL

PHPz
Libérer: 2023-05-14 10:24:09
original
4452 Les gens l'ont consulté

MySQL est l'un des systèmes de gestion de bases de données relationnelles open source les plus populaires. Bien que MySQL soit très puissant, il devient parfois très complexe et pose des problèmes face à des structures et des relations complexes entre les tables de données. Pour résoudre ce problème, MySQL fournit des contraintes de clés étrangères. Les contraintes de clé étrangère sont un moyen de garantir l'intégrité des relations entre les tables de données. Dans cet article, nous examinerons les paramètres de clé étrangère de MySQL et les applications associées.

Qu'est-ce qu'une clé étrangère ?

Dans une base de données, les colonnes d'une table sont appelées champs ou attributs de la table. Par exemple, dans la base de données d'un site de commerce électronique, le numéro de téléphone mobile de l'utilisateur peut être stocké dans une table nommée « utilisateur » (utilisateur), et la commande de l'utilisateur est stockée dans une autre table nommée « commande » (commande) du milieu. Il existe une relation entre ces deux tables. Un utilisateur peut passer plusieurs commandes et une commande ne peut appartenir qu'à un seul utilisateur.

La clé étrangère est un terme de base de données relationnelle, c'est une contrainte qui joint deux tables. Les contraintes de clé étrangère garantissent que lorsqu'une table fait référence à des données dans une autre table, son instance doit correspondre à une valeur dans l'autre table.

L'avantage des clés étrangères est qu'elles assurent l'intégrité des relations entre les tables de données. Cela signifie que s'il existe une contrainte de clé étrangère entre deux tables, lorsqu'un enregistrement de la table primaire est supprimé ou mis à jour, toutes les clés étrangères qui en dépendent seront automatiquement supprimées ou mises à jour.

Comment définir des clés étrangères ?

Pour configurer des clés étrangères, vous devez vous assurer que le moteur MySQL que vous utilisez le prend en charge. Actuellement, MySQL prend en charge les moteurs MyISAM, InnoDB et NDB, dont InnoDB est le moteur le plus utilisé et le seul moteur MySQL prenant en charge les clés étrangères.

Si vous souhaitez utiliser des contraintes de clé étrangère, assurez-vous que votre table utilise le moteur InnoDB. Vous pouvez exécuter la commande suivante pour vérifier le type de moteur de la table :

SHOW TABLE STATUS FROM database_name WHERE Name='table_name';
Copier après la connexion

où, database_name est le nom de la base de données et table_name est le nom de la table souhaitée pour vérifier le type de moteur. database_name是数据库名称,table_name是您要查看引擎类型的表名。

如果您的表使用的是不支持外键约束的引擎,则需要将其更改为InnoDB引擎,执行以下命令:

ALTER TABLE table_name ENGINE=InnoDB;
Copier après la connexion

接下来,您需要创建一个表并添加一个外键约束。以下是相应的代码示例:

CREATE TABLE order (
    order_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    date_added DATETIME,
    FOREIGN KEY (user_id) REFERENCES user(user_id)
);
Copier après la connexion

在此示例中,我们创建了一个“订单”(order)表,其中包括订单ID(order_id)、用户ID(user_id)和日期(date_added)字段。然后,我们为“订单”表添加了一个外键约束,以确保在添加新订单之前先存在用户ID。

在这个约束表达式中,user_id是当前表中的字段名称,user是所依赖的表的名称,user_id是所依赖表中的字段名称。此外,FOREIGN KEY关键字用于定义外键约束。

在MySQL中,还可以将外键约束定义为CASCADESET NULLRESTRICT。以下是这些选项的说明:

  • CASCADE:在指定父项时,将同时删除或更新子项。
  • SET NULL:在指定父项时将删除或更新子项的值为Null。
  • RESTRICT:在指定父项时阻止删除或更新子项。

以下是完整的代码示例,其中包括CASCADESET NULLRESTRICT选择:

-- 创建父表
CREATE TABLE user (
    user_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL
);

-- 创建子表,并定义外键约束
CREATE TABLE order (
    order_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    date_added DATETIME,
    FOREIGN KEY (user_id) REFERENCES user(user_id)
        ON DELETE CASCADE
        ON UPDATE SET NULL
);
Copier après la connexion

在此示例中,我们为“订单”表添加了两个选项。ON DELETE CASCADE选项表示在删除用户记录时,也将删除所有与该用户关联的订单记录。ON UPDATE SET NULL

Si votre table utilise un moteur qui ne prend pas en charge les contraintes de clé étrangère, vous devez la remplacer par le moteur InnoDB, exécutez la commande suivante :

-- 查找所有订单
SELECT * FROM order;

-- 查找用户John的所有订单
SELECT * FROM order WHERE user_id=(SELECT user_id FROM user WHERE username='John');
Copier après la connexion

Ensuite, vous devez créer une table et ajouter une contrainte de clé étrangère. Voici l'exemple de code correspondant :

-- 修改订单,将John的所有订单修改为Jane的订单
UPDATE order SET user_id=(SELECT user_id FROM user WHERE username='Jane') WHERE user_id=(SELECT user_id FROM user WHERE username='John');
Copier après la connexion
Dans cet exemple, nous créons une table "order" qui comprend les champs ID de commande (order_id), ID utilisateur (user_id) et date (date_added). Nous avons ensuite ajouté une contrainte de clé étrangère à la table « Commandes » pour garantir que l'ID utilisateur existe avant d'ajouter une nouvelle commande.

Dans cette expression de contrainte, user_id est le nom du champ dans la table actuelle, user est le nom de la table dépendante, user_id est le nom du champ dans la table dépendante. De plus, le mot-clé FOREIGN KEY est utilisé pour définir les contraintes de clé étrangère.

Dans MySQL, les contraintes de clé étrangère peuvent également être définies comme CASCADE, SET NULL ou RESTRICT. Voici une description de ces options :

  • CASCADE : Lorsqu'un parent est spécifié, les enfants seront également supprimés ou mis à jour.
  • SET NULL : Lorsque l'élément parent est spécifié, la valeur de l'élément enfant sera supprimée ou mise à jour pour être Null.
  • RESTRICT : empêche la suppression ou la mise à jour des enfants lorsqu'un parent est spécifié.
Voici l'exemple de code complet, qui comprend les sélections CASCADE, SET NULL et RESTRICT :

rrreee

Dans cet exemple, nous avons ajouté deux options au tableau Commandes. L'option ON DELETE CASCADE indique que lorsqu'un enregistrement utilisateur est supprimé, tous les enregistrements de commande associés à l'utilisateur seront également supprimés. L'option ON UPDATE SET NULL indique que lors de la mise à jour d'un enregistrement utilisateur, l'ID utilisateur dans l'enregistrement de commande sera défini sur une valeur Null.

Comment utiliser les clés étrangères ? 🎜🎜Dans la programmation de bases de données, vous pouvez utiliser certaines commandes de base pour interroger des tables contenant des clés étrangères. Voici un exemple de code : 🎜rrreee🎜 Dans les deux exemples, nous interrogeons la table "Orders" qui contient des contraintes de clé étrangère. Dans le deuxième exemple, nous avons également utilisé une requête imbriquée pour exporter les enregistrements de commande d'un utilisateur spécifique. 🎜🎜Lorsque vous effectuez une opération de modification, assurez-vous que la modification ne viole pas les contraintes de clé étrangère. Si la valeur modifiée ne satisfait pas aux contraintes de clé étrangère, une erreur se produira. Si cela se produit, modifiez les données appropriées pour satisfaire aux contraintes de clé étrangère. Voici un exemple : 🎜rrreee🎜 Dans cet exemple, nous modifions toutes les commandes appartenant à l'utilisateur "John" en commandes appartenant à l'utilisateur "Jane". Avant de faire cela, assurez-vous que l'utilisateur "Jane" existe déjà. 🎜🎜Conclusion🎜🎜Les contraintes de clé étrangère de MySQL sont très importantes pour garantir l'intégrité des relations avec les bases de données. Cet article fournit des exemples pour vous aider à créer et à utiliser des contraintes de clé étrangère. Les contraintes de clé étrangère étant l'une des fonctionnalités du moteur MySQL, vous devez choisir le bon moteur lors de la création d'une table. La définition correcte des contraintes de clé étrangère contribuera à améliorer la stabilité et la maintenabilité de la table de données. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal