Mysql stored procedure yang terpengaruh baris

ROW_COUNT() mengembalikan jumlah baris yang diperbarui, disisipkan, atau dihapus oleh pernyataan sebelumnya. Ini sama dengan jumlah baris yang ditampilkan oleh klien mysql dan nilai dari fungsi C API mysql_affected_rows()

Umumnya

  • Untuk pernyataan yang mengembalikan rangkaian hasil (seperti SELECT, SHOW, DESC atau HELP), kembalikan -1, meskipun rangkaian hasil kosong. Ini juga berlaku untuk pernyataan administratif, seperti MENGOPTIMALKAN
  • Untuk pernyataan DML selain SELECT dan untuk ALTER TABLE, kembalikan jumlah baris yang terpengaruh
  • Untuk pernyataan DDL (termasuk TRUNCATE) dan untuk pernyataan lain yang tidak mengembalikan set hasil apa pun (seperti USE, DO, SIGNAL atau DEALLOCATE PREPARE), kembalikan 0

Untuk UPDATE, baris yang terpengaruh secara default adalah jumlah baris yang benar-benar diubah. Jika flag CLIENT_FOUND_ROWS ke mysql_real_connect() ditentukan saat menghubungkan ke mysqld, baris yang terpengaruh adalah jumlah baris yang cocok dengan klausa WHERE

Untuk REPLACE, baris yang dihapus juga dihitung. Jadi, jika REPLACE menghapus satu baris dan menambahkan baris baru, ROW_COUNT() mengembalikan 2

Untuk MASUKKAN. PADA DUPLICATE KEY, baris yang diperbarui dihitung dua kali. Jadi, jika INSERT menambahkan baris baru dan memodifikasi baris lain, ROW_COUNT() mengembalikan 3

ROW_COUNT() tidak memperhitungkan baris akun yang tidak langsung dihapus/diperbarui oleh pernyataan terakhir. Ini berarti baris yang dihapus oleh kunci atau pemicu asing tidak dihitung

Peringatan. Anda dapat menggunakan ROW_COUNT() dengan pernyataan yang telah disiapkan, tetapi Anda harus memanggilnya setelah EXECUTE, bukan setelah DEALLOCATE PREPARE, karena jumlah baris untuk mengalokasikan persiapan selalu 0

Peringatan. Saat digunakan setelah pernyataan CALL, fungsi ini mengembalikan jumlah baris yang dipengaruhi oleh pernyataan terakhir dalam prosedur, bukan keseluruhan prosedur

Peringatan. Setelah INSERT DELAYED, ROW_COUNT() mengembalikan jumlah baris yang Anda coba masukkan, bukan jumlah penulisan yang berhasil


Berikut ini adalah prosedur yang menghitung jumlah baris yang terpengaruh oleh kueri MySQL −

mysql> Delimiter //
mysql> CREATE PROCEDURE `query`.`row_cnt` (IN command VarChar(60000))
    -> BEGIN
    -> SET @query = command;
    -> PREPARE stmt FROM @query;
    -> EXECUTE stmt;
    -> SELECT ROW_COUNT() AS 'Affected rows';
    -> END //
Query OK, 0 rows affected (0.00 sec)

mysql> Delimiter ;

mysql> Create table Testing123(First Varchar(20), Second Varchar(20));
Query OK, 0 rows affected (0.48 sec)

mysql> CALL row_cnt("INSERT INTO testing123(First,Second) Values('Testing First','Testing Second');");
+---------------+
| Affected rows |
+---------------+
| 1             |
+---------------+
1 row in set (0.10 sec)
Query OK, 0 rows affected (0.11 sec)

Mysql stored procedure yang terpengaruh baris


Mysql stored procedure yang terpengaruh baris

Manual MySQL mengatakan bahwa pernyataan pembaruan mengembalikan jumlah baris yang terpengaruh. Kami mencoba mencari cara untuk menggunakan fitur tersebut, dan tampaknya hanya sedikit orang yang menggunakannya atau bahkan berpikir untuk menggunakannya. Cara kami melakukannya di masa lalu adalah melakukan pembaruan dan kemudian memilih untuk menghitung. Namun, kami mencoba mengurangi ukuran prosedur tersimpan kami (kami membutuhkannya lebih cepat. ) dan menggabungkannya menjadi satu pernyataan akan membantu

 

Ada tips yang satu ini? . Pada dasarnya, dalam prosedur tersimpan, kami menginginkan sesuatu seperti

SET v_count = 
     UPDATE Users 
          SET active=1 
          WHERE username=v_username);
_

alih-alih

UPDATE Users 
     SET active=1 
     WHERE username=v_username;
SELECT COUNT(username) 
     INTO v_count 
     FROM Users 
     WHERE active=1 AND username=v_username;

 

 

Tautkan ke komentar
Berbagi di situs lain

Lebih banyak opsi berbagi

Mysql stored procedure yang terpengaruh baris
Mysql stored procedure yang terpengaruh baris

miseleigh

Diposting 23 Juli 2008

miseleigh

  • Mysql stored procedure yang terpengaruh baris
    Mysql stored procedure yang terpengaruh baris

  • Anggota
    • 63

  • Pengarang

    • Membagikan

Diposting 23 Juli 2008

Tidak apa-apa, kami tetap menemukan cara yang lebih baik untuk melakukannya, tetapi untuk referensi di masa mendatang bagi orang lain - ini disebut ROW_COUNT()

 

Cukup panggil SELECT ROW_COUNT() setelah menyisipkan, memperbarui, atau memilih, dan Anda akan mendapatkan jumlah baris yang terpengaruh

Apa yang terpengaruh baris dalam prosedur tersimpan MySQL?

mysql_affected_rows() dapat dipanggil segera setelah mengeksekusi pernyataan dengan mysql_real_query() atau mysql_query(). Ini mengembalikan jumlah baris yang diubah, dihapus, atau disisipkan oleh pernyataan terakhir jika itu adalah UPDATE , DELETE , atau INSERT. Untuk pernyataan SELECT, mysql_affected_rows() berfungsi seperti mysql_num_rows().

Bagaimana cara mengembalikan jumlah baris yang terpengaruh dari prosedur tersimpan?

Di SQL Server, Anda dapat menggunakan fungsi sistem @@ROWCOUNT untuk mengembalikan jumlah baris yang dipengaruhi oleh pernyataan T-SQL terakhir. Misalnya, jika kueri mengembalikan 4 baris, @@ROWCOUNT akan mengembalikan 4.

Bagaimana cara memeriksa berapa banyak baris yang akan terpengaruh di MySQL?

MySQL ROW_COUNT() dapat digunakan untuk mendapatkan jumlah total baris yang terpengaruh oleh kueri MySQL. Untuk mengilustrasikannya, kami membuat prosedur dengan bantuan yang dapat kami sisipkan catatan dalam tabel dan ini akan menunjukkan kepada kami berapa banyak baris yang telah terpengaruh.

Apa baris yang terpengaruh pada pembaruan di MySQL?

Untuk pernyataan UPDATE, nilai baris yang terpengaruh secara default adalah jumlah baris yang benar-benar berubah . Jika Anda menentukan flag CLIENT_FOUND_ROWS ke mysql_real_connect() saat menghubungkan ke mysqld, nilai baris yang terpengaruh adalah jumlah baris “ditemukan”; .