Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL तालिका में नए डेटा की निगरानी करें

आपका प्रश्न अस्पष्ट रहता है। केवल एक प्रकार के परिवर्तन की निगरानी करना - शीर्षक के अनुसार "नया डेटा" (INSERT) - किसी भी परिवर्तन का पता लगाने की तुलना में अधिक जटिल है (I want to detect the Changes in my table टिप्पणियों में जो सरल है)।

MySql तालिका का चेकसम प्राप्त करने के साधन प्रदान करता है:

checksum table TABLE_NAME [QUICK | EXTENDED]

एक InnoDB और MyISAM तालिका के लिए MySQL कार्यक्षेत्र परिणाम:

उन रिटर्न वैल्यू में बदलाव देखकर, आप किसी भी बदलाव का पता लगा सकते हैं। लेकिन ध्यान दें:

  • तालिका Checksum = 1 . के साथ बनाई गई होगी विकल्प
  • QUICK विकल्प 5.7.2 संस्करण से पहले InnoDB तालिकाओं पर काम नहीं करता है (IIRC और वर्तमान सामुदायिक संस्करण 5.7.14 है)।

सौभाग्य से, यदि आप कोई विकल्प निर्दिष्ट नहीं करते हैं, तो MySQL सबसे तेज़ विकल्प चुनता है जो एक मान लौटाएगा। इसलिए, टाइमर पर तालिका के अनुसार परिवर्तनों को ट्रैक करना आसान हो जाता है:

' 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)

आरंभ करें:

Timer1.Enabled = True

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

टाइमर टिक इवेंट:

' 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

माई डू सम मेथड हम केवल एक सूची बॉक्स में परिवर्तनों की रिपोर्ट कर रहे हैं:

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

वास्तव में केवल INSERTS जैसी किसी चीज़ को देखने के लिए, आपको किसी प्रकार की लॉग तालिका का उपयोग करना होगा। एक ट्रिगर जोड़ें जो उस तालिका को टाइमस्टैम्प और शायद एक्शन कोड ("सम्मिलित करें", "हटाएं") के साथ अपडेट करता है। फिर परिवर्तनों के लिए टाइमस्टैम्प की जाँच करें, शायद गैर-घड़ी क्रियाओं को फ़िल्टर करना।

विशेष रूप से कई तालिकाओं या कुछ परिवर्तन घटनाओं को देखने के लिए एक संस्करण एक वर्ग के रूप में बेहतर काम करेगा। टाइमर कोड को इनकैप्सुलेट किया जा सकता है और यह तालिका में बदलाव के लिए ईवेंट बढ़ा सकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL:एक अतिरिक्त कॉलम वाली दूसरी तालिका के साथ MySQL में एक तालिका से दूसरी तालिका में पूरी पंक्ति की प्रतिलिपि कैसे करें?

  2. फ़ंक्शन को पीडीओ में बदलें

  3. MySQL:क्वेरी निष्पादन का चयन करें और कनेक्शन की संख्या के साथ परिणाम लाने का समय बढ़ता है

  4. अरबी पाठ आउटपुट php mysql utf-8 रूपांतरण मुद्दा

  5. डीबी में उन्हें स्टोर करने के लिए सरणी को क्रमबद्ध करने का क्या मतलब है?