J'ai une base de données MYSQL (en PHPMyAdmin) avec deux tables users
和posts
。两个表都有一个username
列。我想修改posts
表中的username
列,使其从users
表中提取用户名数据,即posts
表中的数据会自动从users
表中更新,并在对users
Les tables sont référencées lors d'une mise à jour.
Je pensais au départ pouvoir utiliser des clés étrangères pour réaliser cette fonctionnalité, mais si je comprends bien, les clés étrangères ne sont associées qu'à la clé primaire de la table parent, n'est-ce pas ?
Je reçois une erreur indiquant que la syntaxe suivante est incorrecte, même si elle ne donne aucun indice/solution :
ALTER TABLE posts MODIFY COLUMN username VARCHAR(55) NOT NULL REFERENCES users(username) ON UPDATE CASCADE
Comment modifier une colonne existante pour qu'elle référence/utilise les données d'une colonne d'une autre table de la base de données ?
username
列具有相同的类型、大小和属性,即VARCHAR(55) NOT NULL
des deux tables, et utilise le moteur de stockage innoDB.
Les clés étrangères sont un contrôle de l'intégrité des données, rien de plus. Il garantit que les champs de la table enfant contiennent des valeurs qui apparaissent dans les champs référencés de la table parent. C'est tout *.
Vous ne pouvez pas utiliser de clés étrangères pour fusionner les données d'une table dans une autre table. Cependant, l'instruction
JOIN
fait exactement ce dont vous avez besoin et, utilisée avec des clés étrangères, garantit que chaque publication possède un nom d'utilisateur valide pour identifier les données utilisateur correctes.Prenons cet exemple :
Données utilisateur
Messages
Nous pouvons utiliser la requête suivante pour comparer la table
userdata
avec la tableposts
userdata
表与posts
表进行JOIN
:Vous pouvez en outre créer un
VIEW
basé sur cette requête pour renvoyer des données :Utilisez l'instruction
SELECT
pour interroger la vue :Démo : https://www.db-fiddle.com/f/tbBXvthBtwH7CKu1yjzPjQ/0
* Les clés étrangères permettent également aux mises à jour et aux suppressions de la table parent de se répercuter sur la table enfant, mais cela dépasse le cadre de cet article.