Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pantau Data Baru di Tabel MySQL

Pertanyaan Anda masih belum jelas. Memantau hanya satu jenis perubahan - "data baru" (INSERT) sesuai judul - lebih rumit daripada mendeteksi perubahan apa pun (sesuai I want to detect the Changes in my table dalam komentar yang lebih sederhana).

MySql menyediakan sarana untuk mendapatkan checksum dari sebuah tabel:

checksum table TABLE_NAME [QUICK | EXTENDED]

Hasil MySQL Workbench untuk tabel InnoDB dan MyISAM:

Dengan memperhatikan perubahan pada nilai yang dikembalikan tersebut, Anda dapat mendeteksi perubahan apa pun. Tapi perhatikan:

  • Tabel harus dibuat dengan Checksum = 1 pilihan
  • QUICK opsi tidak berfungsi pada tabel InnoDB sebelum versi 5.7.2 (IIRC dan versi Komunitas saat ini adalah 5.7.14).

Untungnya, jika Anda tidak menentukan opsi, MySQL tampaknya memilih yang tercepat yang akan mengembalikan nilai. Jadi, menjadi mudah untuk melacak perubahan berdasarkan tabel pada Timer:

' Track last checksum by table
Friend Class TableItem
    Public Property Name As String
    Public Property CheckSum As Int64

    Public Sub New(n As String)
        Name = n
        CheckSum = 0
    End Sub
End Class
' a list of them to track more than one table:
Private Tables As List(Of TableItem)

Inisialisasi:

Timer1.Enabled = True

Tables = New List(Of TableItem)
Tables.Add(New TableItem("Sample"))
Tables.Add(New TableItem("SampleISAM"))

Acara Timer Tick:

' Note: cannot use Parameters for table or col names
Dim sql = "CHECKSUM TABLE {0} "

Using dbcon As New MySqlConnection(mySQLConnStr)
    dbcon.Open()
    Using cmd As New MySqlCommand(sql, dbcon)
        ' loop thru collection, polling one at a time
        For Each tbl As TableItem In Tables
            cmd.CommandText = String.Format(sql, tbl.Name)

            Using rdr As MySqlDataReader = cmd.ExecuteReader()
                If rdr.Read Then
                    Dim thisResult = rdr.GetInt64(1)

                    ' ignore the first result
                    If tbl.CheckSum = 0 Then
                        tbl.CheckSum = thisResult
                        Return
                    End If
                    ' save the last non-zed value
                    If tbl.CheckSum <> thisResult Then
                        tbl.CheckSum = thisResult
                        ' method to do something when changed:
                        TableChanged(tbl.Name)
                    End If

                End If
            End Using
        Next
    End Using
End Using

Metode saya melakukan sesuatu, kami hanya melaporkan perubahan ke kotak daftar:

Private Sub TableChanged(tbl As String)
    lb.Items.Add(String.Format("Table {0} changed {1}", tbl,
                               DateTime.Now.ToString("HH:mm:ss.ffffff")))
End Sub

Untuk benar-benar menonton sesuatu seperti hanya INSERTS, Anda harus menggunakan semacam tabel log. Tambahkan pemicu yang memperbarui tabel itu dengan TimeStamp dan mungkin kode tindakan ("masukkan", "hapus"). Kemudian cukup periksa TimeStamp untuk melihat perubahan, mungkin menyaring tindakan non-tonton.

Khususnya versi untuk menonton banyak tabel atau peristiwa perubahan tertentu akan berfungsi lebih baik sebagai kelas. Kode pengatur waktu dapat dienkapsulasi dan dapat memunculkan peristiwa untuk perubahan tabel.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TIMESTAMPDIFF() Contoh – MySQL

  2. Apa cara yang baik untuk mendenormalisasi database mysql?

  3. Cara Menonaktifkan Pemeriksaan Kunci Asing di MySQL

  4. MySQLd tidak dimulai setelah brew upgrade dari 5.6 ke 5.7

  5. MySQL - Menggunakan If Then Else di MySQL UPDATE atau SELECT Query