Operasi SQL untuk menyalin baris dari satu jadual ke jadual lain apabila indeks berubah
P粉459440991
P粉459440991 2024-03-30 14:52:06
0
1
410

Perihalan status

Saya mempunyai dua pangkalan data, DB1DB2,它们具有相同的表 Author,其中字段为 Author.IDAuthor.AuthorName.

DB1.Authormedan Author.ID DB1.AuthorAuthor.ID 字段 AUTO_INCRMENT,而 DB2.Author 没有 AUTO_INCRMENT,因为它依赖于 DB1 mempunyai

AUTO_INCRMENT, manakala DB2.Author

tidak mempunyai Author.ID 上的 PRIMARY 索引和 Author.AuthorName AUTO_INCRMENT kerana ia bergantung pada DB1 ketepatan data.

Kedua-dua jadual mempunyai indeks unik pada DB2.Author 具有从 DB1.Author.

Menyalin baris.

Kedua-dua pangkalan data menggunakan
MariaDB

versi 10.6.7.

SoalanDB1 管理员删除了 DB1.Author

beberapa entri dalam jadual dan kemudian susun semula indeks supaya tiada jurang dalam nombor indeks. Ini bermakna mereka mungkin mempunyai: IDNama pengarang1satu2B3C

AuthorName'B'

Kemudian mereka memadamkan baris : IDNama pengarang1satu3C

Mereka akhirnya mengemas kini indeks untuk tidak mempunyai jurang (3-C ditukar kepada 2-C): IDNama pengarang1satu2C

DB1.Author 复制到 DB2.Author 而不删除 DB2.Author 表中的所有内容,这样我就不会'不会丢失 CASCADE

Kini saya perlu mencari cara untuk menyalin status baris yang dikemas kini daripada DB1.Author ke DB2.Author

tanpa memadamkan DB2.Author Semua dalam jadual
supaya saya tidak kehilangan data untuk kesan CASCADE.

Apakah cara terbaik?

ID 2 会尝试插入 'C' 的重复值,因为它IDGambar saya


Itulah yang saya lakukan, tetapi ia jelas tidak berfungsi kerana sekiranya kunci pendua ia cuba mencipta kunci pendua lain (pendua sudah wujud pada 3):

INSERT INTO DB2.Author (ID, AuthorName)
SELECT DB1.Author.ID, DB1.Author.AuthorName FROM DB1.Author
ON DUPLICATE KEY UPDATE
    ID = DB1.Author.ID,
    AuthorName = DB1.Author.AuthorName;

Kaedah lain? 🎜🎜 🎜Selain penyelesaian pertanyaan SQL yang mungkin, adakah terdapat cara lain untuk mengemas kini data jadual secara automatik dalam satu pangkalan data apabila data ditukar dalam pangkalan data lain? Hanya beberapa jadual perlu disalin, bukan jadual terpaut lain. 🎜
P粉459440991
P粉459440991

membalas semua(1)
P粉296080076

TL;DR, masalah anda ialah pengurus pangkalan data anda. Penyelesaiannya adalah untuk dia membuat asal kerosakan yang dilakukan dengan memulihkan data kepada keadaan sebelumnya. Padamkan sahaja baris itu. Mengemas kini kunci utama tidak pernah berfungsi.

Jangan usahakan kesilapannya untuk mencipta penyelesaian atau mengesahkannya, kerana berbuat demikian akan menjadikannya lebih berkemungkinan berlaku lagi.


Jawapan penuh.

Masalah sebenar anda ialah "pentadbir pangkalan data" anda yang melanggar peraturan asas pangkalan data: Jangan sekali-kali mengemas kini nilai kunci pengganti!

Dalam kes anda, keadaan lebih tragis kerana jurang dalam nilai lajur ID tidak penting. Jika jurang itu penting, anda lebih teruk. Mohon izin untuk menjelaskan...

Nama pengarang ialah pengecam sebenar anda. Kami tahu ini kerana ia mempunyai kekangan yang unik.

Lajur

ID ialah kunci pengganti, paling mudah dilaksanakan sebagai integer kenaikan automatik, tetapi kunci pengganti juga akan berfungsi dengan baik jika kunci pengganti ialah nombor rawak (unik). Jurang, atau pilihan nilai itu sendiri, tidak ada kaitan dengan kesahihan kunci pengganti.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan