Saya memiliki fungsi yang memperbarui tiga tabel, tetapi saya menggunakan tiga pertanyaan untuk melakukan ini. Saya ingin menggunakan pendekatan yang lebih nyaman untuk praktik yang baik.
Bagaimana saya bisa memperbarui beberapa tabel di MySQL dengan satu permintaan?
mysql
sql
sql-update
Adamski
sumber
sumber
Jawaban:
Ambil kotak dua tabel,
Books
danOrders
. Jika kita menambah jumlah buku dalam urutan tertentu denganOrder.ID = 1002
dalamOrders
tabel maka kita juga perlu mengurangi bahwa jumlah total buku yang tersedia di stok kita dengan jumlah yang sama dalamBooks
tabel.sumber
Untuk melihat apa yang akan diperbarui, Anda dapat mengonversinya menjadi pernyataan pilihan, misalnya:
Contoh menggunakan tabel yang sama dengan jawaban lainnya:
EDIT:
Hanya untuk bersenang-senang, mari tambahkan sesuatu yang sedikit lebih menarik.
Katakanlah Anda memiliki tabel
books
dan tabelauthors
. Andabooks
punyaauthor_id
. Tetapi ketika database awalnya dibuat, tidak ada batasan kunci asing yang diatur dan kemudian bug dalam kode front-end menyebabkan beberapa buku ditambahkan denganauthor_id
s yang tidak valid . Sebagai seorang DBA Anda tidak ingin harus melalui semua inibooks
untuk memeriksa apa yangauthor_id
seharusnya, sehingga keputusan dibuat bahwa penangkap data akan memperbaikibooks
untuk menunjuk ke kananauthors
. Tetapi ada terlalu banyak buku untuk dibaca masing-masing dan katakanlah Anda tahu bahwa orang-orang yang memilikiauthor_id
yang sesuai dengan yang sebenarnyaauthor
sudah benar. Hanya yang tidak adaauthor_id
s yang tidak valid. Sudah ada antarmuka bagi pengguna untuk memperbarui detail buku dan pengembang tidak ingin mengubahnya hanya untuk masalah ini. Tetapi antarmuka yang ada melakukanINNER JOIN authors
, sehingga semua buku dengan penulis yang tidak valid dikecualikan.Yang dapat Anda lakukan adalah ini: Masukkan catatan penulis palsu seperti "Penulis tidak dikenal". Kemudian perbarui
author_id
semua catatan buruk untuk menunjuk ke penulis tidak dikenal. Kemudian penangkap data dapat mencari semua buku dengan penulis disetel ke "Penulis tidak dikenal", mencari penulis yang benar dan memperbaikinya.Bagaimana Anda memperbarui semua catatan buruk yang mengarah ke penulis tidak dikenal? Seperti ini (dengan asumsi penulis tidak dikenal
author_id
adalah 99999):Di atas juga akan memperbarui
books
yang memilikiNULL
author_id
ke penulis Tidak Dikenal. Jika Anda tidak menginginkannya, tentu saja Anda dapat menambahkanAND books.author_id IS NOT NULL
.sumber
Anda juga dapat melakukan ini dengan satu permintaan juga menggunakan gabungan seperti:
Dan kemudian kirimkan saja pertanyaan ini, tentu saja. Anda dapat membaca lebih lanjut tentang bergabung di sini: http://dev.mysql.com/doc/refman/5.0/id/join.html . Ada juga beberapa batasan untuk memesan dan membatasi beberapa pembaruan tabel yang dapat Anda baca di sini: http://dev.mysql.com/doc/refman/5.0/en/update.html (cukup ctrl + f "gabung").
sumber
Untuk itulah biasanya prosedur tersimpan: untuk mengimplementasikan beberapa pernyataan SQL secara berurutan. Dengan menggunakan rollback, Anda dapat memastikan bahwa mereka diperlakukan sebagai satu unit kerja, yaitu apakah semuanya dijalankan atau tidak ada di antaranya, untuk menjaga data tetap konsisten.
sumber
Ketika Anda mengatakan beberapa kueri maksud Anda beberapa pernyataan SQL seperti pada:
Atau beberapa fungsi panggilan permintaan seperti pada:
Yang pertama dapat dilakukan dengan menggunakan satu panggilan mySqlQuery jika itu yang ingin Anda capai, cukup panggil fungsi mySqlQuery dengan cara berikut:
Ini akan menjalankan ketiga kueri dengan satu panggilan mySqlQuery ().
sumber