Ich habe eine MYSQL-Datenbank (in PHPMyAdmin) mit zwei Tabellen. users
和posts
。两个表都有一个username
列。我想修改posts
表中的username
列,使其从users
表中提取用户名数据,即posts
表中的数据会自动从users
表中更新,并在对users
Die Tabellen werden bei jeder Aktualisierung referenziert.
Ich dachte ursprünglich, ich könnte Fremdschlüssel verwenden, um diese Funktionalität zu erreichen, aber wenn ich das richtig verstehe, sind Fremdschlüssel nur mit dem Primärschlüssel in der übergeordneten Tabelle verknüpft, oder?
Ich erhalte die Fehlermeldung, dass die folgende Syntax falsch ist, obwohl sie keine Hinweise/Lösungen enthält:
ALTER TABLE posts MODIFY COLUMN username VARCHAR(55) NOT NULL REFERENCES users(username) ON UPDATE CASCADE
Wie ändere ich eine vorhandene Spalte so, dass sie Daten aus einer Spalte in einer anderen Tabelle in der Datenbank referenziert/verwendet?
username
列具有相同的类型、大小和属性,即VARCHAR(55) NOT NULL
der beiden Tabellen und verwendet die innoDB-Speicher-Engine.
外键是一种数据完整性检查,仅此而已。它确保子表中的字段包含父表中引用字段中出现的值。就是这样*。
你不能使用外键来将一张表的数据合并到另一张表中。然而,
JOIN
语句正好可以满足你的需求,并且与外键一起使用可以确保每个帖子都有一个有效的用户名来识别正确的用户数据。以这个例子为例:
用户数据
帖子
我们可以使用以下查询将
userdata
表与posts
表进行JOIN
:你还可以进一步创建一个基于这个查询的
VIEW
来返回数据:使用
SELECT
语句查询视图:演示:https://www.db-fiddle.com/f/tbBXvthBtwH7CKu1yjzPjQ/0
* 外键还允许更新和删除父表时级联到子表,但这超出了本文的范围。