Saya mempunyai pangkalan data MYSQL (dalam PHPMyAdmin) dengan dua jadualusers
和posts
。两个表都有一个username
列。我想修改posts
表中的username
列,使其从users
表中提取用户名数据,即posts
表中的数据会自动从users
表中更新,并在对users
Jadual dirujuk apabila sebarang kemas kini dibuat.
Saya pada mulanya fikir saya boleh menggunakan kunci asing untuk mencapai fungsi ini, tetapi jika saya faham dengan betul, kunci asing hanya dikaitkan dengan kunci utama dalam jadual induk, bukan?
Saya mendapat ralat mengatakan sintaks berikut tidak betul, walaupun ia tidak memberikan sebarang petunjuk/penyelesaian:
ALTER TABLE posts MODIFY COLUMN username VARCHAR(55) NOT NULL REFERENCES users(username) ON UPDATE CASCADE
Bagaimana untuk mengubah suai lajur sedia ada supaya ia merujuk/menggunakan data daripada lajur dalam jadual berbeza dalam pangkalan data?
username
列具有相同的类型、大小和属性,即VARCHAR(55) NOT NULL
daripada dua jadual, dan menggunakan enjin storan innoDB.
Kunci asing ialah semakan integriti data, tidak lebih. Ia memastikan bahawa medan dalam jadual anak mengandungi nilai yang muncul dalam medan rujukan dalam jadual induk. Itu sahaja*.
Anda tidak boleh menggunakan kekunci asing untuk menggabungkan data dari satu jadual ke jadual lain. Walau bagaimanapun, pernyataan
JOIN
melakukan apa yang anda perlukan, dan digunakan dengan kunci asing memastikan setiap siaran mempunyai nama pengguna yang sah untuk mengenal pasti data pengguna yang betul.Ambil contoh ini:
Data Pengguna
Catatan
Kita boleh menggunakan pertanyaan berikut untuk membandingkan jadual
data pengguna
dengan jadualposts
userdata
表与posts
表进行JOIN
:Anda boleh membuat
VIEW
selanjutnya berdasarkan pertanyaan ini untuk mengembalikan data:Gunakan pernyataan
SELECT
untuk menanyakan pandangan:Demo:https://www.db-fiddle.com/f/tbBXvthBtwH7CKu1yjzPjQ/0
*Kekunci asing juga membenarkan kemas kini dan pemadaman daripada jadual induk mengalir ke jadual anak, tetapi ini di luar skop artikel ini.