Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk melaksanakan pengiraan masa nyata dan pengiraan berulang data dalam MySQL?

Bagaimana untuk melaksanakan pengiraan masa nyata dan pengiraan berulang data dalam MySQL?

WBOY
WBOYasal
2023-07-29 23:17:221092semak imbas

Bagaimana untuk melakukan pengiraan masa nyata dan pengiraan berulang data dalam MySQL?

MySQL ialah perisian sumber terbuka yang digunakan secara meluas dalam sistem pengurusan pangkalan data hubungan. Selain digunakan untuk menyimpan dan mendapatkan data, MySQL juga boleh melakukan pengiraan masa nyata dan pengiraan berulang. Artikel ini menerangkan cara menggunakan MySQL untuk melaksanakan kedua-dua jenis pengiraan pada data anda dan menyediakan contoh kod yang sepadan.

Pengkomputeran masa nyata bermakna data boleh diproses dan dikira semasa ia mengalir ke dalam pangkalan data. MySQL menyediakan mekanisme yang dipanggil pencetus yang boleh mencetuskan operasi tertentu secara automatik sebelum atau selepas operasi pemasukan, kemas kini atau pemadaman data.

Contoh kod berikut menunjukkan cara mencipta pencetus dalam MySQL dan melakukan pengiraan masa nyata.

-- 创建一个表
CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    product_name VARCHAR(50),
    quantity INT,
    total_price DECIMAL(10,2)
);

-- 创建一个触发器,在数据插入时自动计算总价
CREATE TRIGGER calculate_total_price
BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
    SET NEW.total_price = NEW.quantity * 10.00;
END;

-- 向表中插入数据
INSERT INTO orders (product_name, quantity) VALUES ('Product A', 5);

Dalam kod di atas, kami mula-mula mencipta jadual bernama pesanan, yang mengandungi tiga lajur: nama produk, kuantiti dan jumlah harga. Kami kemudian mencipta pencetus melalui pernyataan CREATE TRIGGER yang secara automatik mengira jumlah harga setiap kali data dimasukkan ke dalam jadual. Logik pengiraan dilengkapkan melalui SET NEW.total_price = NEW.quantity * 10.00;, dengan NEW mewakili data yang baru dimasukkan. orders 的表,该表包含了产品名称、数量和总价这三列。然后,我们通过 CREATE TRIGGER 语句创建了一个触发器,该触发器在每次向表中插入数据时自动计算总价。计算逻辑通过 SET NEW.total_price = NEW.quantity * 10.00; 完成,其中 NEW 表示新插入的数据。

当我们插入一条新的数据时,触发器会自动计算总价并填充到相应的列中。例如,上述代码中插入的数据为产品名称为 'Product A',数量为 5,总价将会自动计算为 50.00。

迭代计算是指在数据集合已经存在的情况下,使用已有的数据对集合中的每个数据进行逐个计算。MySQL 提供了一种称为游标(cursor)的机制,可用于逐行地访问查询结果,并进行特定操作。

下面的代码示例展示了如何在 MySQL 中使用游标进行迭代计算。

-- 创建一个存储过程
DELIMITER //
CREATE PROCEDURE calculate_sum()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE total DECIMAL(10,2) DEFAULT 0.00;
    DECLARE cur CURSOR FOR SELECT price FROM products;
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
    OPEN cur;
    
    read_loop: LOOP
        FETCH cur INTO price;
        
        IF done THEN
            LEAVE read_loop;
        END IF;
        
        SET total = total + price;
    END LOOP;
    
    CLOSE cur;
    
    SELECT total;
END //
DELIMITER ;

-- 执行存储过程
CALL calculate_sum();

上述代码中,我们首先创建了一个名为 calculate_sum 的存储过程。该存储过程中声明了一个游标 cur,用于从 products 表中获取价格。然后,我们通过 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 定义了一个处理器,在游标遍历结束时将 done 变量设置为 TRUE

接下来,我们打开游标 cur 并开始遍历数据。在每次循环中,我们通过 FETCH cur INTO price; 将查询结果中的价格赋值给变量 price。如果遍历结束,则跳出循环;否则,将当前的价格累加到总价 total 上。

最后,我们关闭游标 cur 并通过 SELECT total;

Apabila kami memasukkan sekeping data baharu, pencetus akan mengira jumlah harga secara automatik dan mengisinya ke dalam lajur yang sepadan. Sebagai contoh, data yang dimasukkan dalam kod di atas ialah nama produk ialah 'Produk A', kuantitinya ialah 5, dan jumlah harga akan dikira secara automatik sebagai 50.00.

Pengiraan berulang merujuk kepada menggunakan data sedia ada untuk mengira setiap data dalam set satu demi satu apabila set data sudah wujud. MySQL menyediakan mekanisme yang dipanggil kursor yang boleh digunakan untuk mengakses hasil pertanyaan baris demi baris dan melaksanakan operasi tertentu. 🎜🎜Contoh kod berikut menunjukkan cara menggunakan kursor untuk pengiraan berulang dalam MySQL. 🎜rrreee🎜Dalam kod di atas, kami mula-mula mencipta prosedur tersimpan bernama calculate_sum. Kursor cur diisytiharkan dalam prosedur tersimpan ini, yang digunakan untuk mendapatkan harga daripada jadual products. Kemudian, kami mentakrifkan pengendali melalui DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; untuk menetapkan pembolehubah done kepada TRUE. 🎜🎜Seterusnya, kami membuka kursor <code>cur dan mula melintasi data. Dalam setiap gelung, kami menetapkan harga dalam hasil pertanyaan kepada pembolehubah price melalui FETCH cur INTO price;. Jika traversal tamat, keluar dari gelung jika tidak, tambahkan harga semasa kepada jumlah harga total. 🎜🎜Akhir sekali, kami menutup kursor cur dan mengembalikan jumlah harga yang dikira melalui SELECT total;. 🎜🎜Melalui contoh kod di atas, kita dapat melihat bahawa MySQL mempunyai fleksibiliti yang besar dalam pengiraan masa nyata dan pengiraan berulang. Sama ada semasa data mengalir masuk atau apabila data sudah wujud, MySQL boleh memenuhi pelbagai keperluan pengiraan dan menyediakan mekanisme yang sepadan untuk melaksanakan pengiraan ini. Saya berharap artikel ini dapat memberi panduan dan rujukan yang berguna kepada pembaca. 🎜

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengiraan masa nyata dan pengiraan berulang data dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn